MacVim 对我的别名的行为感到奇怪(甚至设置了 shell=/bin/bash\ -l)

MacVim 对我的别名的行为感到奇怪(甚至设置了 shell=/bin/bash\ -l)

我想编写一些脚本并让 MacVim 调用一些 bash 命令。我有一些别名,希望 vim 能够调用它们,所以我知道我需要一个登录 shell,只是不知道如何让 vim 使用它。

我读过这个:https://stackoverflow.com/questions/4642822/vim-is-not-obeying-command-aliases(对我的 MacVim 不起作用);还有这个:https://stackoverflow.com/questions/4642822/vim-is-not-obeying-command-aliases这似乎是个好主意。

所以我打开了我的 .vimrc 并将其输入:set shell=/bin/bash\ -l

现在发生了一些非常奇怪的事情:我的 中有一个别名.bash_profile,如下所示:

alias mytest='echo "TEST!!"'

我的.bashrc来源.bash_profile,所以我知道这不应该是别名设置在哪里的问题。如果我进入 vim 并运行::! alias mytest

我看到的是:

alias mytest='echo "TEST!!"'

Press ENTER or type command to continue

但是,如果我运行:! mytest,我会得到以下结果:

/bin/bash: mytest: command not found

shell returned 127

Press ENTER or type command to continue

所以我不知道这是怎么发生的。为什么当我运行“别名”时别名就在那里,但当我运行别名本身时,bash 却无法识别它?

我非常感谢任何人就此事给我提供的见解。

谢谢。

更新:

我现在尝试将我的.vimrc线路改为:

set shell=/bin/bash\ -li

为了使 shell 既能交互又能作为登录 shell,它就起作用了。

所以我稍微改变了一下我的问题:为什么这有意义?据我了解,登录 shell 运行我的.bash_profile,从而加载我的别名。为什么这还不够?

答案1

别名旨在作为用户的简写,因此它们只在交互式 shell 中才有意义。因此,bash 手册页说:“当 shell 不是交互式时,别名不会展开,除非使用 shopt 设置 expand_aliases shell 选项(请参阅下面 SHELL BUILTIN COMMANDS 下对 shopt 的描述)。”我想你可以添加shopt -s expand_aliases到你的 .bash_profile 中,但这可能会导致其他类型的非交互式 shell 出现意外行为……

答案2

这应该有效::! bash -ic 'mytest; exit'

相关内容