我使用vim编辑.tex文件。
我转到命令行并使用
pdflatex
对其进行编译。我发现自己总是使用:w
保存文件,并且立即不得不切换终端以执行pdflatex
(我使用Ubuntu)进行编译。 这让我很烦。我想提高效率,这样我就可以一次完成两个步骤。有没有一种配置vim的方法,以便每次我用
.tex
保存一个:w
文件时,命令pdflatex
都会自动执行?#1 楼
别那么低效!您的时间很宝贵。使用@lervag提供的vimtex
插件:请参见此处。您可以使用Vundle
或任何类似的插件管理器来控制安装的所有插件(vim-plug
越来越受欢迎)。为什么浪费时间安装
vimtex
? 功能
使用
latexmk
连续编译(请多谢!)使用vim quickfix窗口自动警告/错误通知。
正向和反向搜索。
支持各种PDF查看器。
结合
gf
和<ctrl-w>gf
支持多文件项目(我喜欢这个)。命令可以使事物执行
latexmk -C
之类的操作。它正在积极开发中!
还有更多!
请注意,功能编号1是解决您的问题的功能。每次执行
:w
时,您的文档将被保存并由latexmk
自动重新编译。 latexmk
监视您的LaTeX文件中的更改,并在检测到更改时自动重新编译。该帖子不是由
vimtex
团队的任何开发人员或分支机构赞助或推广的(我只是一个情人)。 br /> 变得高效!
评论
我已经安装了vimtex,如何使用连续编译?如果它应该“正常工作”……那就没什么大不了的。
– CtrlAltF2
20-05-19在16:29
#2 楼
将此添加到我的.vimrc作品中:autocmd BufWritePost *.tex silent! execute "!pdflatex % >/dev/null 2>&1" | redraw!
在所有
.tex
文件上,它将在pdflatex <filename>
上执行:w
,而不会在vim中输出任何内容。是最小的,并且不使用插件或额外的程序。注意:在编译错误时,vim似乎挂起,但是按return可以解决此问题。
#3 楼
如果您使用tpope的Dispatch插件:https://github.com/tpope/vim-dispatch,则可以在后台运行命令。
我使用此代码段在每次保存时运行xelatex :
augroup latex
autocmd!
autocmd BufEnter *.tex let b:dispatch='xelatex --output-directory=output %'
autocmd BufWrite * Dispatch!
augroup end
#4 楼
我不会为此配置Vim。相反,我会使用类似entr的方法:$ ls foo.tex | entr <your command here>
评论
entr工具似乎很有趣,但是在这种情况下,为什么您会推荐它而不是像autocmd FileWritePost * .tex Latexmk这样的自动命令呢?
–statox♦
16年4月1日在14:03
因为我更喜欢使用专门的工具。
– romainl
16年4月1日在14:31
#5 楼
由于编译.tex文件需要花费几秒钟的时间,因此我更喜欢在后台进行处理。过去,有两种方法可以执行此操作:通过使用job_start()
运行异步命令,以及通过使用tmux将编译命令发送到另一个终端。1。使用
job_start()
将以下内容添加到您的.vimrc中:
RedrawScreen()
作业完成。请注意,这使用了job_start()
,它调用latexmk -pdf
。相反,如果要直接使用pdflatex
,则必须先将pdflatex
插入.tex文件的目录中,然后才能调用cd
。2。使用tmux将
pdflatex
命令发送到另一个终端将以下内容添加到您的.vimrc中:
function! RedrawScreen(channel)
redraw!
endfunction
function! RunLatexmk()
let tex_file = expand('%:p') " current file
let tex_cmd = 'latexmk -pdf -interaction=nonstopmode -cd ' . tex_file
let s:job = job_start(['/bin/sh', '-c', tex_cmd],
\ {'close_cb': 'RedrawScreen'})
endfunction
autocmd BufWrite *.tex :call RunLatexmk()
现在,打开另一个终端并创建一个名为“ vim_output”的tmux会话:
latexmk
。现在,当您将文件保存在Vim中时,tmux new-session -s vim_output
命令将在您刚创建的终端中运行。
评论
您的问题现在太笼统了。您是否已有命令来编译乳胶文件,或者您正在寻找Latex-box插件的:Latekmk命令?还是您正在寻找一个自动命令来执行文件写入操作......请通过指明到目前为止已搜索和发现的内容来澄清您的问题。@statox编辑的问题
有一些可以在文件每次更改时自动(重新)编译乳胶命令的方法,它们独立于Vim。研究那个;)
(即,您可以从Latexmk -pdf -pvc file.tex之类的东西开始)
@VanLaser愿上帝保佑您