如何在使用 :! bash 退出 Vim 后重新进入 Vim?

6
我正在学习Vim和Bash shell脚本,并遇到了这个问题:
当我使用MacVim时,有时候想要使用命令行来编译我的代码(在这种情况下是一个小的Java程序)。所以我输入 ":! bash" 并编译需要测试的代码。但是当我想回到我正在编辑的程序时,我输入 "vim MyProgram.java" ,但我的Vim会出现各种混乱的字符,如 "[8;1H~ [9:1H~ [10:1H~ ...等等。
我做错了什么?我不能在启动shell后再跳回Vim吗?
是否有更好的方法来编译和运行你当前的文件?
(我使用的是MacVim 7.2和Bash 3.2.48在OSX 10.6.2上。)
6个回答

15

有两个建议:

  1. 使用 exit 命令退出 bash shell 并返回 vim。
  2. 在 vim 中,使用 :set makeprg=你的编译程序名 命令,可以在 vim 中使用 :make 命令自动编译。此外,如果你使用的编译工具被 vim 识别,vim 还会解析编译器的输出,显示错误并允许您跳转到每个错误以进行修复。请参阅命令 :cl:cc:cn:cp

3
将几个功能键映射为:cn和:cp命令会很有帮助,这样快速来回跳转会更加迅速。 - Steve K

6

只需要输入:

exit

这将退出bash子进程并返回到vim。最好使用类似GNU Screen的工具同时维护Vim和Bash会话(比使用:!bash ... exit更容易切换)。


两年半后,tmux > screen。 - Adam Liss
@Adam:真的吗?它似乎专注于成为一种轻量级的替代品(并且它没有所有 screen 的功能)。有什么特别引人注目的理由需要转换吗? - Draemon
更多的是个人偏好,我认为。在http://tmux.sourceforge.net/有一些信息,以及在http://www.wikivs.com/wiki/Screen_vs_tmux上进行了(非常简短的)比较(奖励:现在我知道wikivs!) - Adam Liss

4

你必须退出bash shell。可以通过exit命令或更简单地在提示符处按下CTRL+D来完成此操作。


3
其他答案是正确的。 我只想提一下,您可以使用
:sh

替代

:!bash

请查看:help sh

这样,vim就知道你正在运行一个shell而不仅仅是一些命令(恰好是bash)。


1

尝试在bash shell中键入exit或ctrl-d。这将把您带回到vim中。Bash正在vim“内部”运行,因此如果您尝试再次运行vim,则会在vim内部的bash中运行vim,从而导致错误。


0
如果你使用的是Mac OS,在执行一个bash命令后,可能需要键入fg才能返回到vim。其他方法对我没有起作用。

1
不是这种情况。使用vim内部的交互式shell有两种方法:作为子进程启动一个新的(就像TS所做的那样),或者挂起vim(如果vim是从shell启动的话,应该会让你进入 shell)。exit用于第一种情况,fg用于第二种情况。 - ZyX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接