使用vims tagbar插件来处理latex文件

时间:2014-10-01 15:57:34

标签: vim latex osx-mavericks ctags tagbar

我目前正在尝试使用vim的tagbar插件在Mac OS X上使用latex文件。

这是我的〜/ .ctags文件:

--langdef=latex
--langmap=latex:.tex
--regex-latex=/^\\tableofcontents/TABLE OF CONTENTS/s,toc/
--regex-latex=/^\\frontmatter/FRONTMATTER/s,frontmatter/
--regex-latex=/^\\mainmatter/MAINMATTER/s,mainmatter/
--regex-latex=/^\\backmatter/BACKMATTER/s,backmatter/
--regex-latex=/^\\bibliography\{/BIBLIOGRAPHY/s,bibliography/
--regex-latex=/^\\part[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/PART \2/s,part/
--regex-latex=/^\\part[[:space:]]*\*[[:space:]]*\{([^}]+)\}/PART \1/s,part/
--regex-latex=/^\\chapter[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/CHAP \2/s,chapter/
--regex-latex=/^\\chapter[[:space:]]*\*[[:space:]]*\{([^}]+)\}/CHAP \1/s,chapter/
--regex-latex=/^\\section[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\. \2/s,section/
--regex-latex=/^\\section[[:space:]]*\*[[:space:]]*\{([^}]+)\}/\. \1/s,section/
--regex-latex=/^\\subsection[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\.\. \2/s,subsection/
--regex-latex=/^\\subsection[[:space:]]*\*[[:space:]]*\{([^}]+)\}/\.\. \1/s,subsection/
--regex-latex=/^\\subsubsection[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\.\.\. \2/s,subsubsection/
--regex-latex=/^\\subsubsection[[:space:]]*\*[[:space:]]*\{([^}]+)\}/\.\.\. \1/s,subsubsection/
--regex-latex=/^\\includegraphics[[:space:]]*(\[[^]]*\])?[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\3/g,graphic+listing/
--regex-latex=/^\\lstinputlisting[[:space:]]*(\[[^]]*\])?[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\3/g,graphic+listing/
--regex-latex=/\\label[[:space:]]*\{([^}]+)\}/\1/l,label/
--regex-latex=/\\ref[[:space:]]*\{([^}]+)\}/\1/r,ref/
--regex-latex=/\\pageref[[:space:]]*\{([^}]+)\}/\1/p,pageref/

这是我〜/ .vimrc中的相应部分:

let g:tagbar_type_tex = {
    \ 'ctagstype' : 'latex',
    \ 'kinds'     : [
        \ 's:sections',
        \ 'g:graphics:0:0',
        \ 'l:labels',
        \ 'r:refs:1:0',
        \ 'p:pagerefs:1:0'
    \ ],
    \ 'sort'    : 0,
\ }

我基本上从这个链接得到了所有这些:https://github.com/vim-scripts/Tagbar/blob/master/doc/tagbar.txt

不幸的是,当我启动标签栏时,没有任何反应,当我执行时:UpdateTags我收到以下错误:

easytags.vim 3.7: Exuberant Ctags doesn't support the 'plaintex' file type! (at function xolox#easytags#update..<SNR>20_check_cfile, line 22)

ctags --version导致:

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Oct  1 2014, 16:18:15
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

和“which ctags”in:

/usr/local/bin/ctags

当我执行ctags --verbose abstract.tex时,它会找到〜/ .ctags文件并生成此标记文件:

!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME      Exuberant Ctags //
!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8     //
. Abstract      abstract.tex    /^\\section*{Abstract}$/;"      s

文件本身如下:

\section*{Abstract}

Let's see what we can do here...

我错过了什么? :(

亲切的问候并感谢您的帮助:)。

1 个答案:

答案 0 :(得分:5)

EasyTags问题

  1. EasyTags使用当前缓冲区的文件类型来确定它应传递给ctags的参数。

  2. 文件的filetypeplaintex文件的默认设置为*.tex。所以......你得到了这个错误,因为plaintex无法识别ctags

  3. Tagbar问题

    1. 根据the documentation,您应该在自定义配置中使用filetype

      g:tagbar_type_{vim filetype}
      
    2. 由于您的*.tex文件被识别为plaintex,您的g:tagbar_type_tex将永远不会被使用。

    3. 自由解决方案

      1. 将这些行添加到~/.vimrc以强制Vim将*.tex个文件识别为latex

        augroup latex
            autocmd!
            autocmd BufRead,BufNewFile *.tex set filetype=latex
        augroup END
        
      2. 从以下位置更改自定义Tagbar配置:

        g:tagbar_type_tex
        

        为:

        g:tagbar_type_latex
        
      3. 只有当Vim配置为与latex文件类型(ftplugin,syntax,indent ...)配合良好时,此解决方案才有效,这在最好情况下是可疑的。

        保守解决方案

        1. plaintex配置中使用latex代替~/.ctags

          --langdef=plaintex
          --langmap=plaintex:.tex
          --regex-plaintex=/^\\tableofcontents/TABLE OF CONTENTS/s,toc/
          ...
          
        2. 从以下位置更改自定义Tagbar配置:

          let g:tagbar_type_tex = {
              \ 'ctagstype' : 'latex',
              ...
          

          为:

          let g:tagbar_type_plaintex = {
              \ 'ctagstype' : 'plaintex',
              ...