Vim html.erb代码段??snipMate需要一个vim提示

13
当我在html.erb文件中时,无法使用snipMate代码片段。
我想要同时使用HTML和Ruby,但只使用HTML也可以。应该怎么做?
是不是需要编写一组代码片段?
如果需要,有没有一种方法可以在不复制的情况下引入现有的代码片段?
是否有一种方式可以告诉vim在看到.html erb时进入html模式?
7个回答

17

当你打开一个“.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以获取更多信息。


小心处理。语法高亮度出现了问题:https://dl.dropbox.com/u/750013/SS_2012-11-01_21%3A27%3A41.png。 - robertokl

12

Snippets 存储在你的 ~/.vim 文件夹中的名为 snippets 的目录中。

如果你在那里看一下,通常每个文件类型都有一个文件,比如 c.snippets、ruby.snippets,所以似乎你需要做的就是在那里创建一个 erb.snippets 并添加你想要的内容。

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

或者你可以在 GitHub 上搜索,有些人已经发布了自己的 erb.snippets 配置。例如,这里有一个不错的收藏: https://github.com/scrooloose/snipmate-snippets

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


太棒了,谢谢。erb-rails缺少HTML标签,所以我会直接复制它们!谢谢。 - Daniel Upton
你是如何使它运作的?我已经将erb.snippets添加到片段文件夹中,并添加了一些片段,但仍然显示“未找到模式”,而snipmate在.c .rb和其他原生支持的文件上完美运行。 - Sergey
这看起来需要重构 https://github.com/scrooloose/snipmate-snippets/blob/master/ruby-rails/defcreate.snippet 。我宁愿使用respond_with,所以我正在开发一些新的代码片段。 - kgpdeveloper

8

我目前正在 StackOverflow 上为 UltiSnips 进行推广宣传。UltiSnips 支持扩展其他文件类型,你的 erb.snippets 文件将会像这样:

extends html, ruby, rails

snippet temp "A snippet only in Erb"
erb rules ${1}
endsnippet

一份用于转换snipMate代码片段的脚本已经随UltiSnips一起发布,因此切换非常容易。

那么,为什么不在eruby的ultisnips中包含那个extends行呢? - Daniel D
1
我对Ruby、ERuby、ERB或任何其他HTML或Web相关的编码东西一窍不通。因此,我需要依靠用户在这里提供有用的代码片段定义和.snippet文件。欢迎随时发送补丁。 - SirVer

3
我使用了自动命令方法来设置文件类型,但是我发现会出现像这样的HTML语法错误:
<%= image_tag("logo.png", :alt => "Sample App", :class => "round") %>

最后两个尖括号会用红色突出显示,这让我感到很烦恼。因此,我创建了一个名为eruby.snippets的符号链接,指向html.snippets。这个方法非常有效,现在我不必在两个地方进行更改。我还有一个eruby-rails片段目录,用于非html eruby片段。
这是在Mac OS X系统上完成的。请注意,别名无法使用。您需要打开终端并使用ln命令。不确定如何在Windows系统上执行此操作。

2
您可以将多个代码片段范围分配给单个文件类型。(我发现更改文件类型往往会破坏某些语法高亮)。
您可以检查erb文件的文件类型是否确实为'eruby':
:set filetype?

如果您正在使用snipmate的维护分支,那么看起来您需要从snipmate-snippets存储库中获取eruby.snippets和eruby-rails.snippets(由honza拥有,但我在此处没有足够的声望来链接它)(请参阅snipmate README的INSTALL部分进行正确设置)。
如果您正在使用维护的分支,则我认为在您的.vimrc中设置g:snipMate.scope_aliases并使用以下内容将适用于您的示例:
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['eruby'] = 'eruby,eruby-rails'

我已经添加了一个拉取请求到snipmate,以更新他们的文档。

1
在尝试了一段时间的SnipMate之后,我开始使用UltiSnips。正如SirVer所提到的那样,在*.erb文件中使用html、ruby等片段只需将extend行添加到eruby.snippets文件中即可。

0

使用原始的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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接