Vim autocmd basado en el contenido del archivo
Pregunta
Estoy intentando configurar Vim para detectar cuando un archivo .tex contiene el comando '\ usepackage {sagemath}', y ejecutar un comando en consecuencia. He llegado a
:au BufReadPost,BufWritePost *.tex TTarget sagepdf
pero que el fuego voluntad para todos los archivos .tex, que no es lo que quiero.
Solución
Theres un ejemplo en mi filetype.vim sobre cómo distinguir tipos html. Usted puede modificar fácilmente para adaptarse a su lógica. Tenga en cuenta el getline (n) = ~ líneas
" 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
Otros consejos
En primer lugar, se debe considerar el uso de un modeline .
Si no puede obtener lo que desea con una modeline, puede utilizar su propia función en autocmd
, como esto:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
y es probable que pueda escribir una función que comprueba si un determinado patrón de partidos, y luego ejecuta lo que quieras.