一切都从shell开始。例如,我将urxvt
与zsh
一起使用。在那里我用gvim
打开一些文件。在这种情况下,它是LaTeX
文件。现在我需要执行一些命令(用于编译文档,例如pdflatex
)。
如何从启动gvim
的原始shell中执行该命令?
如果gvim
必须打开一个新的一次,之后再执行该shell中指定命令(pdflatex
)的每个调用,也是可以接受的,虽然我仍然可以手动输入。
直接运行:!pdflatex
的问题是显示输出,但是如果它已经太长了滚动是不可能的,在我按下返回后,它就全部消失了。
使用shell的想法意味着窗口焦点默认情况下不必切换。所以通常我的命令的输出是可见的,但除非发生错误,我可以继续在gvim
中工作。现在,如果每次运行命令时都会生成一个新的shell,那么这种工作流肯定是不可能的。
答案 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会保存我的文档并进行编译,并为我节省了多年的打字时间:)。