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

时间:2017-10-20 16:31:23

标签: vim gnome-terminal

这是问题陈述:

  1. 我打开一个GNOME终端并运行一个启动脚本setup_myproject_view1,它设置一个SCM会话并设置一些环境变量。
  2. 我打开终端vim并开始浏览多个分割窗格中的一些文件(:sp,:vsp)
  3. 我意识到我需要编辑并保存这些文件中的一个或多个。但在我能够做到这一点之前,我需要从SCM服务器/软件仓库中检出文件。
  4. 现在我有多种选择:

    1. 关闭我的所有vim窗格并在shell中运行checkout命令,然后打开之前打开过的一个或所有文件。很乏味。
    2. 打开一个新的终端窗口或选项卡,然后运行启动脚本并签出文件。然后返回原始终端,运行:e在启用写入权限的情况下再次加载文件并继续编辑。仍然乏味,因为我必须运行启动脚本(所以我必须记住我正在工作的项目视图)并切换窗口/标签。
    3. 使用:shell或:!从vim运行shell check out命令。这将是理想的,因为我能够在不打破思路的情况下快速返回编辑状态。但是vim中的shell再次没有启动会话setup_myproject1_view1。我也不想让setup_myproject_view1在我的shell的.cshrc文件中自动运行,因为我有不同的项目和视图:setup_myproject3_view2等。
    4. 那么如何在不必设置SCM项目视图的情况下从vim方便地运行shell命令?

1 个答案:

答案 0 :(得分:0)

你可以使用 ctrl + z 暂停vim,执行结帐,然后使用 # script.sh MEH=4 恢复它,如果你从bash shell调用vim的话。有关详细信息,请参阅bash job control

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

source script.sh
vim
:shell
echo $MEH

exit

使用它时会得到这个结果:

 # script.sh
 export MEH=4

但如果你改变它:

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

使用它时会得到这个结果:

this.Statuses