如何使.bashrc别名在VIM Shell命令中可用? (:!...)

问题描述 投票:0回答:6

我在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
bash vim alias
6个回答
128
投票
run

:set shellcmdflag=-ic

将其设置为当前会话的交互式。
要永久设置设置,请在

set shellcmdflag=-ic

文件的末尾添加集合。

在将命令发送到Shell之前,请使用爆炸(
.vimrc

)。例如:

!

.

我知道这个问题以前已经“回答”了,但是我的答案有问题。壳不会设置为vim中的互动。请参阅此线程以获取替代答案,而无需退出交互式外壳。

如果您需要非相互作用的外壳(默认情况下),但是bash别名的扩展,请将您的别名定义放在文件中,例如.bash_aliases并明确启用此文件中的别名扩展:
:! cd folder/

然后将其添加到您的.vimrc中,因此每次从VIM内运行shell命令时,别名文件实际上是读取的:

101
投票
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的命令。


14
投票
注意,取决于如何配置bash dotfiles,您可能需要使用-l而不是-i选项。 这将启动弹壳作为登录外壳。

我对设置-i选项不太满意,因为它具有很大的影响,而且我经常使用VIM的外壳。我要做的就是像let $BASH_ENV = "~/.bash_aliases"

可以在不使用交互式外壳的情况下使用壳牌别名,从而避免随之而来的问题(而无需查看会发生什么,当我用
$ cp ~/.zshrc ~/.zshenv

flag

vim
运行命令时,在命令和我必须将其带回

:!bash -c ". ~/.alias; gitlog"

8
投票
在您的

-i

添加以下行以启用别名扩展并读取登录shell脚本:

2
投票
fg

确保您的
~/.vimrc

来源

0
投票
或您的别名,因为我们使用登录外壳来迫使bash读取rc脚本plastites是非相互作用的,并且默认情况下登录shells读取

.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
等匹配...


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.