2

我正在尝试设置 Vim 以检测 .tex 文件何时包含命令 '\usepackage{sagemath}',并相应地运行命令。我已经到了

:au BufReadPost,BufWritePost *.tex TTarget sagepdf

但这将对所有 .tex 文件触发,这不是我想要的。

4

2 回答 2

3

在我的 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
于 2010-03-02T12:33:35.277 回答
2

首先,您应该考虑使用modeline

如果你不能通过模式行得到你想要的,你可以使用你自己的函数 in autocmd,像这样:

function! MyFunction()
  ...
endfunction

autocmd BufReadPost,BufWritePost *.tex call MyFunction()

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

于 2010-03-01T15:03:34.870 回答