如何在现有终端 SCM 会话中 运行 来自 vim 的 shell 命令?

How do I run a shell command from vim in the existing terminal SCM session?

问题陈述如下:

  1. 我打开一个 GNOME 终端和 运行 一个启动脚本 setup_myproject_view1,它设置一个 SCM 会话并设置一些环境变量。
  2. 我打开终端 vim 并开始经常在多个拆分窗格中浏览一些文件 (:sp, :vsp)
  3. 我意识到我需要编辑并保存这些文件中的一个或多个。但在此之前,我需要从 SCM server/depot.
  4. 中检出文件

现在我有多种选择:

  1. 关闭我所有的 vim 窗格和 运行 shell 中的签出命令,然后打开我之前打开的一个或所有文件。非常乏味。
  2. 打开一个新终端 window 或选项卡并 运行 启动脚本并签出文件。然后 return 到原始终端, 运行 :e 在启用写权限的情况下再次加载文件并继续编辑它。仍然很乏味,因为我必须 运行 启动脚本(所以我必须记住我正在使用哪个项目视图)并切换 windows/tabs.
  3. 运行 shell 从 vim 使用 :shell 或 :! 签出命令。这将是理想的,因为我可以快速 return 进行编辑而不会打断我的思路。但是vim里面的shell又没有启动会话setup_myproject1_view1。我也不想在我的 shell 的 .cshrc 文件中自动将 setup_myproject_view1 到 运行,因为我有不同的项目和视图:setup_myproject3_view2,等等

那么我如何才能 运行 从 vim 方便地执行 shell 命令而无需设置 SCM 项目视图?

您可以使用 ctrl+z 暂停 vim,完成结帐,然后使用 [=14= 恢复] 如果您从 bash shell 调用 vim。有关详细信息,请参阅 bash job control

另一种方法是,您应该修改设置脚本以将变量导出到底层 shell。例如,如果您的脚本是这样的:

 # script.sh
 MEH=4

当你使用它时你会得到这样的结果:

source script.sh
vim
:shell
echo $MEH

exit

但是如果你这样改变它:

 # script.sh
 export MEH=4

当你使用它时你会得到这样的结果:

source script.sh
vim
:shell
echo $MEH
4
exit