2

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

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

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

cp html.snippet endfile.snippet

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

SnipMate 正在使用所有现有的片段,但不适用于我新创建的片段。对这个问题有什么建议吗?

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

4

3 回答 3

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

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

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

于 2010-12-20T10:50:48.160 回答
4

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

我相信在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'

我已经向 snipmate 添加了一个拉取请求,以更新他们的文档。编辑:它现在已被合并。

于 2012-01-07T22:19:46.800 回答
0

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

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

也许这不是直接回答这个问题,但很多有类似问题的用户可以发现这很方便。特别是如果他们不需要将所有内容组织在不同的文件中,并且很高兴在一个文件中拥有自己的片段,并且可以在任何地方访问。

于 2015-11-27T19:58:50.800 回答