Vim html.erb snippets?? snipMate Need a vim tip

2019-03-12 19:22发布

When I'm in an html.erb file, I get no snipMate snippets.

I would like both HTML and Ruby, or just HTML would be fine, How would I do this?

Would I need to write a set of snippets?

If so, is there a way of pulling in existing snippets without copying them?

Is there a way of telling vim to go into html mode when it sees .html erb?

7条回答
ゆ 、 Hurt°
2楼-- · 2019-03-12 19:33

You can use an autocmd to set the filetype to html when opening a ".html.erb" file. This could have unwanted side effects for plugins that work for ".erb" files.

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

You can also load more than one set of snippets by using a dotted filetype:

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

See :help snippet-syntax in the snipMate help for more info.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-03-12 19:35

Jumping on the UltiSnips bandwagon after trying SnipMate for a while. Like SirVer mentioned, having the html, ruby, etc snippets available within an *.erb file was as simple as adding the extend line to the eruby.snippets file.

查看更多
【Aperson】
4楼-- · 2019-03-12 19:38

With the original snipMate plugin, create a file ~/.vim/ftplugin/erb_snippets.vim and put the following into it:

silent call ExtractSnipsFile(g:snippets_dir . 'html.snippets', &l:filetype)
silent call ExtractSnipsFile(g:snippets_dir . 'ruby.snippets', &l:filetype)
查看更多
家丑人穷心不美
5楼-- · 2019-03-12 19:40

I am currently on a promoting tour for UltiSnips on StackOverflow. UltiSnips supports extending other file types, your erb.snippets would look like this:

extends html, ruby, rails

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

A conversion script for snipMate snippets is shipped with UltiSnips, so switching is easy.

查看更多
唯我独甜
6楼-- · 2019-03-12 19:43

I used the autocommand method to the set the filetype, but then I got html syntax errors for things like this:

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

The last two angle brackets would be highlighted in red, which drove me bonkers. So, I created a symlink called eruby.snippets that points to html.snippets. That worked like a champ and now I don't have to make changes in two places. I also have an eruby-rails snippet directory for non-html eruby snippets.

This is on a Mac OS X system. Note that an alias won't work. You need to hit the terminal and use the ln command. Not sure about doing this on a Windoze system.

查看更多
我想做一个坏孩纸
7楼-- · 2019-03-12 19:43

You can assign multiple snippets scopes to a single filetype. (I've found that altering the filetype tends to break some syntax highlighting).

You can check that the filetype for erb files is indeed 'eruby' with:

:set filetype?

If you're using the maintained fork of snipmate, it looks like you'll want both the eruby.snippets and eruby-rails.snippets from the snipmate-snippets repository (owned by honza, but I don't have enough reputation to link to it here) (see the INSTALL section of the snipmate README for proper setup).

If you are using the maintained fork, I believe setting g:snipMate.scope_aliases in your .vimrc with the following will work for your example:

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

I've added a pull request to snipmate to have their documentation updated.

查看更多
登录 后发表回答