Vim и snipMate (плагин) - добавление нового фрагмента не будет - PullRequest
2 голосов
/ 20 декабря 2010

Я пытаюсь создать новый фрагмент для моего плагина snipMate.

Я работаю с некоторыми файлами, которые называются (т.е.) myfile.endfile

Все файлы .endfile должны иметь такой же «фрагмент», как и файлы .html. Так я и сделал

cp html.snippet endfile.snippet

в моем каталоге ~ / .vim / snippets.

SnipMate работает со всеми существующими фрагментами, но не с моим новым. Есть предложения по этой проблеме?

(Кстати: после создания нового файла .snippet я выполнил команду :helptags ~/.vim/doc в экземпляре vim.)

Ответы [ 3 ]

10 голосов
/ 20 декабря 2010

Это потому, что 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.

(тип файла - произвольная строка, она не должна совпадать с расширением файла)

4 голосов
/ 08 января 2012

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

Я считаю, что правильный способ сделать это в поддерживаемом форке snipmate должен установить 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'

Я добавил запрос на получение , чтобы снипматировать, чтобы иметьих документация обновлена. Редактировать: Теперь оно объединено.

0 голосов
/ 27 ноября 2015

Мне было удобно использовать глобальные фрагменты при использовании фрагментов с необычным name.endfile.

Когда вы помещаете свои фрагменты в файл _. Snippets внутри папки фрагментов, они становятся глобальными и доступны для каждого типа файла.

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

...