如何获取vim bang命令以查找我的功能

时间:2019-03-29 18:27:25

标签: vim

我在.bashrc文件(如下所示)来源的文件中定义了函数。从bash命令行以及在执行子shell并使用命令时,都可以找到该命令。但是在vim会话中,执行bang命令时找不到foo函数。如何使foo函数对bang命令可见?

foofile: 

    printf "%s\n" "here I am in foofile"

    function foo () {
        printf "%s\n" "Here I am in function foo.  Love ya ma!"
    }

    export foo

(in vim) 

:!foo
/bin/bash: foo: command not found

shell returned 127

1 个答案:

答案 0 :(得分:0)

TL; DR:如果您在自己的bashrc中export -f foo,您将获得所需的功能,而为此付出的代价是每个子shell都具有该功能。

vim运行自己的shell。此外壳程序不提供您的.bashrc

您可以运行env -i bash --norc --noprofile来模拟此shell。

此shell仍具有最小的$PATH。为了在此shell中执行某些操作,它必须在该路径中。您可能应该使用/usr/local/bin/usr/bin

按如下所示制作名为foo的文件

#!/bin/bash
someName() {
    #contents of foo from your bashrc
}
someName #someName here can be foo, and you can just copy your whole function, 
#but I wanted to show that this name doesn't have to relate to the fileName

将该文件放在其中一个文件夹中并使其可执行(chmod 744是一个不错的选择)

编辑:

如果您不想使实用程序函数具有自己的文件,则可以简单地将.bashrc用作命令的一部分:

:!source ~/.bashrc && foo

第二编辑:

Michail指出了一种替代方法,即让您的.bashrc export 所有功能都可以在子shell中使用。

foo() {
    ....
}
export -f foo

现在在vim中,您可以输入

:!foo 

它将按预期工作