我在Mac上使用Bash,其中一个别名就像这样
alias gitlog='git --no-pager log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'
什么时候我
:! gitlog
我得到
/bin/bash: gitlog: command not found
我知道我可以在.gitConfig
中添加这样的别名
[alias]
co = checkout
st = status
ci = commit
br = branch
df = diff
无论我不想将所有bash别名添加到.gitConfig。那不是干燥的。
有更好的解决方案吗?
Bash除非互动,否则不会加载
.bashrc
:set shellcmdflag=-ic
将其设置为当前会话的交互式。要永久设置设置,请在
set shellcmdflag=-ic
文件的末尾添加集合。
在将命令发送到Shell之前,请使用爆炸(
.vimrc
)。例如:!
.我知道这个问题以前已经“回答”了,但是我的答案有问题。壳不会设置为vim中的互动。请参阅此线程以获取替代答案,而无需退出交互式外壳。
如果您需要非相互作用的外壳(默认情况下),但是bash别名的扩展,请将您的别名定义放在文件中,例如.bash_aliases并明确启用此文件中的别名扩展:
:! cd folder/
然后将其添加到您的.vimrc中,因此每次从VIM内运行shell命令时,别名文件实际上是读取的:shopt -s expand_aliases
alias la='ls -la'
通过“ jakob”提出了这一解决方案。请参阅下面的链接。我在Mac OS X 10.9上进行了测试,并且完美无缺!
vim-在交互式模式下未识别别名?:我知道这可能是一个古老的问题,但是上述答案对我的需求都没有。因此,对于那些从谷歌搜索和(oh-my-)ZSH用户来到这里的人来说:
我对此的解决方案就像将.zshrc复制到.zshenv一样 - 按照Http://zsh.sourceforge.net/intro/intro/intro_3.html:
:
除非设置-f选项,否则将在外壳的所有调用中采购。它应包含设置命令搜索路径的命令,以及其他重要的环境变量。 `.zshenv'不应包含产生输出或假设将外壳连接到tty的命令。
我对设置-i选项不太满意,因为它具有很大的影响,而且我经常使用VIM的外壳。我要做的就是像let $BASH_ENV = "~/.bash_aliases"
可以在不使用交互式外壳的情况下使用壳牌别名,从而避免随之而来的问题(而无需查看会发生什么,当我用
$ cp ~/.zshrc ~/.zshenv
flag
vim运行命令时,在命令和我必须将其带回
:!bash -c ". ~/.alias; gitlog"
-i
fg
确保您的
~/.vimrc
来源.bash_profile
。在我最复杂的外壳设置中,我还跳过了大部分的非相互作用外壳的初始化,因此我还必须检测到当VIM调用时。这也可用于为VIM加载特定的别名。 在我的
.bashrc
中,此行会跳过脚本的其余部分
.bash_profile
NB:我使其匹配任何包含
.bashrc
的过程,因此它也与
.bashrc
,# Early bail-out on non-interactive shell (except vim subshell)
[ "$-" != "${-/i}" ] || [[ "$(ps -o comm= $PPID)" = *vim* ]] || return
等匹配...