我在.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
答案 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
它将按预期工作