Vim AutoCMD com base no conteúdo do arquivo
Pergunta
Estou tentando configurar o vim para detectar quando um arquivo .tex contém o comando ' usepackage {sagemath}' e executar um comando de acordo. Eu cheguei
:au BufReadPost,BufWritePost *.tex TTarget sagepdf
Mas isso disparará para todos os arquivos .tex, o que não é o que eu quero.
Solução
Há um exemplo no meu filetype.vim sobre como destinar os tipos HTML. Você pode modificar facilmente para se adequar à sua lógica. Observe o getLine (n) = ~ linhas
" 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
Outras dicas
Primeiro, você deve considerar usar um Modeline.
Se você não consegue obter o que deseja com uma modelo, pode usar sua própria função em autocmd
, assim:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
E você provavelmente pode escrever uma função que verifique se um determinado padrão corresponde e depois executa o que quiser.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow