使用vim external命令调用bash函数

时间:2017-10-25 17:53:03

标签: bash vim

我使用vim:!外部命令函数一直都是,通常提供%作为shell命令的参数。例如:

:!psql -f %

我在我的.bashrc中也有很多bash shell函数。例如:

psql-h1 () 
{ 
    /usr/bin/psql -hh1 -d mydb "$@"
}

这些bash功能无法通过以下方式获得:在vim里面。有没有办法让它们可用?

4 个答案:

答案 0 :(得分:3)

导出您的功能。那就是:

psql-h1() { /usr/bin/psql -hh1 -d mydb "$@"; }

export -f psql-h1  ### <-- THIS RIGHT HERE

这将使它们可以作为子进程的任何bash运行副本使用,即使它是非交互式shell,也不会读取.bashrc 。< / p>

答案 1 :(得分:3)

导出你的函数的替代方法(可能无法访问Vim,其间是非Bash shell;请参阅here这样的情况),你可以指示Vim启动交互式 shell,以便您阅读.bashrc。只需通过Vim -i:help 'shellcmdflag'标记传递给Bash。

:set shcf=-ic

答案 2 :(得分:0)

此答案假设您的vim实际上并未使用bash来调用远程命令 - 可以通过在:!echo $0中运行vim来测试此问题。

专门针对vim,添加:

set shell=/bin/bash

.vimrc

一般来说,在尝试让其他程序调用我喜欢的shell时,我发现有两种策略有时会起作用:

export SHELL=/bin/bash

例如。 .profile文件或:

ln -fsn /bin/bash /bin/sh

更新sh符号链接以指向bash

在许多系统(当然是Ubuntu)上,/bin/shsh - 兼容shell(例如bash)的符号链接,而不是sh shell本身。鉴于这一事实,一些程序(我在GHC中看到过这种行为)似乎调用/bin/sh,因此改变指向的位置将导致程序使用bash

答案 3 :(得分:0)

接受的答案对我不起作用。我将按照其他地方的建议设置shcf:

:set shcf=-ic

但另一个解决方案是

!source ~/.bashrc && psql ...

不幸的是,没有解决方案允许自动完成我正在创建的命令的正常工作。 (建议的auto_completions用于当前目录中的文件名,而不是我在.bashrc

中指定的文件名。
complete -F _generate_foo_completions foo