• 笔者采用的环境为Windows 10+gvim+TeXLive2020
  • 本文主要参考vimtex的使用说明vimtex.txt
  • 在此,向vimtex的开发者@lervag致以谢意,感谢他开发维护了如此amazing的插件

预览
更新日志:

  • 2022/04/13: 采用VimtexInverseSearch进行反向搜索

1. 什么是vimtex1

  • vimtex是一款现代化的vim/gvim编辑器插件,方便LaTeX用户在vim编辑器下编辑,编译LaTeX文件,生成pdf文件。
  • 特性
    • 它最大的特点就是增加了vim/gvim对LaTeX文件的编译支持(一定程度上也简化了一些编译操作),使得我们不需要用命令行来编译tex源文件
    • 提供了一系列LaTeX文件的编译方式(latexrun,latexmk 等 )的支持,内置了一些快捷键映射,当然也可以自行配置编译方式
    • 支持tex语法高亮, 提供pdf阅读器的接口(如可以调用sumatra pdf阅读器预览生成的latex文件)。
    • 支持pdf文件的反向搜索(反向搜索源代码),精确到行
    • 支持部分文件编译:选中某个tex文件的完整片段,只编译选中的代码片段,方便用户调试latex code
    • 统计tex文件中中西文字符的个数(其实是调用了TeXlive发行版中已经打包好的texcount脚本)
    • 支持在每个section之中快速跳转
    • 一些有用的映射,如tsf 将光标处分式在横排分式和竖排分式之间切换;cse改变光标周围的环境名称;]]自动补全右括号或环境名…(这个可以帮助我们完成括号匹配)

2. 安装

如果您采用vim-plug管理vim插件,直接在.vimrc文件中添加

Plug 'lervag/vimtex'

然后normal模式下运行:PlugInstall即可安装成功

3. 开始你的配置

  • 我采用的是latexmk管理我的tex文件编译+Sumatra PDF预览pdf编译结果

  • 在此贴上我的vimrc配置文件23
    Note:(E:\Latex\SumatraPDF\SumatraPDF.exe 需要根据你的sumatra安装路径进行更改)

自VimTeX-commit f9fd179/tag v2.8 之后,增加了:VimtexInverseSearch支持反向搜索

VimTeX now works even better with inverse search from viewers:

  • I’ve added :VimtexInverseSearch that can be used by the viewer specific configuration to communicate with VimTeX in a “server agnostic” manner. See :help vimtex-synctex-inverse-search for more info.
  • The documentation on configuration of inverse search with viewers has been rewritten.
"LaTeX配置
let g:tex_flavor='latex'
let g:vimtex_texcount_custom_arg=' -ch -total'
"映射VimtexCountWords!\lw 在命令模式下enter此命令可统计中英文字符的个数
au FileType tex map <buffer> <silent>  <leader>lw :VimtexCountWords!  <CR><CR>
let g:Tex_ViewRule_pdf = 'E:\Latex\SumatraPDF\SumatraPDF.exe -reuse-instance -inverse-search "gvim -c \":RemoteOpen +\%l \%f\""'

"这里是LaTeX编译引擎的设置,这里默认LaTeX编译方式为-pdf(pdfLaTeX),
"vimtex提供了magic comments来为文件设置编译方式
"例如,我在tex文件开头输入 % !TEX program = xelatex   即指定-xelatex (xelatex)编译文件
let g:vimtex_compiler_latexmk_engines = {
    \ '_'                : '-pdf',
    \ 'pdflatex'         : '-pdf',
    \ 'dvipdfex'         : '-pdfdvi',
    \ 'lualatex'         : '-lualatex',
    \ 'xelatex'          : '-xelatex',
    \ 'context (pdftex)' : '-pdf -pdflatex=texexec',
    \ 'context (luatex)' : '-pdf -pdflatex=context',
    \ 'context (xetex)'  : '-pdf -pdflatex=''texexec --xtx''',
    \}
"这里是设置latexmk工具的可选参数
let g:vimtex_compiler_latexmk = {
    \ 'build_dir' : '',
    \ 'callback' : 1,
    \ 'continuous' : 1,
    \ 'executable' : 'latexmk',
    \ 'hooks' : [],
    \ 'options' : [
    \   '-verbose',
    \   '-file-line-error',
    \   '-shell-escape',
    \   '-synctex=1',
    \   '-interaction=nonstopmode',
    \ ],
    \}

" 阅读器相关的配置 包含正反向查找功能 仅供参考
let g:vimtex_view_general_viewer = 'E:\LaTeX\SumatraPDF\SumatraPDF.exe' "这里放置你的sumatrapdf 安装路径
let g:vimtex_view_general_options_latexmk = '-reuse-instance'
let g:vimtex_view_general_options
     \ = ' -reuse-instance -forward-search @tex @line @pdf'
     \ . ' -inverse-search "' . 'cmd /c start /min \"\" '  . exepath(v:progpath)
     \ . ' -v --not-a-term -T dumb -c  \"VimtexInverseSearch %l ''%f''\""' "for vim/gvim



"编译过程中忽略警告信息
let g:vimtex_quickfix_open_on_warning=0

4. Hello World

用vim/gvim打开一个文件,然后输入

% !TEX program = xelatex
\documentclass{article}
\usepackage{ctex}
\begin{document}
    Hello,LaTeX{} World!

    你好,世界!
\end{document}
  • 然后,<esc>进入normal模式,:w保存,输入\ll等待一小会,就可得到一个perfect的pdf文档
  • Note:由于latexmk的特性(一旦检测到tex源文件或者相关文件的更改,就可自动编译的)。也就是说,后续修改文件,添加文字,我们只要:w保存,
    之后等待vim状态栏下方回显出vimtex: Compilation completed字样,接着输入\lv就可查看更新后的pdf文档。

5. 用法

5.1. 基本用法

按键效果工作模式
\livimtex-info(文件信息)n
\ltvimtex-toc-open(打开目录)n
\llvimtex-compile(编译文件)n
\lvvimtex-view(查看pdf文档)n
\livimtex-imap-list(查看insert 模式下已定义的映射)n
Kvim-doc-package(查看宏包信息)n

5.2. imaps映射4

imaps list

  • 举例来说, 如果你想输入 \infty, 那么在插入模式下,只需要输入 `+ 8 就行了 (因为8躺下了就是 ∞ \infty

5.3. 模块编辑


-cse:change surrounding environment
比如在一个 align周围(注意是将光标调整到align周围或环境内部),我们按下按键cse,在命令行就会出现

Change surrounding environment:align
>[光标]

的提示,然后我们在光标处输入equation,那么这个环境就会变成

\begin{equation}
...
\end{equation}

  • tsd:toggle surrounding delimiter,互换括号,这个命令经常被用到
    • (..光标..)\left(..光标\right..)之间切换
    • [..光标..]\left[..光标..\right]
    • \{..光标..\}\left\{..光标..\right\}

  • ]],自动补全右括号,右环境.%自动配对光标处的另一个括号
({[78光标
-一次]]->({[78]光标
-2]]->({[78]}光标
....................
\begin{equation}
a^2+b^2=c^2
光标
-]]->
\begin{equation}
a^2+b^2=c^2
\end{equation}光标

  • 常用的textobj模块,这些可以和y(复制),d(删除)及c(修改)搭配使用(详情请查看5)
  • ic,ac:Text object for commands
  • id,ad:Text object for delimiters
  • ae,ie:Text object for environments
  • a$,i$:Text object for inline math

  • 如:
..(78787光标8ui)..
-di(-->(光标)
.........
..(78787光标8ui)..
-da(-->..光标..

Note:a.包括文字两侧的环境,括号,$等,i.仅仅包括被包围起来的文字。


6. vimtex的哲学

  • vimtex并不试图将vim变成一个完全的LaTeX IDE(这样可能会拖慢vim/gvim的加载速度)
    • 几乎不提供LaTeX片段支持,因为有更好的插件实现:ultisnips+vim-snippets
    • vimtex是模块化的,你可以选择关掉那些你不喜欢的功能(例如文件折叠)

7. 进阶操作

  • ultisnips+vim-snippets可实现tex片段补全,以及编辑LaTeX文件的速度6
  • 当然为了实现上面飞一般的操作, 也许你需要安装python环境以及sympypackage
  • 后续,学习学习再补充

  1. vimtex/README ↩︎

  2. latexmk.pdf ↩︎

  3. Is there any plan for the ``magic comments’’ ↩︎

  4. Vim Latex 的使用和配置技巧 (二) ↩︎

  5. vimtex文档说明 ↩︎

  6. 世界上最好的编辑器Vim:1700多页数学笔记是如何实时完成的 ↩︎

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐