有许多用于vim的Tex插件(vim-latex,AutomaticLatexPlugin可以说是一对)。
这些(我命名的,可能还有其他)TeX插件之间提供的功能有什么区别?
这是关于SO的几个相关问题:
有许多用于vim的Tex插件(vim-latex,AutomaticLatexPlugin可以说是一对)。
这些(我命名的,可能还有其他)TeX插件之间提供的功能有什么区别?
这是关于SO的几个相关问题:
Answers:
我不会提供深入的比较,因为我对不同插件的经验有限。我非常了解几个插件(LaTeX-Box和LaTeX-Suite),而且我非常了解一个插件,因为我自己开发了它:vimtex。因此,我将主要撰写有关vimtex的文章。但是,我将首先指出一些其他人可能感兴趣的参考。
Vim 有很多插件。这些是我认为至少是半流行的:
在tex.stackexchange.com上,有大量的LaTeX编辑器和IDE。总的来说,它提供了很好的概述,但同时也提供了Vim插件的一些概述:
vimtex基于LaTeX-Box。在我为LaTeX-Box贡献了一些错误修复和更新之后,它开始了。我意识到,如果我从头开始编写插件,可以用一种更加现代的方式编写插件。我首先去除了大多数功能,并构建了更强大且模块化的“引擎”。然后,我添加了功能,今天我认为它具有LaTeX-Box的大部分功能,还有一些。
我没有给出完整的功能列表(请参阅此处),而是尝试指出vimtex和其他插件之间的一些区别。但是,我想提出一些大胆的主张:
由于vimtex基于LaTeX-Box,因此显然具有相似的原理。这个想法是使事情保持简单并解决其他更好的插件尚未解决的问题。它利用Latexmk来编译LaTeX文档,并且基于内部Vim插件进行语法高亮显示。
LamX-Box中当前有一个重要的功能在vimtex中缺失:具有callback的单次编译。该功能不存在于vimtex中的原因仅仅是因为它很复杂,而且我从未找到一种可以根据自己的喜好实现足够简单的方法(欢迎提出建议,请不要犹豫打开问题或提出请求) )。
vimtex和LaTeX-Suite之间的主要区别可能是vimtex不会尝试在Vim中为LaTeX实现完整的IDE。例如:
latexmk
用于带有回调功能的编译以获取编译错误的即时反馈我无法进行比较,因为Vim-LaTeX是我使用过的唯一LaTeX插件。我已经使用Vim-LaTeX近一年了。因此,我将仅谈论Vim-LaTeX。
有许多存在于VIM-LaTeX的功能。我不记得所有人。我只会说说我一直知道并经常使用的功能。
注意:这些是我有限的用户体验,可能会引起误解。我不是经验丰富的Vim用户。而且我对vimscript一无所知。
<C-j>
跳跃IMAP()
Vim-LaTeX软件包中<C-j>
的插件分别提供了函数和跳转功能imaps.vim
。它们是强大的功能,即使您不编写LaTeX也可能非常有用。
IMAP()
与内置imap
和iabbrev
IMO 相比,函数提供了更自然的方式来进行插入模式映射和模板化。
<C-j>
许多Vim-LaTeX完成功能都使用了跳跃。跳点用表示<++>
。
内置的插入模式键映射被实现为IMAP()
调用。例如,您可以IMAP()
在main.vim
文件中找到一长串有用的调用:
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")
...
然后,当您键入say时()
,光标将自动驻留在括号之间,替换第一个<++>
。在内部输入完毕后,您将一脚踢动<C-j>
并敲击,光标将移出括号,而您将继续向前输入。一旦习惯了它,它就会开始形成打字流,这会让人上瘾……
您可以从上方看到一\left
\right
对,只需轻敲其打开括号即可轻松键入。而<C-j>
jumpping使得打字流。
的一个主要的毛刺IMAP()
和<C-j>
的事情是,他们弄乱了你最后的更改历史记录。(我希望长期修复一个错误。)因此,.
如果您的“假定的最后更改”包含这些函数调用,则在尝试重做最后的更改时可能会遇到意外的行为。
您可以使用进行各种映射IMAP()
,从简单的键映射到更复杂的模板。以下是一些我的映射示例(ftplugin/tex.vim
):
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')
关于imaps.vim
插件的一个有趣的事实是,它是一个全局插件,这意味着它的潜在用途超出了LaTeX。确实,我确实使用<++>
and <C-j>
jumppings(与其他插件结合)在C中构建代码段模板。
<F5> <F7>
插入命令和环境的一个缺点IMAP()
是,组合键不能再用于普通文本中(除非您通过撤消映射u
)。在您只想触发所需映射的情况下,<F5>
和<F7>
会派上用场。这两个键分别用于触发环境和嵌入式命令插入。它们的行为基于用户的模式和自定义而有所不同。
在“插入/普通模式”下,当光标附加一个单词或该单词在单词中时,<F5>
默认情况下按将插入以下形式的基本环境:
\begin{word}
<Cursor>
\end{word}<++>
基于单词;<F7>
默认情况下,按将插入\word{}<++>
基于单词的表单的基本内联命令。
“默认”是指您可以自定义特定单词在<F5>
/ 触发时的行为<F7>
。这是我的一些设置(.vimrc
):
let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
let g:Tex_Com_latex = "{\\LaTeX}<++>"
let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
在插入/正常模式,当光标不附加任何东西(又名独),按<F5>
/ <F7>
会提示你一个菜单来选择环境/命令插入。或者,您可以在底部键入所需环境/命令的名称。就个人而言,我很少使用<F5>
/ <F7>
这种方式。
在视觉上选择一段文字后,按<F5>
/ <F7>
会提示一个用于包装文字的菜单。然后,所选文本将被包装在您选择或键入的环境/命令中。
在插入/普通模式下,当光标在环境/命令范围内时,按<Shift>+<F5>/<F7>
将提示用于更改环境/命令的菜单。
`a
到`z
相应的首都。`8
for \infty
,`<
for \le
,`I
for \int_{<++>}^{<++>}<++>
等符号。"
两次将获得一对TeX双引号。因此,要键入文字"
字符,必须使用。\item
标签。\left
\right
由一对`(
,`[
和`{
。Tex_FoldedSections
,Tex_FoldedMisc
,和Tex_FoldedEnvironments
。有时,内置映射距离太远或没有退出所需的映射。您可以通过在以下位置重新定义内置映射来覆盖它们after/ftplugin/tex.vim
:
call IMAP('`|','\abs{<++>}<++>','tex')
call IMAP('ETE',"\\begin{table}\<CR>\\centering\<CR>\\caption{<+Caption text+>}\<CR>\\label{tab:<+label+>}\<CR>\\begin{tabular}{<+dimensions+>}\<CR><++>\<CR>\\end{tabular}\<CR>\\end{table}<++>",'tex')
call IMAP('==','==','tex')
call IMAP('`\','`\','tex')
我总是需要在pdflatex
和xelatex
引擎之间切换。因此,我的代码如下.vimrc
:
"switch to pdflatex
function SetpdfLaTeX()
let g:Tex_CompileRule_pdf = 'pdflatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lp :<C-U>call SetpdfLaTeX()<CR>
"switch to xelatex
function SetXeLaTeX()
let g:Tex_CompileRule_pdf = 'xelatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lx :<C-U>call SetXeLaTeX()<CR>
这是一个混乱而复杂的话题。有了特定的PDF查看器和一定的运气,它可以非常容易。但这主要是Google搜索的问题。
总体而言,我认为如果您愿意花一些时间驯服野兽,它将很好地工作。话虽这么说,但只要我有时间和足够的知识,我一定会减少开销的功能,并探索与其他插件集成的潜力。
vimtex
可以与并肩使用Latex-Suite
,这意味着您可以同时获得这两个插件中的精华。:)