我想编写一些脚本并让 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'