我正在尝试设置Vim以检测.tex文件何时包含命令'\ usepackage {sagemath}',并相应地运行命令。我已经
了:au BufReadPost,BufWritePost *.tex TTarget sagepdf
但是这会触发所有.tex文件,这不是我想要的。
答案 0 :(得分:2)
首先,您应该考虑使用modeline。
如果使用模式行无法获得所需内容,可以在autocmd
中使用自己的函数,如下所示:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
并且您可能可以编写一个函数来检查某个模式是否匹配,然后运行您想要的任何内容。
答案 1 :(得分:1)
我的filetype.vim中有一个关于如何区分html类型的例子。您可以轻松修改以适合您的逻辑。注意getline(n)=〜lines
" 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