Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让vim makeprg继承主机shell';环境_Vim - Fatal编程技术网

让vim makeprg继承主机shell';环境

让vim makeprg继承主机shell';环境,vim,Vim,我正在使用vim编辑Linux内核。我的环境使用了许多为此和其他目的定义的变量和函数,包括编译内核的bash函数。所以我通常做的是: vim file.c 编辑 ctrl+z 运行编译函数 通读错误 fg 修正错误 我想用:make替换这个繁琐的过程,并用:copen浏览错误。问题是要编译,我需要整个环境。。。我可以编写一个脚本,每次设置环境,然后调用编译函数,并从:make调用此脚本,但这会给每次:make调用增加几秒钟的开销,以设置环境 因此,我的问题是:能否使从生成环境变量/函数的shel

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

  • vim file.c
  • 编辑
  • ctrl+z
  • 运行编译函数
  • 通读错误
  • 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
    非常相似。