Vim AutoCmd basierend auf Dateiinhalte
Frage
Ich versuche, Vim einzurichten, um festzustellen, wann eine .tex-Datei den Befehl enthält ‚\ usepackage {sagemath}‘, und einen Befehl entsprechend ausgeführt werden. Ich habe bekommen zu
:au BufReadPost,BufWritePost *.tex TTarget sagepdf
, aber das wird Feuer für alle .tex-Dateien, die nicht das, was ich will.
Lösung
Theres ein Beispiel in meinem filetype.vim, wie HTML-Typen zu unterscheiden. Sie können ganz einfach ändern Sie Ihre Logik entsprechen. Beachten Sie die getline (n) = ~ Linien
" HTML (.shtml and .stm for server side)
au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call s:FThtml()
" Distinguish between HTML, XHTML and Django
fun! s:FThtml()
let n = 1
while n < 10 && n < line("$")
if getline(n) =~ '\<DTD\s\+XHTML\s'
setf xhtml
return
endif
if getline(n) =~ '{%\s*\(extends\|block\)\>'
setf html.django_template
" setf htmldjango
return
endif
let n = n + 1
endwhile
setf html
endfun
Andere Tipps
Als erstes sollten Sie prüfen, mit einer Modeline .
Wenn Sie nicht bekommen kann, was man mit einer Modeline möchten, können Sie Ihre eigene Funktion in autocmd
verwenden, wie diese:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
und Sie können wahrscheinlich eine Funktion schreiben, dass überprüft, ob ein bestimmtes Muster entspricht, und dann läuft was Sie wollen.