从gvim在现有shell中运行命令

时间:2012-08-23 09:47:50

标签: linux shell vim ipc

一切都从shell开始。例如,我将urxvtzsh一起使用。在那里我用gvim打开一些文件。在这种情况下,它是LaTeX文件。现在我需要执行一些命令(用于编译文档,例如pdflatex)。

如何从启动gvim的原始shell中执行该命令?

如果gvim必须打开一个新的一次,之后再执行该shell中指定命令(pdflatex)的每个调用,也是可以接受的,虽然我仍然可以手动输入。

直接运行:!pdflatex的问题是显示输出,但是如果它已经太长了滚动是不可能的,在我按下返回后,它就全部消失了。

使用shell的想法意味着窗口焦点默认情况下不必切换。所以通常我的命令的输出是可见的,但除非发生错误,我可以继续在gvim中工作。现在,如果每次运行命令时都会生成一个新的shell,那么这种工作流肯定是不可能的。

4 个答案:

答案 0 :(得分:2)

GVIM不会以允许它向其发送命令的方式保留启动它的shell的“句柄”。由于它们是同步执行,您也无法从GVIM启动shell,继续提供命令,同时继续在GVIM中工作。

我担心您必须使用窗口管理器的功能来启动(然后再重新激活)shell窗口,并将命令作为击键发送给它。在Windows上,可以通过WshShell的{​​{1}},Run()AppActivate()方法完成此操作(例如在VBScript中); Linux上的窗口控制可能也有类似的机制。

如果你不介意在中使用 你的GVIM(模拟,有它的所有缺点),那么就有插件可以启用它。

答案 1 :(得分:1)

您可能想要使用Conque。它有缺点(可能很慢,不经常更新等)但至少它适用于你期望的。

答案 2 :(得分:1)

Vim Wiki为this recipe,,我认为它将通过完全消除对外部shell的需求来解决您的问题。在这里,如果源变暗:

let b:tex_flavor = 'pdflatex'
compiler tex
set makeprg=pdflatex\ \-file\-line\-error\ \-interaction=nonstopmode
set errorformat=%f:%l:\ %m

基本上,您使用:make进行编译,使用quickfix窗口(:copen)列出错误。

答案 3 :(得分:0)

您可以通过调用!command来在vim中运行shell命令。

对于运行pdflatex的特定用例,我在/etc/vimrc中添加了以下快捷方式:

:nmap <F5> :w<CR>:make<CR>

:make会在当前目录中调用gnu make,最终会调用pdflatex。这非常灵活,因为相同的快捷方式将根据您所在的目录执行不同的操作(如果您使用C编码,它通常会调用gcc)。但是你必须精通make:)。

因此点击F5会保存我的文档并进行编译,并为我节省了多年的打字时间:)。