Vim и snipMate (плагин) - добавление нового фрагмента не сработает
Вопрос
Я пытаюсь создать новый фрагмент кода для моего плагина snipMate.
Я работаю с некоторыми файлами, которые называются (например) myfile.endfile
Все файлы .endfile должны иметь тот же "фрагмент", что и файлы .html.Так я и сделал
cp html.snippet endfile.snippet
в моем каталоге ~/.vim/snippets.
snipMate работает со всеми существующими фрагментами, но не с моим новым созданным.Есть какие-нибудь предложения по решению этой проблемы?
(Кстати:после создания нового файла .snippet я запустил :helptags ~/.vim/doc
команда в экземпляре vim.)
Решение
Это потому, что Snipmate работает с filetype
, который является параметром Vim, устанавливаемым при открытии файла определенного типа.
Например, если вы открываете "index.html", то filetype
автоматически устанавливается на html
.
Чтобы увидеть, как это работает, выполните следующие действия :
:e $VIMRUNTIME/filetype.vim
В качестве предварительного теста вы можете :
1.откройте файл test.endfile
2.Тип :set ft=endfile
или :set filetype=endfile
3.Проверьте, работают ли теперь ваши определенные фрагменты
Чтобы сделать это автоматически, добавьте следующее в свой файл .vimrc :
au BufNewFile,BufRead *.endfile set filetype=endfile
Это означает, что каждый раз, когда вы читаете или создаете новый файл, заканчивающийся на endfile
для параметра filetype установлено значение endfile.
(Тип файла - это произвольная строка, она не обязательно должна совпадать с расширением файла)
Другие советы
Вы можете назначить фрагменты без изменения филетипа (что желательно, потому что изменение синтаксиса FileType Breaks выделяет).
Я считаю, что правильный способ сделать это в поддерживается вилка сна это установить g: snipmate.scope_aliases.
В вашем примере, предполагая, что у вас есть файл «endfile.snippet», я считаю, что добавление следующего в вашем .vimrc будет работать:
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['html'] = 'endfile'
Если вы хотите, чтобы фрагменты HTML и EndFile работали для файлов fileType = 'html', затем используйте:
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['html'] = 'html,endfile'
Я добавил Получить запрос Чтобы обновить их документацию. Редактировать: Сейчас это было объединено.
Мне было удобно использовать Глобальный Фрагменты при использовании фрагментов, которые имеют необычное имя.
Когда вы вкладываете свои фрагменты в _.snippets Файл внутри папки фрагментов они становятся глобальными и доступны в каждом филетипе.
Возможно, это не прямо отвечает на вопрос, но многие пользователи с аналогичной проблемой могут найти это удобно. Особенно, если им не нужно, чтобы все было организовано в различных файлах, и они рады иметь свои собственные фрагменты в одном файле, который доступен повсюду.