用过vs的人都知道,vs会自动在代码中运算符的前后加空格,比如 i=1; 换行后会自动变成i = 1;

开始觉得这个挺烦的,后来习惯了,发现这个功能还是挺好的,然代码更清晰.

最近换了sublimetext3,也想有类似功能,找了好久,没有发现很满意的,于是就自己动手了

代码很简单

使用方法(仅限于sublimetext3, 2的话没试过):

在sublimetext3根目录的Data/Packages目录下见一个叫InsertSpace的目录

InsertSpace目录下建一个文件InsertSpace.py, 把InsertSpace的代码复制下来在粘贴到这个文件

然后复制键绑定的代码,粘贴到键绑定文件中

OK

注意:这个键绑定只在c,c++,py,cs文件中起作用,我是用来写c的,所以只做了c运算符

要在其他文件中起作用,修改键绑定代码中:

{ “key”: “selector”, ……

行,加入相应的文件scope名即可,其他代码文件运算符可能不一样,要做相应修改

insertSpace.py

import sublime, sublime_plugin
req_single_op_all = '(([\+\-\*/%=<>\|&\^\?]|(<<)|(>>))(=)|(!=))|((?<=[\w ])((<<)|(>>)|(&&)|(\|\|)|[\+\-\*/%=<>\|&\^\?])(?=[\w ]))'
#这个正则表达式匹配:
#+ - * / % = < > | & ^ ? << >> && || != += -= *= /= %= &= ^= |= <<= >>=
reg_tri_op = '\?[\w ]*:'
#三目运算符?:,需要特殊处理,因为':'号在switc case语句中前后不需要加空格
reg_comma = '(,|;)(?=[\w])'
#','';'运算符,需要特殊处理,因为一般','';'前面不加空格,而后面加空格
char_to_ins = ' ' class OpUnit:
subplg = None
subedit = None
def __init__(self, regex, ins_func):
self.regex = regex
self.ins_func = ins_func #对于一般的运算符,前后都要加空格
@staticmethod
def singleOpInsert(begin, end):
view = OpUnit.subplg.view
edit = OpUnit.subedit
if view.substr(begin - 1) != char_to_ins:
view.insert(edit, begin, char_to_ins)
if view.substr(end + 1) != char_to_ins:
view.insert(edit, end + 1, char_to_ins)
elif view.substr(end) != char_to_ins:
view.insert(edit, end, char_to_ins) #对于三目运算符,?号前后不加空格(因为已经在匹配普通运算符时加了空格),':'号前后才加空格
@staticmethod
def triOpInsert(begin, end):
view = OpUnit.subplg.view
edit = OpUnit.subedit
if view.substr(end - 2) != char_to_ins:
view.insert(edit, end - 1, char_to_ins)
if view.substr(end + 1) != char_to_ins:
view.insert(edit, end + 1, char_to_ins)
elif view.substr(end) != char_to_ins:
view.insert(edit, end, char_to_ins) #对于','';'运算符,只在后面加空格
@staticmethod
def commaOpInsert(begin, end):
view = OpUnit.subplg.view
edit = OpUnit.subedit
if view.substr(end) != char_to_ins:
view.insert(edit, end, char_to_ins) op_units = (OpUnit(req_single_op_all, OpUnit.singleOpInsert),
OpUnit(reg_tri_op, OpUnit.triOpInsert),
OpUnit(reg_comma, OpUnit.commaOpInsert)) class InsertSpaceCommand(sublime_plugin.TextCommand):
def run(self, edit):
cur_region = self.view.sel()[0]
(cur_row,cur_col) = self.view.rowcol(cur_region.end()) #获得当前光标所在位置的行列
OpUnit.subplg = self
OpUnit.subedit = edit
for op in op_units:
regex = op.regex
op_func = op.ins_func
#find函数会找到start_pos后第一个匹配正则表达式的region,
start_pos = self.view.text_point(cur_row , 0)
matched_region = self.view.find(regex, start_pos)
(row, col) = self.view.rowcol(matched_region.end())
while row == cur_row: #如果匹配到的文本已经不再当前行,则不再匹配
begin = matched_region.begin()
end = matched_region.end()
if begin < 0 or end < 0:
break;
op_func(begin,end)
start_pos = end + 1
matched_region = self.view.find(regex, start_pos)
(row, col) = self.view.rowcol(matched_region.end())
self.view.run_command("insert", {"characters": "\n"}) #最后需要插入一个换行符, 因为这是与enter键绑定的,它覆盖了默认的一个enter键绑定,所以要手动插入换行

按键绑定

{ "keys": ["enter"], "command": "insert_space", "context":
[
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
{ "key": "following_text", "operator": "not_regex_contains", "operand": "^\\}", "match_all": true },
{ "key": "selector", "operator": "equal", "operand": "(source.c, source.c++, source.python, source.cs)", "match_all": true },
{ "key": "panel_has_focus", "operator": "not_equal", "operand": true},
{ "key": "auto_complete_visible", "operator": "equal", "operand": false},
]
},

转自https://www.oschina.net/code/snippet_1016548_56822

让sublime可以和visual studio一样自动在运算符前后添加空格的插件的更多相关文章

  1. Visual Studio 20**自动添加头部注释信息

    关于Visual Studio 20**自动添加头部注释信息   作为一个万年潜水党,不关这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样 ...

  2. visual studio 2015将已有项目添加到码云(gitee)

    visual studio 2015将已有项目添加到码云的步骤包括:gitee新建项目.清空项目及VS发布项目 1.gitee新建项目 2.清空项目 清空项目则会将vs项目的master分支发布到gi ...

  3. Visual Studio 2012自动添加注释(如版权信息等)

    转自:http://blog.163.com/guohuan88328@126/blog/static/69430778201381553150156/ 如何使用Visual Studio 2012给 ...

  4. (转) bicabo Visual Studio 2012自动添加注释(如版权信息等)

    如何使用Visual Studio 2012给程序文件的头部自动添加如下的注释? /********************************************************** ...

  5. Visual Studio 2012自动添加注释(如版权信息等)

    http://blog.csdn.net/jiejiaozhufu/article/details/16357721注释宏的原码 /********************************** ...

  6. 关于Visual Studio 20**自动添加头部注释信息

    作为一个万年潜水党,不管这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们 ...

  7. 关于Visual Studio 2010自动添加头部注释信息

    作为一个万年潜水党,不关这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们 ...

  8. Visual Studio 2010自动添加头部注释信息

    在日常的开发中我们经常需要为我们的类库添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们可以把这些信息保存在Visual Studio 2010类库模版文件里 ...

  9. Visual Studio常用小技巧一:代码段+快捷键+插件=效率

    用了visual studio 5年多,也该给自己做下备忘录了.每次进新的组换新的电脑,安装自己熟悉的环境又得重新配置,不做些备忘老会忘记一些东西.工具用的好,效率自然翻倍. 1,代码段 在Visua ...

随机推荐

  1. Python3集合

    集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...

  2. linux 安装svn客户端

    安装命令:yum install -y subversion 客户端使用命令: svn help  帮助命令 svn checkout --help  子帮助命令

  3. Ubuntu 10.04下架设流媒体服务器

    Ubuntu 10.04下架设流媒体服务器 个人建议:使用DarwinStreamingSrvr5.5.5,因为DarwinStreamingSrvr6.0.3安装过程中有很多问题需要解决! 目前主流 ...

  4. eclipse输入中文为繁体字

    今天上班在java类中写注释,发现是繁体字,于是切换到文本编辑器,简体字,于是百度发现, 原来是搜狗输入放和eclipse的快捷键ctrl+shift+F冲突,因为使用了eclipse的格式化,结果切 ...

  5. SpringBoot------自定义拦截器

    1.添加pom.xml使用的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt ...

  6. 搭建Pypi转发服务

    有时候有些正式环境的机器,不能访问外网,就只能在能访问外网的机器上搭建一个转发服务. 一.安装包 pip install flask_pypi_proxy flask_pypi_proxy 二.启动 ...

  7. 【转】最新版PyCharm(2018.2)破解

    源链接 1.下载jar包 我突然发现这个包是通用的!IDEA,PyCharm都可以用 链接:http://idea.lanyus.com/ 上篇IDEA破解依旧是这个jar包 2.jar包放置位置将j ...

  8. [Golang] lua战斗验证服务器

    我的另外一个开源项目,任何建议.指正错误和优化我都非常欢迎 baibaibai_000@163.com 简介 本项目是用go语言编写,结合cgo功能,支持高并发执行lua脚本的程序. 扩展 可以扩展成 ...

  9. spring学习笔记-AOP

    1.aop:aspect oriented programming 面向切面编程 2.aop在spring中的作用:   提供声明式服务(声明式事务) 允许用户实现自定义切面 3.aop:在不改变原有 ...

  10. C++ Addon Async 异步机制

    线程队列: libuv,window 可在libuv官网下载相应版本 opencv:  编译的时候opencv的位数要和 node的bit 一致 兼容electron :  node-gyp rebu ...