让vim makeprg继承主机shell的环境

时间:2014-01-09 04:45:25

标签: vim

我正在使用vim来编辑Linux内核。我的环境使用了许多为此定义的变量和函数以及其他用途,包括用于编译内核的bash函数。所以我通常做的是:

  1. vim file.c
  2. 修改
  3. CTRL + Z
  4. 运行编译功能
  5. 通读错误
  6. fg
  7. 修复错误。
  8. 我想用:make替换这个繁琐的过程,并使用:copen浏览错误。问题是要编译,我需要我的整个环境......我可以编写一个脚本,每次都设置环境,然后调用编译函数,并调用以下脚本:make,但是这会给每个人增加几秒的开销:打电话来设置环境。

    所以我的问题是::make能否从它产生的shell继承环境变量/函数?

2 个答案:

答案 0 :(得分:3)

流程关系如下:

bash → vim → bash → make

如果您希望make从初始shell(启动Vim)继承环境,则必须export所有这些变量(以及export -f funcname的函数)在初始shell 中。将export添加到环境定义中,或者(如果您无法修改它们)在调用Vim之前从Bash编写一个 source source scriptname)的shell脚本。

您可以通过

检查变量是否已在Vim中正确导出
:echo $VARNAME

答案 1 :(得分:1)

另一种启动make的方法是让另一个shell监视一组文件或目录,并在更改任何文件时启动命令。每次:w,你都会在其他shell中启动make命令。

此方法有多种方法,如https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes

中所述

为了在linux机器上保持简单,您可以使用inotifywait

while true; do
    change=$(inotifywait -e close_write,moved_to,create /tmp/path/to/directory/)
    echo "something happened!"
    make
done

您需要在OS X上使用另一个命令,因为它不支持inotifywait。超级用户问题概述了OS X的一些可能方法。

但是,这无法解决使用:copen打开错误的问题。