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)