2010-03-01 2 views
1

Я пытаюсь настроить Vim на обнаружение, когда .tex-файл содержит команду '\ usepackage {sagemath}' и запускает команду соответственно. Я получилVim autocmd на основе содержимого файла

:au BufReadPost,BufWritePost *.tex TTarget sagepdf 

, но это будет срабатывать для всех файлов .tex, чего я не хочу.

ответ

1

Theres пример в файле filetype.vim о том, как распознавать типы html. Вы можете легко изменить свою логику. Обратите внимание на строку 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

Во-первых, вы должны рассмотреть возможность использования modeline.

Если вы не можете получить то, что вы хотите с режимным, вы можете использовать свою собственную функцию в autocmd, как это:

function! MyFunction() 
    ... 
endfunction 

autocmd BufReadPost,BufWritePost *.tex call MyFunction() 

, и вы, вероятно, можете написать функцию, которая проверяет, соответствует ли определенный шаблону , а затем запускает все, что вы хотите.

Смежные вопросы