sublime Text3 插件编写教程_第一课
今天给大家分享一下编写一个Sublime Text3 插件的流程以及使用插件解决的一个实际问题。(我的新书《Python爬虫开发与项目实战》出版了,大家可以看一下样章)
一、开发插件的前提条件
- 开发sublime插件用到的是Python语言,因此必须懂Python语言的基础语法。学习Python语言,推荐学习廖雪峰的Python教程(http://www.liaoxuefeng.com/)。
- 编写插件处理文本用到正则表达式的地方非常多,尽量了解正则表达式语法。学习正则表达式,推荐正则表达式30分钟入门教程(http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html)。
二、新建插件
1. 通过Tools -> New Plugin...来打开一个初始化的插件编辑文件。

初始化后的插件有如下内容:

2. 通过Preferences -> Browse Packages...打开Packages文件夹,在该文件夹下建立个子文件夹,名字为你想开发的插件名字,如:defineReplace。

回到插件开发的初始化编辑器页面,通过 ctrl+s 保存这个文件,并放到你建立的子文件夹下,文件名如:defineReplace.py 。
3、通过 ctrl+` 快捷键或者View -> Show Console 打开SublimeText的控制台。

并在输入框执行如下的命令:view.run_command('example')

执行结果如下,第一行插入了Hello,World!:

4、ExampleCommand类名字改为你想要的插件名字,如: definereplaceCommand(将Command之前的名称先全部小写,当然还有其他方式),然后就可以开发该插件对应的功能了,当然这时候输入的命令也变成了view.run_command('definereplace'),这样执行才有效。
注意:command命令的名称是根据大写字符进行拆分的,如果定义的是class DefineRePlaceCommand,那么输入的命令是view.run_command('define_re_place'),拆分出来的单词需要全部小写,中间以下划线相连接。

5、通过官方的API文档查找你需要的接口,文档见:http://www.sublimetext.com/docs/3/api_reference.html
二、编写插件
下面我分享一下我写的一个插件,这个插件的功能是将verilog文件中的define定义,全部替换成真实的值。

将文件中的宏定义替换成真实的值:

下面将我插件的源代码分享一下,并且提供了详细的注释,大家可以对照着API文档,理解我代码的内容:
import sublime, sublime_plugin
import re,os class definereplaceCommand(sublime_plugin.TextCommand):
def run(self, edit):
#找到要替换的文档中include包含的文件,将他们的文件路径添加到一个list中
starts = self.view.find_all('`include\s+"(.+)"',0)
includes_file=[]
#正则表达式匹配include中的文件名称。例如:`include "./define_cpu.v"
pattern = '`include\s+"(.+)"'
for start in starts:
#截取匹配到的字符串
include_str = self.view.substr(sublime.Region(start.a,start.b))
if re.match(pattern,include_str):
match_include = re.search(pattern,include_str)
include_file = match_include.group(1)
includes_file.append(include_file)
if len(includes_file) < 1:
return ###然后要做的是打开所有的include文件,并读取文件内容,将里面的define定义存成字典 #获取当前文件的文件路径
file_name = self.view.file_name()
file_path = os.path.dirname(file_name)
define_value={}
#正则表达式匹配include文件中定义的define的值,例如define_cpu.v中的
#`define P_C_ADDR_1 9'b0110_0000_0
pattern = '`define\s+(\S+)\s+(\S+)\s'
for include_file in includes_file:
#获取要读取文件的完整路径
file_full_path = os.path.join(file_path,include_file)
with open(file_full_path,'rb') as fileReader:
content = fileReader.read()
try:
content = content.decode('utf-8')
except:
content = content.decode('gbk') matchs_def_val = re.findall(pattern,content)
print(matchs_def_val)
for def_val in matchs_def_val:
define = def_val[0]
value = def_val[1]
if len(define.strip()) >0 and len(value.strip()) >0:
define_value[define.strip()] = value.strip() ###最后是将打开文档中的define定义全部替换成真实的值 #首先找到文档中引用的宏定义
pattern = '`(\w+)'
finds = self.view.find_all(pattern,0)
startpoint = 0
for i in range(len(finds)):
start = self.view.find(pattern,startpoint)
content = self.view.substr(sublime.Region(start.a,start.b)).replace('`','')
if define_value.get(content)!=None:
#找到宏定义的位置,并从存储的define_value字典中查找真实的值,进行替换。
self.view.replace(edit,start,define_value[content])
else:
startpoint = start.b
三、绑定快捷键
在defineReplace文件夹下新建映射文件,文件名是固定的。

这两个文件分别对应着不同的平台windows和linux,当然在Mac平台是Default (OSX).sublime-keymap。文件内容如下:
[
{ "keys": ["ctrl+shift+r"], "command": "definereplace"}
]
keys代表对应的快捷键,command代表着要执行的命令。
四、运行效果
运行前:

ctrl+shift+r运行后:

今天的分享就到这里,下一篇继续分析。如果大家觉得还可以呀,记得推荐呦。

欢迎大家支持我公众号:
本文章属于原创作品,欢迎大家转载分享。尊重原创,转载请注明来自:七夜的故事 http://www.cnblogs.com/qiyeboy/
sublime Text3 插件编写教程_第一课的更多相关文章
- Sublime Text3 插件安装教程
链接地址:http://jingyan.baidu.com/article/4d58d541caeeaa9dd4e9c093.html
- sublime text3插件使用
sublime text 使用BUG解决 一.安装emmet.Package Control插件ctrl+shift+p -> install package ->emmet(Zen Co ...
- 【】Nessus安全测试插件编写教程
Nessus安全测试插件编写教程 作者:Renaud Deraison 翻译:nixe0n 1.怎样编写一个高效的Nessus安全测试插件 在Nessus安全测试系统中, 所有的安全测试都是由ness ...
- Sublime text3插件安装方法
一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...
- sublime text3插件安装及使用
sublime官网下载地址:http://www.sublimetext.com/ 我用的是SubLime text3,插件安装命令地址:https://packagecontrol.io/insta ...
- typecho插件编写教程1 - 从HelloWorld说起
typecho插件编写教程1 - 从HelloWorld说起 老高 187 5月25日 发布 推荐 0 推荐 收藏 2 收藏,189 浏览 最近老高正在编写一个关于typecho的插件,由于typec ...
- sublime Text3 插件
sublime Text3 插件大全以及使用方法 参考网址: https://www.cnblogs.com/qqing/p/6872195.html
- ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言 1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉W ...
- Sublime Text3 插件收录
收录常用的Sublime Text3 插件, 方便安装使用,免得每次一个个的搜, 欢迎补充 安装方法直接打开install package 搜索安装 1. Babel 支持react jsx语法 2. ...
随机推荐
- VM 虚拟机 Error 1324. The path My Documents contains a invalid chara 。
当安装VM(虚拟机)时,安装到一半时,提示:Error 1324. The path My Documents contains a invalid chara . 就是提示路径无效. 按下面的路径: ...
- Study Emgu VoteForUniqueness
Recently i was studying Emgu, but find there is a bug in the VoteForUniqueness function in class Fea ...
- zookeeper节点失效重连机制
http://www.blogjava.net/xylz/archive/2011/12/05/365578.html http://blog.csdn.net/tswisdom/article/de ...
- SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高
1.背景知识 在讲SVD++之前,我还是想先回到基于物品相似的协同过滤算法.这个算法基本思想是找出一个用户有过正反馈的物品的相似的物品来给其作为推荐.其公式为:
- ---Ubuntu 14.04 虚拟机器和主机时间同步
先把vmware tool 装好! sudo /usr/bin/vmware-toolbox-cmd timesync enable
- VS&SQL StartUp Crash - CLR20R3
VS2013和SQL Management Studio 在启动时直接崩溃,错误提示CLR20R3,问题签名4是windowsbase, 这说明是操作系统的问题导致启动崩溃,在网上找到一些解决方案: ...
- java 链接jdbc
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- 2015年可用的TRACKER服务器大全
udp://tracker.openbittorrent.com:80/announceudp://tracker.publicbt.com:80/announcehttp://pubt.net:27 ...
- 【POJ3237】Tree(树链剖分)
题意:在一棵N个节点,有边权的树上维护以下操作: 1:单边修改,将第X条边的边权修改成Y 2:区间取反,将点X与Y在树上路径中的所有边边权取反 3:区间询问最大值,询问X到Y树上路径中边权最大值 n& ...
- MCS-51系列特殊功能寄存器(摘抄)
1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八 ...
