Latex 基于文件内容的Vim autocmd

Latex 基于文件内容的Vim autocmd,latex,vim,sage,autocmd,Latex,Vim,Sage,Autocmd,我试图设置Vim,以检测.tex文件何时包含命令“\usepackage{sagemath}”,并相应地运行命令。我得走了 :au BufReadPost,BufWritePost *.tex TTarget sagepdf 但是这会激发所有.TEX文件,这不是我想要的。 首先,你应该考虑使用. 如果无法使用modeline获得所需的功能,可以在autocmd中使用自己的功能,如下所示: function! MyFunction() ... endfunction autocmd Buf

我试图设置Vim,以检测.tex文件何时包含命令“\usepackage{sagemath}”,并相应地运行命令。我得走了

:au BufReadPost,BufWritePost *.tex TTarget sagepdf

<>但是这会激发所有.TEX文件,这不是我想要的。

首先,你应该考虑使用. 如果无法使用modeline获得所需的功能,可以在
autocmd
中使用自己的功能,如下所示:

function! MyFunction()
  ...
endfunction

autocmd BufReadPost,BufWritePost *.tex call MyFunction()

您可能还可以编写一个函数来检查某个模式是否匹配,然后运行您想要的任何程序。

my filetype.vim中有一个关于如何取消html类型的示例。您可以轻松修改以适应您的逻辑。注意getline(n)=~行

“HTML(.shtml和.stm用于服务器端)
au BufNewFile、BufRead*.html、*.htm、*.shtml、*.stm调用s:FThtml()
区分HTML、XHTML和Django
享乐s:FThtml()
设n=1
而n<10&&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