![MacVim 对我的别名的行为感到奇怪(甚至设置了 shell=/bin/bash\ -l)](https://linux22.com/image/1271470/MacVim%20%E5%AF%B9%E6%88%91%E7%9A%84%E5%88%AB%E5%90%8D%E7%9A%84%E8%A1%8C%E4%B8%BA%E6%84%9F%E5%88%B0%E5%A5%87%E6%80%AA%EF%BC%88%E7%94%9A%E8%87%B3%E8%AE%BE%E7%BD%AE%E4%BA%86%20shell%3D%2Fbin%2Fbash%5C%20-l%EF%BC%89.png)
我想编写一些脚本并让 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'