Vim autocmd basé sur le contenu du fichier
Question
Je suis en train de mettre en place Vim pour détecter lorsqu'un fichier .tex contient la commande \ usepackage {} sagemath 'et exécuter une commande en conséquence. Je l'ai appris à
:au BufReadPost,BufWritePost *.tex TTarget sagepdf
mais cela feu pour tous les fichiers .tex, ce qui est pas ce que je veux.
La solution
Theres un exemple dans mon filetype.vim sur la façon de distinguer les différents types de html. Vous pouvez facilement modifier en fonction de votre logique. Notez le getline (n) = ~ lignes
" 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
Autres conseils
D'abord, vous devriez envisager d'utiliser un modeline.
Si vous ne pouvez pas obtenir ce que vous voulez avec un modeline, vous pouvez utiliser votre propre fonction dans autocmd
, comme ceci:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
et vous pouvez probablement écrire une fonction qui vérifie si un certain modèle correspond, puis exécute tout ce que vous voulez.