我正在尝试为我的snipMate插件创建一个新代码段。
我使用一些名为(即)myfile.endfile
的文件所有.endfile文件应该具有与.html文件相同的“代码段”。 所以我做了
cp html.snippet endfile.snippet
在我的〜/ .vim / snippets目录中。
SnipMate正在处理所有现有的片段,但不适用于我新创建的片段。 有关此问题的任何建议吗?
(顺便说一句:创建新的.snippet文件后,我在vim实例中运行了:helptags ~/.vim/doc
命令。)
答案 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的代码段时,使用全局代码段很方便。
当您将片段放在片段文件夹中的 _。片段文件中时,它们会变为全局,并且可以在每种文件类型中访问。
也许这不是问题的直接答案,但很多有类似问题的用户都可以找到这个方便。特别是如果他们不需要将所有内容组织在各种文件中,并且乐于将自己的代码段放在一个可随处访问的文件中。