从vim中使用Shell命令

8
什么是从vim使用shell命令的最佳方法?我知道有!shell_command的可能性。但这并不知道所有的命令,例如export OSTYPE; make install。所以我必须在vim外运行它。是否有更好的方法?

3
“doesn't know all commands”是什么意思?你给出的例子在vim中可以运行得很好。 - John Cromartie
没有更好的方法,:!您的命令应该适用于所有情况。 - HaloWebMaster
@xralf: 你是在尝试在同一个:!命令中执行导出和制作两个操作吗?我想知道是否这就是问题所在。如果你将它们分成两个独立的:!命令,它们能够正常执行吗? - Herbert Sitz
嗯,从vim中看来,似乎export不会像那样工作。 - John Cromartie
1
@xralf:命令执行问题可能在于交互式和非交互式Shell之间的差异:在非交互式Shell中,不允许使用别名,并且跳过某些初始化步骤。除非您别名了exportmake,否则这不应该对您的特定示例造成影响。还请注意,执行!export ...,然后再执行!command是没有意义的,因为当您执行!command时,导出变量的Shell已经关闭了。 - ZyX
显示剩余3条评论
2个回答

26

我知道这可能有点晚了,但我的首选方法是暂停 vim 进程(Ctrl+z)。这会让你回到 shell/bash 命令提示符。

然后执行任何命令。

通过键入 fg 返回到 vim。


12
你可以使用:sh命令从Vim启动shell。当shell退出(使用exit命令或Ctrl+D后),你将返回到Vim。shell命令的名称来自shell选项。
对于终端Vim(在类Unix系统上),你还可以使用Ctrl+Z暂停Vim并返回到运行它的shell。要恢复Vim进程,请使用fg命令。

能否在一个分屏或选项卡中打开Shell并在另一个中打开文件?有时我需要同时查看Shell和源文件。我正在使用tmux,但将tmux命令与Vim命令混合使用以在分屏之间导航很麻烦。 - xralf
2
@xralf 你可以尝试使用 Conque。它运行缓慢,与Unicode不兼容,并且在您没有切换到当前窗口的情况下不会更新缓冲区,但这是目前vim功能最好的选择。您还可以尝试 screen 插件,它可以从vim内部向其他screen/tmux窗口发送按键。 - ZyX

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