Vim html.erb фрагменты?? snipMate нужен совет vim

Когда я нахожусь в файле html.erb, я не получаю сниппеты snipMate.

Я хотел бы и HTML и Ruby, или просто HTML был бы в порядке. Как бы я это сделал?

Нужно ли мне писать набор фрагментов?

Если да, есть ли способ добавить существующие фрагменты без их копирования?

Есть ли способ сказать vim перейти в режим html, когда он видит.html erb?

7 ответов

Решение

Фрагменты хранятся в каталоге под названием snippets где-то в вашем ~/.vim папка.

Если вы посмотрите там, то обычно есть один файл для каждого типа файла, есть c.snippets, ruby.snippets, так что, похоже, вам нужно создать файл erb.snippets с тем, что вы хотите.

В конце концов вы можете скопировать содержимое ruby.snippets и html.snippets в свои новые erb.snippets.

В качестве альтернативы вы можете искать на github, некоторые люди опубликовали свою собственную конфигурацию erb.snippets. Например, там есть хорошая коллекция: https://github.com/scrooloose/snipmate-snippets

Лучше всего сначала попытаться открыть файл сниппета и посмотреть на синтаксис, довольно легко создать свой собственный сниппет в зависимости от того, что вы используете чаще всего.

Вы можете использовать autocmd установить тип файла html при открытии файла.html.erb. Это может иметь нежелательные побочные эффекты для плагинов, которые работают с файлами ".erb".

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

Вы также можете загрузить более одного набора фрагментов, используя точечный тип файла:

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

Увидеть :help snippet-syntax в помощи snipMate для получения дополнительной информации.

В настоящее время я участвую в рекламном туре UltiSnips на Stackru. UltiSnips поддерживает расширение других типов файлов, ваши erb.snippets будут выглядеть так:

extends html, ruby, rails

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

Сценарий преобразования для фрагментов snipMate поставляется с UltiSnips, поэтому переключение легко.

Я использовал метод autocommand для установки типа файла, но затем я получил html синтаксические ошибки для таких вещей:

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

Последние две угловые скобки будут выделены красным, что привело меня в замешательство. Итак, я создал символическую ссылку с именем eruby.snippets, которая указывает на html.snippets. Это работало как чемпион, и теперь мне не нужно вносить изменения в двух местах. У меня также есть каталог фрагментов eruby-rails для не-HTML фрагментов eruby.

Это в системе Mac OS X. Обратите внимание, что псевдоним не будет работать. Вам нужно нажать на терминал и использовать команду ln. Не уверен насчет того, чтобы сделать это в системе Windoze.

Вы можете назначить несколько областей фрагментов одному типу файла. (Я обнаружил, что изменение типа файла приводит к нарушению подсветки синтаксиса).

Вы можете проверить, что тип файла для файлов erb действительно 'eruby' с помощью:

:set filetype?

Если вы используете поддерживаемый форк snipmate, похоже, что вам понадобятся и eruby.snippets, и eruby-rails.snippets из репозитория snipmate-snippets (принадлежащего honza, но у меня недостаточно репутации для ссылки к этому здесь) (см. раздел УСТАНОВКИ README для снипмата для правильной настройки).

Если вы используете поддерживаемый ответвление, я полагаю, что настройка g:snipMate.scope_aliases в вашем.vimrc со следующим будет работать для вашего примера:

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

Я добавил pull-запрос к snipmate, чтобы обновить их документацию.

Прыжки на подножку UltiSnips после некоторой попытки SnipMate. Как упомянул SirVer, наличие фрагментов html, ruby ​​и т. Д. В пределах *.erb файл был так же прост, как добавление строки расширения к eruby.snippets файл.

С оригинальным плагином 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)
Другие вопросы по тегам