dingsir的个人博客分享 http://blog.sciencenet.cn/u/dingsir

博文

利用Ruby脚本扩展EditPlus的替换功能

已有 2550 次阅读 2021-12-12 15:46 |个人分类:软件杂谈|系统分类:教学心得

我用过很多文本编辑器,以前很喜欢用UltraEdit,后来又改用Sublime Text 3, 这两年又改到EditPlus和Typora了,要格式控制的用Typora,一般的文本处理用Editplus,后者体积小,启动快,功能也不差,很适合我这种喜欢快速启动快速编辑的风格。

EditPlus有一点很好,支持正则表达式的查找替换,为一些复杂的文本查找提供了很大的方便,很对我的胃口。但又发现它对正则的支持又不够强,比如我想查找以下文本的数字 1923, 1924,在它前面加上ZHY前缀,但是对已经有了ZHY前缀的则不加处理.

We developped additives like 1923, 1924, ZHY1965 and others compounds.

正则表达式这样设计:  

查找

(?<!ZHY)(\d{4})

替换

ZHY\1

但是在EditPlus, 不支持这种否定逆序环视(negative lookbehind)的正则查找.

EditPlus不支持这种语法.png


如果我经常要进行这种形式的查找,怎么办呢?我能不能将文本导到外部程序去进行处理,再替换回来呢?  

结果是可以的,因为EditPlus提供了一些自定义工具的机制,我们可以这么做.

先写一段处理这种文本的Ruby脚本,如下

Ruby替换脚本.png

这个脚本存放在D:\greensoft\下。 再配置EditPlus的自定义工具,配置方法如下

EditPlus中设置User Tools.png

这样配置好了之后,在编辑器中选中要替换的文本,再点击自定义工具的命令,就替换好了,非常方便。如果需要其它更复杂的处理,比如将数字转换成中文或大写的金额什么的,写不同的脚本就可以。

背后的原理也简单说一下,1. 选中文本之后,点击自定义工具,EditPlus就会将选中的内容传递到$(CurSel)这个变量中,我给它加上双引号,是为了保证文本完整的作为一个参数传递,即使有空格或逗号等分隔符,也不会被命令行拆解为多个参数。2.参数(这段文本)传递给脚本之后,脚本中以特定的ARGV变量名被代码读取,它先对参数进行一个组合形成一个字符串(只有一个参数时不这么做也可以),使用字串符的gsub!方法全部替换, 该方法的第1个参数是查找的正则样式,就是上面设计的那个,第二个是用于替换的新文本,Ruby中使用双引号时,反斜框要转义,所以写成 "\\1",不过用单引号形式的'\1'也可以的. 3.用print输出到控制台,如果用puts输出,会在末尾附加一个换行符,返回EditPlus时会多一个换行,一般我们不希望这样。

当然, 要运行这个脚本,电脑上要有Ruby解释器,这是运行脚本的前提.网上找找就有,免费的. https://rubyinstaller.org/downloads/



https://blog.sciencenet.cn/blog-1213210-1316256.html

上一篇:配方文本与配方数值 相互转换与合成的小工具
下一篇:《配方文本与配方数值 相互转换与合成的小工具》附件更新
收藏 IP: 183.156.10.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 00:40

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部