Обзоры Vim html.erb?? snipMate Нужен совет vim

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

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

Вы можете использовать autocmd, чтобы установить filetype в 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.

Ответ 3

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

extends html, ruby, rails

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

:set filetype?

Если вы используете поддерживаемый fork snipmate, похоже, вам понадобятся как eruby.snippets, так и eruby-rails. фрагменты из репозитория snipmate-snippets (принадлежащего honza, но у меня нет достаточной репутации для ссылки на него здесь) (см. раздел INSTALL для snipmate README для правильной настройки).

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

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

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

Ответ 6

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

Ответ 7

С исходным плагином 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)