Vim и snipMate (плагин) - добавление нового фрагмента не сработает

StackOverflow https://stackoverflow.com/questions/4488786

  •  11-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать новый фрагмент кода для моего плагина 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 Файл внутри папки фрагментов они становятся глобальными и доступны в каждом филетипе.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top