Vsnips补全插件
项目在这里: https://github.com/corvofeng/Vsnips
以下内容截取自README:
允许用户在VSCode中使用UltiSnips语法代码片段.
程序依然在开发中, 虽然我不能保证所有的UltiSnips片段都可以在vscode中使用, 但我会尽最大的努力去兼容UltiSnips, 并且允许用户自定义一些功能函数.
有任何想法欢迎开issue或是pull requests.
1 | ext install corvofeng.Vsnips |
UltiSnips
有关UltiSnips的详细简介请看这里.
.
定义UltiSnipts格式的代码片段是十分简单的, 以Python
语言为例, 我平时会经常用到import IPython; IPython.embed()
, 在UltiSnips中, 你可以这样用:
1 | # 请注意, 下面的片段必须保存在python.snippets, 这样才能被Python语言使用. |
从上面的实例来看, 一个代码片段以snippet
开头, 以endsnippet
结尾,
随后的dbg
用于触发这个片段, "Use IPython to debug"
自然就是
这一片段的描述信息了, 在我的vim中, 此片段有如下的效果:
VSCode 代码片段管理
在VSCode中, 有自己原生的代码片段管理方式, 你可以依据snippets语法来编写自己的代码片段. 但它有几个弊端,
- 以json的形式保存的代码片段对换行支持并不友好, 多行的片段写起来并不方便
- 多台电脑同步代码片段并不容易, 我发现好多各个语言都有自己的代码片段插件, 比如: C/C++ Snippets, Bootstrap 3 Snippets.
并不是说每种语言有自己的代码片段插件不好, 只是当你想要改动或是增加自己的语言片段时, 极大可能是要完整的学习一遍插件的制作, 以及代码片段的书写. 而且更为重要的一点是, 如果你同时也是Vim用户, 你就不得不为两个编辑器各写一套代码片段了, 这样的折磨我受了很久, 于是便有了这个插件.
Vsnips使用
该插件基于VSCode原生的代码补全功能, 无论你先前是否有过vim或是UltiSnips的使用经历, 都可直接使用此插件. 我已经将部分的UltiSnips进行了适配, 并且默认给所有用户使用.
当然如果你先前已经使用过了UltiSnips, 有了自己的代码片段, 那么你可以直接在配置中添加自己的片段文件目录, 并且你可以引用在vimrc中定义的变量.
1 | { |
当你在vimrc中给出了如下变量let g:snips_author="corvo"
, 在代码片段中, 可以使用如下的形式引用, 无论是在vim还是在vscode中均可正常使用.
1 | snippet full_title "Python title fully" |
已经完善的功能
- 自动下载一些常用UltiSnips
- 多种语言补全的支持
- 允许用户添加自己的UltiSnips片段
- 从UltiSnips格式到VSCode格式的转换
- vim中strftime函数支持
- 允许用户自定义变量
- 少量的Python函数支持(使用Javascript, 重写)
- snippets语法高亮
正在开发的功能
- 对于用户自定义Javascript函数的支持
- 支持类似
autoDocstring
的功能, 允许增加各种形式的Python注释 - 支持
extends
与priority
语句
一些可能无法支持的功能
可能各位也注意到了, vim中的UltiSnips可以直接根据Python函数中的参数来调整
注释信息. 而Vsnips是基于VSCode原生的片段, 若是直接支持可能很困难.
退而求其次, 在写完函数参数后, 如果用户需要注释, 我们给出就可以了(具体实现打算参考autoDocstrings
).