让vim makeprg继承主机shell';环境
我正在使用vim编辑Linux内核。我的环境使用了许多为此和其他目的定义的变量和函数,包括编译内核的bash函数。所以我通常做的是:让vim makeprg继承主机shell';环境,vim,Vim,我正在使用vim编辑Linux内核。我的环境使用了许多为此和其他目的定义的变量和函数,包括编译内核的bash函数。所以我通常做的是: vim file.c 编辑 ctrl+z 运行编译函数 通读错误 fg 修正错误 我想用:make替换这个繁琐的过程,并用:copen浏览错误。问题是要编译,我需要整个环境。。。我可以编写一个脚本,每次设置环境,然后调用编译函数,并从:make调用此脚本,但这会给每次:make调用增加几秒钟的开销,以设置环境 因此,我的问题是:能否使从生成环境变量/函数的shel
vim file.c
fg
:make
替换这个繁琐的过程,并用:copen
浏览错误。问题是要编译,我需要整个环境。。。我可以编写一个脚本,每次设置环境,然后调用编译函数,并从:make调用此脚本,但这会给每次:make调用增加几秒钟的开销,以设置环境
因此,我的问题是:能否使从生成环境变量/函数的shell继承环境变量/函数?流程关系如下所示:
bash → vim → bash → make
如果希望make
从初始shell(启动Vim的shell)继承环境,则必须export
在初始shell中导出所有这些变量(以及带有export-f funcname
的函数)。将export
添加到环境定义中,或者(如果您无法修改这些定义)在调用Vim之前编写一个shell脚本,该脚本是您从Bash中派生的(source scriptname
)
您可以通过检查变量是否已从Vim内正确导出
:echo $VARNAME
流程关系如下所示:
bash → vim → bash → make
如果希望make
从初始shell(启动Vim的shell)继承环境,则必须export
在初始shell中导出所有这些变量(以及带有export-f funcname
的函数)。将export
添加到环境定义中,或者(如果您无法修改这些定义)在调用Vim之前编写一个shell脚本,该脚本是您从Bash中派生的(source scriptname
)
您可以通过检查变量是否已从Vim内正确导出
:echo $VARNAME
启动
make
的另一种方法是让另一个shell监视一组文件或目录,并在任何文件发生更改时启动命令。每次:w
,都会在另一个shell中启动make命令
此方法有多种方法,如中所述
要在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
。超级用户问题概述了OSX的一些可能方法
尽管如此,这并不能解决使用
:copen
打开错误的问题。启动make
的另一种方法是让另一个shell监视一组文件或目录,并在任何文件更改时启动命令。每次:w
,都会在另一个shell中启动make命令
此方法有多种方法,如中所述
要在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
。超级用户问题概述了OSX的一些可能方法
虽然,这无法解决使用
:copen
打开错误的问题,但很遗憾,我无法将导出添加到所有构建环境变量/函数中。我可以在vim中重新初始化构建环境吗?我每次打电话给makeprg都要这么做吗?也就是说,每次我调用makeprg时,vim是否会生成一个bash shell?我编写了一个脚本来设置构建环境并运行编译脚本,然后在vim中将该脚本设置为makeprg。这是可行的,但如果每次我调用make时都能避免设置构建环境的开销,那就太好了。有什么想法吗?您不需要在定义中添加导出;您可以稍后将它们导出(在同一个shell中,这就是为什么我说要为任何这样做的脚本提供源代码)。我可以在vim中重新初始化构建环境吗?我每次打电话给makeprg都要这么做吗?也就是说,每次我调用makeprg时,vim是否会生成一个bash shell?我编写了一个脚本来设置构建环境并运行编译脚本,然后在vim中将该脚本设置为makeprg。这是可行的,但如果每次我调用make时都能避免设置构建环境的开销,那就太好了。有什么想法吗?您不需要在定义中添加导出;您可以稍后导出它们(在同一个shell中,这就是为什么我说要为任何这样做的脚本提供源代码)。谢谢。一般来说,了解这一点很有用,但我确实希望能够使用:copen功能。如果您将/code>tee单独make命令的输出重定向到一个文件中,您可以在Vim中使用:cfile filename
。这与使用:copen
非常相似。谢谢。一般来说,了解这一点很有用,但我确实希望能够使用:copen功能。如果您将/code>tee单独make命令的输出重定向到一个文件中,您可以在Vim中使用:cfile filename
。这与使用:copen
非常相似。