Vim html.erb片段? snipMate需要vim技巧

当我在一个html.erb文件中时,我没有得到snipMate片段。

我想要HTML和Ruby,或者只是HTML会好的,我该怎么做?

我需要写一组片段吗?

如果是这样,有没有办法拉入现有的片段而不复制它们?

有没有办法告诉vim在看到.html erb时进入html模式?

代码段存储在~/.vim文件夹中某个名为snippets目录中。

如果你看那里,每个文件类型通常有一个文件,有一个c.snippets,一个ruby.snippets,所以你需要做的就是在那里用你想要的东西创建一个erb.snippets。

最后,您可以将ruby.snippets和html.snippets的内容复制到新的erb.snippets中。

或者你可以在github上搜索,有些人已经发布了他们自己的erb.snippets配置。 例如,那里有一个很好的collections: https : //github.com/scrooloose/snipmate-snippets

最好先尝试打开一个片段文件并查看语法,根据您最常用的内容创建自己的片段非常容易。

打开“.html.erb”文件时,可以使用autocmd将文件类型设置为html。 对于适用于“.erb”文件的插件,这可能会产生不必要的副作用。

 autocmd BufNewFile,BufRead *.html.erb set filetype=html 

您还可以使用虚线文件类型加载多个代码段:

 autocmd BufNewFile,BufRead *.html.erb set filetype=html.eruby 

有关详细信息,请参阅snipMate帮助中的:help snippet-syntax

我目前正在StackOverflow上推广UltiSnips 。 UltiSnips支持扩展其他文件类型,你的erb.snippets看起来像这样:

 extends html, ruby, rails snippet temp "A snippet only in Erb" erb rules ${1} endsnippet 

UltiSnips附带了snipMate片段的转换脚本,因此切换非常简单。

我使用autocommand方法来设置文件类型,但后来我得到了html语法错误,如下所示:

 <%= image_tag("logo.png", :alt => "Sample App", :class => "round") %> 

最后两个尖括号将以红色突出显示,这让我疯狂。 所以,我创建了一个名为eruby.snippets的符号链接,指向html.snippets。 这就像一个冠军,现在我不必在两个地方做出改变。 我还有一个用于非html eruby片段的eruby-rails片段目录。

这是在Mac OS X系统上。 请注意,别名不起作用。 您需要点击终端并使用ln命令。 不确定在Windoze系统上执行此操作。

您可以将多个片段范围分配给单个文件类型。 (我发现改变文件类型往往会破坏一些语法高亮)。

你可以检查erb文件的文件类型确实是’eruby’:

 :set filetype? 

如果您正在使用维护的snipmate分支 ,看起来您将需要来自snipmate-snippets存储库的eruby.snippets和eruby-rails.snippets(由honza拥有,但我没有足够的声誉来链接在这里)(请参阅snipmate README的INSTALL部分以获得正确的设置)。

如果您正在使用维护的fork,我相信在.vimrc中使用以下设置g:snipMate.scope_aliases将适用于您的示例:

 let g:snipMate = {} let g:snipMate.scope_aliases = {} let g:snipMate.scope_aliases['eruby'] = 'eruby,eruby-rails' 

我已经为snipmate添加了一个pull请求来更新他们的文档。

尝试SnipMate一段时间后,跳过UltiSnips的潮流。 就像SirVer提到的那样,在*.erb文件中使用html,ruby等代码片段就像将扩展行添加到*.erb文件一样简单。

使用原始的snipMate插件,创建一个文件~/.vim/ftplugin/erb_snippets.vim并将以下内容放入其中:

 silent call ExtractSnipsFile(g:snippets_dir . 'html.snippets', &l:filetype) silent call ExtractSnipsFile(g:snippets_dir . 'ruby.snippets', &l:filetype)