Vim e snipMate (plugin) - Aggiungere un nuovo frammento non funziona
Domanda
Sto cercando di creare un nuovo frammento di plug-in al mio snipMate.
Io lavoro con alcuni file chiamato (cioè) myfile.endfile
Tutti i file .endfile dovrebbe avere lo stesso "frammento", come file .html. Così ho fatto
cp html.snippet endfile.snippet
nella mia directory ~ / .vim / frammenti.
SnipMate sta lavorando con tutti i presenti frammenti, ma non con il mio nuovo quello creato. Eventuali suggerimenti per questo problema?
(Btw:. Dopo aver creato il nuovo file .snippet, io comando :helptags ~/.vim/doc
corse in un'istanza vim)
Soluzione
E 'a causa Snipmate lavora con filetype
, che è un'opzione insieme Vim quando si apre un file di un determinato tipo.
Per exemple, se si sta aprendo, "index.html" il filetype
viene automaticamente impostato su html
.
Per vedere come funziona, che fare:
:e $VIMRUNTIME/filetype.vim
In un test preliminare, è possibile:
1. Aprire test.endfile
2. tipo :set ft=endfile
o :set filetype=endfile
3. Controllare se i vostri frammenti definiti ora di lavoro
Per fare che aggiungono automaticamente quanto segue nel Vimrc:
au BufNewFile,BufRead *.endfile set filetype=endfile
Ciò significa che ogni volta che si legge o si crea un nuovo file con estensione endfile
the opzione filetype è impostato su endfile.
(Il tipo di file è una stringa arbitraria non deve essere identica alla estensione)
Altri suggerimenti
È possibile assegnare frammenti senza alterare il tipo di file (che è desiderabile, perché alterando le pause filetype evidenziazione della sintassi).
Credo il modo corretto di fare questo nel forcella mantenuto di snipmate è impostato g :. snipMate.scope_aliases
Nel tuo esempio, supponendo che si dispone di un file 'endfile.snippet', credo aggiungendo quanto segue al vostro Vimrc avrebbe funzionato:
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['html'] = 'endfile'
Se si desidera HTML e endfile frammenti di lavorare per i file di filetype = 'html', quindi usare:
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['html'] = 'html,endfile'
Ho una trazione richiesta per snipmate di avere la loro documentazione aggiornata . Modifica Ora è stato fuso.
Ho trovato conveniente utilizzare globali snippet quando si utilizza frammenti che hanno name.endfile raro.
Quando metti i tuoi frammenti in _. Snippet file all'interno della cartella frammenti diventano globali e sono accessibili in ogni tipo di file.
Forse questo è non risponde direttamente alla domanda, ma un sacco di utenti con il problema simile si può trovare questo conveniente. Specialmente se non hanno bisogno di avere tutto organizzato in vari file e sono felice di avere i propri frammenti in un unico file che è accessibile ovunque.