VimTeX+Vim:带你愉快地编辑LaTeX文件
本文介绍Vim 配置VimTeX写LaTeX文档的技巧, 基础操作与高阶配置以及一些相关的操作。
·
文章目录
- 笔者采用的环境为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. 基本用法
按键 | 效果 | 工作模式 |
---|---|---|
\li | vimtex-info(文件信息) | n |
\lt | vimtex-toc-open(打开目录) | n |
\ll | vimtex-compile(编译文件) | n |
\lv | vimtex-view(查看pdf文档) | n |
\li | vimtex-imap-list(查看insert 模式下已定义的映射) | n |
K | vim-doc-package(查看宏包信息) | n |
5.2. imaps映射4
- 举例来说, 如果你想输入 \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 commandsid
,ad
:Text object for delimitersae
,ie
:Text object for environmentsa$
,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
环境以及sympy
package - 后续,学习学习再补充
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)