2010-03-01 3 views
1

J'essaie de configurer Vim pour détecter quand un fichier .tex contient la commande '\ usepackage {sagemath}', et exécuter une commande en conséquence. Je suis arrivé àVim autocmd basé sur le contenu du fichier

:au BufReadPost,BufWritePost *.tex TTarget sagepdf 

mais ça va tourner pour tous les fichiers .tex, ce qui n'est pas ce que je veux.

Répondre

1

Theres un exemple dans mon filetype.vim sur la façon de desting des types html. Vous pouvez facilement modifier en fonction de votre logique. Notez les lignes getline (n) = ~

" 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 
2

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.

Questions connexes