第十六章 spf13 插件---neosnippet使用教程

来源:互联网 发布:詹姆斯第一场比赛数据 编辑:程序博客网 时间:2024/05/24 06:41

如前所述,neocomplete就是一个自动补全的插件。

它又额外附带了补全代码段的特性(模版补全),要想使用这种特性,必须安装另外的插件neosnippet或者ultisnips。


spf13集合包自动帮我们安装了neosnippet,因此可以无需费心使用模版补全的能力。

snippet与complete两个插件联系相当紧密,毕竟同一个作者制造的。

 

个人实践:


使用spf13提供的<ctrl+k>无论是在普通模式,还是插入模式都无法使用neosnippet。

为什么呢?


原因在于该插件必须在输入某些关键字,弹出了自动补全菜单之后才生效。

比如先输入while,自动弹出跟while有关的补全菜单,此时再按<ctrl+k>才有效。

而我一开始在空白行单独使用<ctrl+k>,自然无效。

 

同时while可能包含好几种代码段形式,要在其中切换不同模版样式,继续按<ctrl+k>。

这样的操作方法和我最初想象的不太一样。

 

那么neosnippet插件到底提供了哪些模版呢?

毕竟不同的语言使用的代码模版格式也不相同。


根据官方文档,所有的模版都放在用户工作目录中

~/.vim/bundle/neosnippet-snippets/neosnippets/

先cd进该目录,再ls看看

 

可以看到不仅支持的各类语言,还支持make,cmake等工具模版。


对于我个人来说,最关注的是cpp.snip代表的c++语言,和c.snip代表的C语言 。

打开c.snip文件观看,snippet指的就是补全关键字,abbr为缩写样式。


以if关键字为例,缩写样式有两种,第一种为abbr最简单的 if(){}样式;

第二种就复杂一些

if (${1:#:condition}) {
        ${0:TARGET}
    }


通过观看整个文件,我们会发现以下规律:

① abbr缩写的样式会显示在补全菜单里,同时abbr也是一种样式,abbr不是必须写的。


② 当一个关键字对应有多个样式,在使用模版补全时,最底部的样式会先显示(从下到上);

    这种机制有助于我们把最常用的,偶尔用的,很少用的模版分批摆放。


③options head  明确指出必须以该关键字作为开头,即不能是其他字串的中间一部分。


④有一些#,$符号,数字1,2,0等,这些表明接受输入,并且1为第一个接受输入,0为最后接受输入。


多种样式之间切换使用<ctrl+k>,但只能往前,无法后退。

按TAB键在模版数字1,2,0等项中切换(假如有的话),但只能往前,无法后退。


除了普通的语言关键字外,还有main函数模版,inc模版,条件编译模版,文件打开模版等等。

 

 


这些模版提供的都是非常简单的样式,说实话并不能带来多少效率上的提升。

它更多的是提供了一种示例,你可以依此编写适合自己风格的,经常使用的代码模版。


所以对内置的代码模版不感冒,有两种办法改进它。

第一种在类似c.snip文件里直接修改,缺点在于破坏了原始文件,优势在于信息集中。

第二种也可以自己写好模版(新建以snip结尾),然后在vimrc中配置路径,告诉插件去哪里寻找。

let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/mysnippets’
 


初学者最容易踩坑:突然某天自动补全neosnippet不能使用,无效了。
请检查是否工作在无后缀的文件中!!
尽管linux系统不需要文件后缀,它看重的是属性与权限,文件后缀只是为了方便人类自己区分。
但没有文件后缀,补全和模版等插件就可能会出现问题,因为它们不能“智能”分辨使用何种方式去补全。
毕竟不同的语言,其外在写法是不同的(文件类型侦测)。

1 0