【问题标题】:Running command in existing shell from gvim从 gvim 在现有 shell 中运行命令
【发布时间】:2012-08-23 09:47:49
【问题描述】:

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

我怎样才能让原来的shell,从gvim开始,执行那个命令?

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

直接运行:!pdflatex的问题是,输出显示出来了,但是如果太长滚动是不可能的,当我按下回车后,一切都消失了。

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

【问题讨论】:

  • 我猜gedit有控制台的这个功能。请看一看。将回来提供更多详细信息。
  • 你能进一步解释一下使用单一外壳的必要性吗?
  • @mtk: 抱歉,我不会切换到其他编辑器。
  • @canaa 是一个想法,我也坚持使用 VIM,没有其他人像它一样舒适 :)
  • @canaaerus:如果我理解正确的话,最后的需要是能够看到您之前执行的编译文档的命令的结果。 Vim 有几个功能可以帮助完成这项任务,如quickfix - 在vim-faq 上有一些参考资料。这将允许您在 Vim 中查看编译结果。以前的结果仍然可以通过:cp 命令获得,它还允许您跳转到错误引用的特定行,尽管能够使用 Vim 的惊人功能浏览结果。

标签: linux shell vim ipc


【解决方案1】:

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

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

如果您不介意在您的 GVIM(模拟,具有所有缺点)中使用该外壳,那么可以使用插件来实现它。

【讨论】:

  • 我希望能够在启动gvim 时传递一个句柄,也许是gvim -c。好吧,我就试试conque,看看缺点是否可以接受。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    this recipe, 的 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) 列出错误。

    【讨论】:

      【解决方案4】:

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

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

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

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

      所以按 F5 可以保存我的文档并编译它,并且现在已经为我节省了多年的打字时间:)。

      【讨论】:

      • 感谢您的回答。不幸的是,您错过了问题的要点。该命令不应在临时 shell 中运行,其输出应打印在 gvim 窗口中,而应在专用控制台窗口中。
      • 然后使用 !urxvt "whatever" 启动这个专用控制台窗口
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2011-03-03
      • 2011-06-04
      • 2015-07-17
      • 2018-07-30
      相关资源
      最近更新 更多