我有一个函数(写在下面;来源:TeX SX),该函数在shell中使用管道,我想在vim命令模式下使用管道。它可以从shell正常运行,但是如果在vim命令模式下输入,则会返回E34:No previous command错误。完全功劳归给TeX SX上jirislav中的this post。
:| | pdflatex-错误停止src.tex | grep'^!。*'-A200 --color = always
我非常想从vim命令行中获得此shell功能,如果有人可以帮助的话。
我在vim命令模式下尝试了以下方法:
:! :| pdflatex-错误停止src.tex | grep'^!。*'-A200 --color = always
返回E34错误。没有管道会隐藏所有编译。但是,它也不会输出错误。删除2个管道中的1个也会为我返回E34错误。
我尝试了进一步的故障排除,但没有成功,下面是一些结果。对:的帮助!说
管道'|'在{cmd}中传递给shell时,您不能使用它来附加vim命令。参见:bar
和:bar说(我认为这是逃避的事情)]
'|'可用于分隔命令,因此您可以在一行中给出多个命令。如果要使用“ |”在参数中,在其前面加上“ \”。
我尝试做:bar建议的事情,即
:! :\ | pdflatex-错误停止src.tex \ | grep'^!。*'-A200 --color = always
结果是它隐藏了所有内容,包括我想看到的编译错误。因此,我得出的结论是,我不知道如何在vim命令模式下正确使用shell管道。
如果您不是LaTeX用户,则该函数仅需执行以下操作。 pdflatex将vim中发生的事情编译为pdf文件。正在演戏:! vim命令模式下的pdflatex%输出整个处理文本的列表并中断工作流程;函数中的grep会删除编译错误(如果存在)。然后,该函数应隐藏pdflatex的所有输出,除非发生编译错误,在这种情况下,它仅输出错误并以红色输出。
[如果有人愿意解释E34错误以及为什么它不起作用,也将不胜感激。
编辑1:现在,此[已解决感谢filbranden。下面附有几张图片,其中包含一个最小的示例,以后任何人都可以使用。
[vim file before input,output编辑2:如果要将其保留在.vimrc文件中,则需要在grep之前转出管道,否则
vimrc文件默认认为管道是分隔符。
:!
以获取有关此错误的更多上下文。):help
的部分包含此段落::!
中的任何!
被
先前的外部命令替换。但是,如果'!'前面没有反斜杠,则不会删除该反斜杠。
您did在您的命令中有一个
您可以通过用反斜杠转义{cmd}
,作为!
正则表达式grep
的一部分,因此正在触发“历史记录”行为,试图替换为先前执行的命令。但是由于此时没有命令执行,该命令失败并显示错误。^!.*
来解决它,Vim在将命令传递给shell之前将其删除::! pdflatex-错误停止src.tex | grep'^ \!。*'-A200 --color =始终
但是请注意,有更好的方法来解决此问题!让我涵盖其中一些。
使用systemlist()在Vim中运行外部命令的一种好方法是使用!
函数,该函数在shell上运行该命令,捕获其输出,将其拆分为多行,然后返回带有结果输出行的List。]所以您可以开始于:
systemlist()
然后使用Vimscript命令检查以
systemlist()
开头的行以向用户报告。注意,与
let latex_output = systemlist('pdflatex -halt-on-error src.tex')
不同,!
的输出永远不会显示给用户(这意味着您不会切换回查看终端,可能是空白终端,执行之后就不会有一个“命中输入提示。)太好了!但是,如果有错误,您需要将该信息提供给用户。一个很好的方法是使用:!
!您可以使用
systemlist()
功能设置快速修复窗口的内容。((为了获得最佳结果,您应该适当地设置quickfix window,稍后再说。)
使用vim-dispatch
如果您不喜欢运行带有外部命令的外部命令(通过
setqflist()
或setqflist()
),请执行以下操作block Vim,直到命令执行完成,然后考虑安装
'errorformat'
插件-in。它可以在后台或在单独的终端中为您执行命令,因此不会阻止您进行编辑。它还与
:!
命令和quickfix窗口集成。vim-latex中的编译器配置
最后,systemlist()
插件(也称为乳胶套件)具有可帮助您运行vim-dispatch和报告错误的配置。[它包含Vim
:make
配置,它将vim-latex作为pdflatex
程序。它还会:compiler
识别:compiler
字符串并识别错误的行号,因此您可以直接从快速修复列表中跳转到它们。注意,vim-latex还具有许多其他功能来帮助您在Vim中编写LaTeX文档(除了通过编译器支持来管理输出的生成。您可能还需要检查这些其他功能。
(由于该插件具有很多功能,所以我建议您阅读整个文档以开始使用它。)
还请注意,此插件与vim-dispatch兼容(因为vim-latex提供了编译器接口,而vim-dispatch占用了它,所以如果您俩都喜欢的话,可以一起使用!