用过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. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。

      SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序.   练习:自定义类用TreeSet排序. 与HashSet不同, ...

  2. koa文档参考

    koa文档 简介 koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 generator,可以免除 ...

  3. php -v 与phpinfo显示版本不一样

    问题描述: php -v显示版本7.0 phpinfo 显示版本 7.2 使用软件phpstudy 原因:环境变量中显示的是7.0,所以php -v显示的也是7.0 解决办法:修改环境变量,然后重启电 ...

  4. python 将函数参数一键转化成字典的技巧,非**kwargs,公有方法和函数抵制kwargs。

    1.有时候使用设计模式,例如工厂方法模式,函数传的参数还需要一一根据条件传递到各个类里面去实例化或者其他原因,直接复制所有的参数看起来不太好,造成很多相同的行. 2.直接函数/方法中写**kwargs ...

  5. Tomcat启动报错:This file is needed to run this program

    Tomcat版本为 8.5.29. 1.情景 kill调用tomcat进程后,重启tomcat报如下错误: Cannot find /usr/local/apache-tomcat-/bin/setc ...

  6. 大整数加减运算的C语言实现

    目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...

  7. 使用glusterfs 作为 kubernetes PersistentVolume PersistentVolumeClaim 持久化仓库,高可用Rabbitmq,高可用mysql,高可用redis

    glusterfs 怎么集群,网上一搜铺天盖地的 可利用这个特点做单节点高可用,因为K8S 哪怕节点宕机了 master 会在随意一台节点把挂掉的复活 当然我是在自己的环境下跑,经过网络的gluste ...

  8. sublime 安装ctags跳转以及跳转快捷键

    在source insight中有一个很好用的功能,就是函数的跟踪跳转,在阅读别人的代码的时候轻松的浏览原函数.我们知道,在使用vim的时候有个插件叫ctags,同理,在sublime text中也能 ...

  9. 【Zookeeper系列】Zookeeper命令操作(转)

    原文链接:https://www.cnblogs.com/sunddenly/p/4031881.html 一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他 ...

  10. 二进制样式的字符串与byte数组互转函数示例

    开发时用到的方法,记录下: /// <summary> /// 测试方法 /// </summary> private void TestFun() { Response.Wr ...