Vim autocmd на основе содержимого файла
Вопрос
Я пытаюсь настроить Vim так, чтобы определять, когда файл .tex содержит команду '\usepackage{sagemath}', и запускать соответствующую команду.Я добрался до
:au BufReadPost,BufWritePost *.tex TTarget sagepdf
но это сработает для всех файлов .tex, а это не то, чего я хочу.
Решение
В моем 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
Другие советы
Во-первых, вам следует рассмотреть возможность использования модельная линия.
Если вы не можете получить то, что хотите, с помощью modeline, вы можете использовать свою собственную функцию в autocmd
, вот так:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
и вы, вероятно, можете написать функцию, которая проверяет, соответствует ли определенный шаблон, а затем запускает все, что вы хотите.