有许多针对vim的Tex插件(vim-latex,AutomaticLatexPlugin可以说是一对)。

这些TeX插件(我命名的和可能的)之间提供的功能有什么区别?在SO上有几个相关问题:


Latex和Vim的用法
VIM中必需的插件是什么用于乳胶?


#1 楼

我不会提供深入的比较,因为我对不同插件的经验有限。我非常了解几个插件(LaTeX-Box和LaTeX-Suite),而且我非常了解一个插件,因为我自己开发了它:vimtex。因此,我将主要撰写有关vimtex的文章。但是,我首先要指出一些其他人可能感兴趣的参考文献。

一些概述和参考文献

有很多Vim插件。这些是我认为至少是半受欢迎的:


LaTeX-Suite
LaTeX-Box
vimtex
AutomaticTexPlugin
vim-latex-live-preview

在tex.stackexchange.com上,有大量的LaTeX编辑器和IDE。它总体上提供了一个很好的概述,但同时也提供了Vim插件的一些概述:


带LaTeX-Box的Vim
带LaTeX-Suite的Vim
Vim带Snipmate和橡胶的
带vimtex的Vim

vimtex

vimtex基于LaTeX-Box。在我为LaTeX-Box贡献了一些错误修复和更新之后,它开始了。我意识到,如果我从头开始编写插件,则可以用一种更现代的方式编写插件。我首先去除了大多数功能,并构建了更强大和模块化的“引擎”。然后,我添加了功能,我想今天它具有LaTeX-Box的大部分功能,还有一些功能。

我没有给出完整的功能列表(请参见此处)。尝试指出vimtex和其他插件之间的一些差异。但是,我想提出一些大胆的主张:


vimtex是当今可用的用于LaTeX的最现代的Vim插件。我自己
即使大部分功能仍在开发中(即使可能会进行更改和更新),该插件还是非常稳定的。

vimtex vs LaTeX-Box

由于vimtex基于LaTeX-Box,因此显然具有相似的原理。这个想法是使事情保持简单并解决其他更好的插件尚未解决的问题。它利用Latexmk编译LaTeX文档,并基于内部Vim插件进行语法高亮显示。

LamX-Box当前在vimtex中缺少一项重要功能:单次编译打回来。该功能不存在于vimtex中的原因仅仅是因为它很复杂,而且我从未找到一种可以根据自己的喜好实现足够简单的方法(欢迎提出建议,请不要犹豫,打开问题或提出请求) )。

vimtex vs LaTeX-Suite

vimtex和LaTeX-Suite之间的主要区别可能是vimtex并未尝试在Vim内为LaTeX实现完整的IDE。例如:


vimtex不能提供完整的代码片段功能,因为最好由UltiSnips或neosnippet或类似的代码片段引擎来处理。
vimtex基于Vim原理:它提供文本用于环境的对象,内联数学,它提供节和段落的运动。
vimtex使用latexmk进行编译,并带有回调功能,以获取有关编译错误的即时反馈。功能,可以将其关闭。


评论


只是要说明一下:vimtex可以与Latex-Suite并排使用,这意味着您可以同时获得两个插件中的最佳功能。 :)

–林丰
17年4月21日在0:35

vimtex与将coc和coc-texlab一起使用时相比如何?可以同时使用它们吗?

– Michiel Van Couwenberghe
19年11月18日在16:36

我不知道,因为我还没有使用过texlab。但是我认为它应该很好地协同工作。您可以将texlab与coc.nvim或其他LSP实现配合使用,例如完成,这可能比vimtex完成更好。但是我会说vimtex的完成度非常好,因此应该不会更好。但是,vimtex确实也提供了许多其他功能,这些功能将与LSP正交。

– Karl YngveLervåg
19年11月19日在17:28

有关更多信息,请参见有关vimtex回购的本期评论。

– Karl YngveLervåg
19年11月19日在17:29

#2 楼

我无法进行比较,因为Vim-LaTeX是我使用过的唯一LaTeX插件。我使用Vim-LaTeX已经快一年了。
所以我将只谈论Vim-LaTeX。

Vim-LaTeX中存在许多功能。我不记得所有人。我将只谈论我一直知道并经常使用的功能。

注意:这些是我有限的用户体验,可能会引起误解。我不是经验丰富的Vim用户。而且我对vimscript一无所知。

IMAP()和<C-j> Jumping

IMAP()函数和<C-j>跳跃函数作为Vim-LaTeX捆绑包中的插件imaps.vim单独提供。它们是强大的功能,甚至在您不编写LaTeX时也可能非常有用。 IMO的IMAP()imap。许多Vim-LaTeX完成功能都使用了iabbrev跳转。跳转点由<C-j>指示。内置插入模式键映射实现为<++>调用。例如,您可以在IMAP()文件中找到一长串有用的IMAP()调用:括号之间,替换第一个main.vim。在内部键入完毕后,按一下()并敲击,光标将移出括号,然后继续向前键入。一旦您习惯了它,它就会开始形成打字流,有点让人上瘾...

从上方可以看到<++><C-j>可以轻松地用其打开支架的两次击打来打字。而\left的跳跃则使输入流程顺畅。

\right<C-j>的一个主要故障是它们弄乱了您的上次更改历史记录。 (我希望长期修复一个错误。)因此,如果您的“假定的最后更改”包含这些函数调用,则尝试通过IMAP()重做最后的更改时,您可能会遇到意外行为。



您可以使用<C-j>进行各种映射,从简单的键映射到更复杂的模板。以下是我的映射示例(.):IMAP()插件的一个有趣事实是它是一个全局插件,这意味着它在LaTeX之外的潜在用途。的确,我确实使用ftplugin/tex.vimimaps.vim跳转(与其他插件结合)在C中构建代码段模板。 <++>的缺点是不能再在普通文本中使用组合键(除非您通过<C-j>撤消映射)。如果您只是想根据需要触发映射,则<F5> <F7>IMAP()会派上用场。这两个键分别用于触发环境和嵌入式命令插入。并且它们的行为根据用户的模式和自定义项而有所不同。默认情况下,将基于单词插入格式为

call IMAP ('__', '_{<++>}<++>', "tex")
call IMAP ('()', '(<++>)<++>', "tex")
call IMAP ('[]', '[<++>]<++>', "tex")
call IMAP ('{}', '{<++>}<++>', "tex")
...
call IMAP ('((', '\left( <++> \right)<++>', "tex")
call IMAP ('[[', '\left[ <++> \right]<++>', "tex")
call IMAP ('{{', '\left\{ <++> \right\}<++>', "tex")
...


的基本环境;默认情况下,按u将基于单词插入基本内联命令,形式为<F5>


“默认情况下”,我的意思是您可以自定义特定单词在被<F7> / <F5>触发时的行为。这是我的一些设置(<F7>):

call IMAP('*EEQ',"\begin{equation*}\<CR><++>\<CR>\end{equation*}<++>",'tex')
call IMAP('DEF',"\begin{definition}[<++>]\<CR><++>\<CR>\end{definition}<++>",'tex')
call IMAP('BIC','\binom{<++>}{<++>}<++>','tex')
call IMAP('PVERB','\PVerb{<++>}<++>','tex')
call IMAP('VERB','\verb|<++>|<++>','tex')


在“插入/普通模式”下,当光标未附着于其他任何东西(又称为a)时,按\word{}<++> / <F5>将提示您一个菜单,以选择要插入的环境/命令。或者,您可以在底部键入所需环境/命令的名称。就我个人而言,我很少使用<F7> / .vimrc
在视觉上选择一段文本后按<F5> / <F7>会提示用于换行的菜单。然后,选定的文本将被包装在您选择或键入的环境/命令中。
在“插入/普通模式”下,当光标位于环境/命令的范围内时,按<F5>将提示您更改环境/菜单。命令。

其他按键映射


希腊字母。 <F7><F5>以及相应的大写字母。
<F7>表示<Shift>+<F5>/<F7>的符号,`a表示`z的符号,`8表示\infty的符号,等等。因此,要键入文字`<字符,必须使用。
在多个枚举环境中按下将插入适当的\le标记。您可以通过`I\int_{<++>}^{<++>}<++>"将视觉选择的数学部分包装在"\item对中。
折叠是可定制的。可以折叠的三个全局变量控制:\left\right`(。有时,内置映射距离太远或没有退出所需的映射。您可以通过在`[中重新定义内置映射来覆盖它们:

\begin{word}
<Cursor>
\end{word}<++>


设置多重编译引擎和`{引擎。因此,我在Tex_FoldedSections中有以下几行:

let g:Tex_Com_newcommand = "\newcommand{<++>}[<++>]{<++>}<++>"
let g:Tex_Com_latex = "{\LaTeX}<++>"
let g:Tex_Com_D = "\D{<++>}{<++>}<++>"


查看PDF,在Vim和PDF查看器之间进行正向和反向搜索这是一个混乱而复杂的话题。有了特定的PDF查看器和一定的运气,这可能非常容易。但这主要是Google搜索的问题。

建议


您应该在LaTeX方式和Vim-LaTeX方式之间找到平衡。 LaTeX根本不轻巧。有些功能和/或键映射可能永远不会使用,而您必须手动覆盖它们。
您使用Vim。你知道耐心是什么意思。 :-)

总的来说,如果您愿意花一些时间来驯服野兽,那它会很好地工作。话虽这么说,只要我有足够的时间和足够的知识,我一定会精简开销功能,并探索与其他插件集成的潜力。官方用户手册
备忘单