1、最新UltraEdit编辑器使用技巧之内置JS脚本UltraEdit编辑器使用技巧之内置JS脚本UltraEdit编辑器使用技巧内置JS脚本前言:我使用的UE版本是14.20,应该是现今较通用版本。恕其他版本无暇多予比对。之前一直用Editplus,因速度比拟快,功能也尚可,且以前版本的UE没什么独到之处,直到用了14.20,用了其强大的自定义功能,以及内置JS脚本而非过于弱智的宏,才彻底抛弃Editplus,转而研究UE,并彻底被其吸引一、脚本使用首先讲讲UE使用脚本的好处和根本原理:使用脚本相当于是把外置的一个程序引用到编辑器之中,作为它的一个可执行命令,就好似我们UE中编辑-删除-删除至
2、行尾;或者在word之中,可以选中一段内容-右键-选择格式相似的文本这个例子可能不恰当,因为这已经不是纯文本编辑,而是附带了格式的。但其本质是一样的。如果我们要使用自己特有的功能,而不是系统提供的呢?如果我要统计文本里面有多少个字符串TEST怎么做?我要统计只在行首显示的TEST怎么做?如果我不但要统计有多少个行首的TEST,还要把这些行都重新复制到一个新的文本,该怎么做?在数据量小的时候,可以手工操作,可如果这是一个50K的文本,估计一天之内,你就不用干别的了,如果是500K呢?!本质上来说脚本和宏的道理是一样的,只是宏靠的是录制,记录你一连串的操作,以便之后你再使用同样的操作的时候,可以仅
3、仅点击一下鼠标或者用个快捷键,就实现了之前的一连串操作。但是如果你没有确定的操作该怎么办呢?就好似刚刚说的“不单要统计有多少个行首的TEST,并且还要把这些行都重新复制到一个新的文本,这个操作到底该怎么录制,我还真说不清楚估计不录个十次八次的,谁都不知道自己的操作对不对。因此说,宏有它的局限性,不适于过于复杂的操作,当然宏本身也是可以编辑的,但是相对于脚本语言来说,晦涩难懂的宏语句绝对不是给人看的据说有“编辑器之神之称的Emacs就是靠它的内置脚本编辑方法,维护着绝对老大的地位。我无缘接触Emacs,幸好UE也终于有了这个功能,并且用的还是比我使用的例子数据如下:this is the tes
4、t data. #this is the test data. this is the test data. this is the test data. test this is the test data. test this is the test data. test this is the test data. test this is the test data. test this is the test data. test #this is the test data. test this is the test data. test this is the test dat
5、a. test this is the test data. test this is the test data. test this is the test data. test this is the test data. test this is the test data. this is the test data. this is the test data. #this is the test data. this is the test data. this is the test data. this is the test data. this is the test d
6、ata. this is the test data. this is the test data. this is the test data. this is the test data.二、程序举例1. 下面以刚刚的“如果我要统计文本里面有多少个字符串TEST怎么做?为例,讲解UE-JS。UltraEdit.activeDocument.top(); /把光标移至文本的最顶端var str_f = test; /要搜索的字符串var cnt1 = 0; /个数统计UltraEdit.activeDocument.findReplace.find(str_f); /查找字符串 str_fw
7、hile (UltraEdit.activeDocument.isFound() /如果找到要查询的字符串,那么执行下面程序 cnt1 = cnt1 + 1; UltraEdit.activeDocument.findReplace.find(str_f); /再一次查找UltraEdit.messageBox(共搜索到 + cnt1 + 个字符串); /弹出窗口显示结果以上程序相当于是用程序步骤模仿手工操作,并同时加上手动的计数。程序不会重新从头搜索,所以向下搜不到字符串的时候,就跳出循环,显示结果了。这个需求也有另一种方法来做全部通过标准的JS。此种方法不是很推荐,但本质上来说更加灵活,适
8、于JS方面比拟擅长者,在此我也写出来供大家参考。JS的function 我就不多做解释了,因为其很灵活,我只是随便用了一种。function count_str(text_all,str_f) var result = ; result = text_all.split(str_f); return result.length - 1;UltraEdit.activeDocument.selectAll(); /选择全部文本var text_all = UltraEdit.activeDocument.selection; /获取文本为字符串var str_f = test; /要搜索的字符串
9、var cnt1 =count_str(text_all,str_f); /调用函数 count_strUltraEdit.messageBox(共搜索到 + cnt1 + 个字符串); /弹出窗口显示结果2. 我们再看“我要统计只在行首显示的TEST怎么做?UltraEdit.activeDocument.top(); /把光标移至文本的最顶端UltraEdit.activeDocument.findReplace.regExp = true; /使用正那么表达式查找var str_f = test; /要搜索的字符串:行首的testvar cnt1 = 0; /个数统计UltraEdit.
10、activeDocument.findReplace.find(str_f); /查找字符串 str_fwhile (UltraEdit.activeDocument.isFound() /如果找到要查询的字符串,那么执行下面程序 cnt1 = cnt1 + 1; UltraEdit.activeDocument.findReplace.find(str_f); /再一次查找UltraEdit.messageBox(共搜索到 + cnt1 + 个字符串); /弹出窗口显示结果这个时侯就需要用到正那么表达式了,正那么表达式作为“非人类语言,本身值得重新讲一次,但是网上已经有很多相关的资料,本人的
11、水平也有限,就不再赘述了。各位可以自己去看看,UE本身也有正那么表达式的参考,仔细研究研究都能明白。闲话少说,看程序:同上面第一个程序,这个也可以全部通过标准的JS来做。不过在这里再写出来意义不大。不再重复。3. 我们最后再看看“如果我不单要统计有多少个行首的TEST,并且还要把这些行都重新复制到一个新的文本,该怎么做?这里不单要读,要匹配查询,还要写到其他的文件里,稍微要再多一个步骤。略有不同的地方是“UltraEdit.document0.write(line);这一句,表示把一个字符串写到一个文档里面,UltraEdit.document0 表示的是UE翻开窗口中的第一个窗口。请看程序:
12、UltraEdit.activeDocument.top(); /把光标移至文本的最顶端UltraEdit.activeDocument.findReplace.regExp = true; /使用正那么表达式查找var str_f = test; /要搜索的字符串:行首的testvar cnt1 = 0; /个数统计var line;UltraEdit.activeDocument.findReplace.find(str_f); /查找字符串 str_fwhile (UltraEdit.activeDocument.isFound() /如果找到要查询的字符串,那么执行下面程序 cnt1
13、= cnt1 + 1; UltraEdit.activeDocument.selectLine(); line = UltraEdit.activeDocument.selection; UltraEdit.document0.write(line); UltraEdit.activeDocument.findReplace.find(str_f); /再一次查找 附注:1.UE按名称排序,正常情况下,我会用一个日期命名的文件作为当日的临时文件,其他的都是字母命名,每次翻开当日临时文件都是排在第一个,也方便查找每天工作的文本记录。2.脚本使用帮助参见UE Help“入门-脚本命令。3.UE虽然支持脚本,但暂时还没有调试功能,这个很让人郁闷。暂时我也还没想到太好的方法,只能是靠经验了。4.正那么表达式问题,或许以后我会另写一篇,希望有人支持!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1