我的编写例程是这样的:


我使用vim编辑.tex文件。
我转到命令行并使用pdflatex对其进行编译。我发现自己总是使用:w保存文件,并且立即不得不切换终端以执行pdflatex(我使用Ubuntu)进行编译。

这让我很烦。我想提高效率,这样我就可以一次完成两个步骤。有没有一种配置vim的方法,以便每次我用.tex保存一个:w文件时,命令pdflatex都会自动执行?

评论

您的问题现在太笼统了。您是否已有命令来编译乳胶文件,或者您正在寻找Latex-box插件的:Latekmk命令?还是您正在寻找一个自动命令来执行文件写入操作......请通过指明到目前为止已搜索和发现的内容来澄清您的问题。

@statox编辑的问题

有一些可以在文件每次更改时自动(重新)编译乳胶命令的方法,它们独立于Vim。研究那个;)

(即,您可以从Latexmk -pdf -pvc file.tex之类的东西开始)

@VanLaser愿上帝保佑您

#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命令将在您刚创建的终端中运行。