Vim和snipMate(插件) - 添加新代码片段无效

时间:2010-12-20 10:32:47

标签: vim snipmate

我正在尝试为我的snipMate插件创建一个新代码段。

我使用一些名为(即)myfile.endfile

的文件

所有.endfile文件应该具有与.html文件相同的“代码段”。 所以我做了

cp html.snippet endfile.snippet

在我的〜/ .vim / snippets目录中。

SnipMate正在处理所有现有的片段,但不适用于我新创建的片段。 有关此问题的任何建议吗?

(顺便说一句:创建新的.snippet文件后,我在vim实例中运行了:helptags ~/.vim/doc命令。)

3 个答案:

答案 0 :(得分:10)

这是因为Snipmate与filetype一起使用,这是打开特定类型文件时设置的Vim选项。

例如,如果您要打开“index.html”,则filetype会自动设置为html

要了解它是如何工作的,请执行:
:e $VIMRUNTIME/filetype.vim

作为初步测试,您可以:
1.打开test.endfile
2.键入:set ft=endfile:set filetype=endfile
3.检查您定义的片段现在是否正常工作

为此,请在.vimrc中自动添加以下内容:
au BufNewFile,BufRead *.endfile set filetype=endfile

这意味着每次读取或创建以endfile结尾的新文件时,filetype选项都将设置为endfile。

(文件类型是一个任意字符串,它不必与文件扩展名相同)

答案 1 :(得分:4)

您可以在不更改文件类型的情况下分配片段(这是可取的,因为更改文件类型会破坏语法突出显示)。

我认为在maintained fork of snipmate中执行此操作的正确方法是设置g:snipMate.scope_aliases。

在您的示例中,假设您有一个' endfile.snippet'文件,我相信将以下内容添加到.vimrc中会起作用:

let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['html'] = 'endfile'

如果您希望html和endfile代码段适用于filetype =' html'的文件,请使用:

let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['html'] = 'html,endfile'

我已将pull request添加到snipmate中以更新其文档。 修改它现在已合并。

答案 2 :(得分:0)

我发现在使用具有不常见的name.endfile的代码段时,使用全局代码段很方便。

当您将片段放在片段文件夹中的 _。片段文件中时,它们会变为全局,并且可以在每种文件类型中访问。

也许这不是问题的直接答案,但很多有类似问题的用户都可以找到这个方便。特别是如果他们不需要将所有内容组织在各种文件中,并且乐于将自己的代码段放在一个可随处访问的文件中。