Vim autocmd на основе содержимого файла - PullRequest
1 голос
/ 01 марта 2010

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

:au BufReadPost,BufWritePost *.tex TTarget sagepdf

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

Ответы [ 2 ]

2 голосов
/ 01 марта 2010

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

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

function! MyFunction()
  ...
endfunction

autocmd BufReadPost,BufWritePost *.tex call MyFunction()

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

1 голос
/ 02 марта 2010

В моем файле 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
...