要使用Python扩展NotePad++,首先需要为NotePad++安装Python Script插件,NotePad++插件的安装方法可以参考这里。
安装了Python Script插件后,在菜单的Plugins下就会看到Python Script菜单了。
Python Script介绍
点击Plugins->Python Script->New Script菜单,打开的目录就是用户的Python脚本存放的目录。将Python脚本放到该目录下后,在Python Script下的Scripts目录下将出现与Python脚本同名的菜单,点击该菜单即可执行对应的Python脚本。
例如,我在该目录下放置了两个脚本:
则在Scripts目录下为:
点击Show Console可以打开Python的控制台,里面会显示使用的Python的版本号,Python脚本可以输出信息到控制台中,后面将详细介绍。
Context-help是Python Script的帮助文档,包括了Api的介绍,后面将经常用到。
Npp模块介绍
Npp模块包含了notepad、editor和console对象,这些对象用于操作Notepad++,notepad对象是Notepad类的实例,editor是Editor类的实例,console对象是Console类的实例。
在startup.py脚本中已经引入了Npp模块:
from Npp import *
由于startup脚本和你的脚本在同一个命名空间下,在你的Python脚本中可以直接使用它们,在后面的例子中会具体看到。
下面对Npp中的对象做一个简单介绍,更详细的接口参考Context-help。
console对象
Console可以打开控制台,console对象就是用于操作该控制台窗口,你能显示或者隐藏控制台、清除控制台内的内容、输出信息到控制台。console还支持运行一个命令并将命令结果输出到控制台,这样,你能用Python Script调用你的编译器,或者运行任何命令行工具。
下面是一个简单的例子,显示控制台,并打印信息:
console.show() console.write("Hello,world!")
将上面的脚本保存到指定目录,并在scprits菜单下执行该脚本,就会自动打开控制台,并在控制台中输入“Hello,world!”,即下面的效果:
notepad对象
notepad对象就代表了Notepad++自身,可以使用notepad对象打开和保存文件、选择不同的tab、转换格式、运行插件命令等。
下面是一个例子,如果你编辑的是以“.log”结尾的文件,在该文件保存时,将自动在文件结尾添加时间戳:
import datetime def addSaveStamp(args): if notepad.getCurrentFilename()[-4:] == ‘.log‘: editor.appendText("File saved on %s\r\n" % datetime.date.today()) notepad.callback(addSaveStamp, [NOTIFICATION.FILEBEFORESAVE])
notepad的callback方法就是注册一个时间的回调监听,事件类型在枚举NOTIFICATION中定义。
如果你想要取消一个注册的监听,则通过下面的方法:
#取消所有的注册监听 notepad.clearCallbacks() #取消针对某些事件的注册监听 notepad.clearCallbacks([NOTIFICATION.FILESAVING, NOTIFICATION.FILESAVED]) #取消指定函数的监听 notepad.clearCallbacks(addSaveStamp) #取消指定函数对某些事件的监听 notepad.clearCallbacks(addSaveStamp, [NOTIFICATION.FILESAVED])
editor对象
editor对象对应Notepad++的文本区域,提供了一些方法帮助操作数据,其中很多方法直接使用Python也可以实现,editor对象提供这些方法只是为了简化操作。
下面是一个简单的例子,找到当前打开的文件中以‘#‘开头的行,删除这些行,并保存文件:
for i in range(editor.getLineCount() - 1, -1, -1) : line = editor.getLine(i) if line.startswith(‘#‘): editor.gotoLine(i) editor.lineDelete() notepad.save()
脚本从最后一行开始向前遍历,找到以‘#‘开头的行就将其删除,最后保存文件。这段脚本的问题是如果文件没有保存过,则会弹出一个文件保存对话框。
版权声明:本文为博主原创文章,未经博主允许不得转载。