1

这一切都从一个外壳开始。例如我正在使用urxvtwith zsh。在那里我用gvim. 在这种情况下,它是一个LaTeX文件。现在我需要执行一些命令(用于编译文档,例如pdflatex)。

我怎样才能让原始外壳从哪里gvim开始执行该命令?

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

直接运行的问题:!pdflatex是,显示了输出,但是如果滚动时间过长,则无法滚动,并且在我按回车后,一切都消失了。

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

4

4 回答 4

2

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

恐怕您必须使用窗口管理器的功能来启动(然后重新激活)shell 窗口,并将命令作为击键发送给它。在 Windows 上,这可以通过WshShell'sRun()和方法来完成(例如在 VBScript 中);Linux 上的窗口控制可能也有类似的机制。AppActivate()SendKeys()

但是,如果您不介意在 GVIM 中使用该外壳模拟,具有所有缺点),那么可以使用插件。

于 2012-08-23T10:28:49.640 回答
1

您可能想使用Conque。它有缺点(可能很慢,更新不那么频繁等),但至少它可以满足您的期望。

于 2012-08-23T10:26:02.573 回答
1

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

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

基本上,您使用:make编译和快速修复窗口 ( :copen) 来列出错误。

于 2012-08-23T13:15:13.917 回答
0

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

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

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

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

所以按 F5 可以保存我的文档并对其进行编译,并且现在可以节省我多年的打字时间 :)。

于 2012-08-23T09:56:56.617 回答