我在mac上使用bash,其中一个别名是这样的
alias gitlog='git --no-pager log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做
:! gitlog
Run Code Online (Sandbox Code Playgroud)
我明白了
/bin/bash: gitlog: command not found
Run Code Online (Sandbox Code Playgroud)
我知道我可以在我的.gitconfig中添加这样的别名
[alias]
co = checkout
st = status
ci = commit
br = branch
df = diff
Run Code Online (Sandbox Code Playgroud)
但是,我不想将所有bash别名添加到.gitconfig.那不是干.
有更好的解决方案吗?
Jos*_*Lee 109
除非它是交互式的,否则Bash不会加载.bashrc.使用
:set shellcmdflag=-ic
Run Code Online (Sandbox Code Playgroud)
使Vim的:!shell表现得像命令提示符.
Zah*_*non 79
我知道这个问题之前已经"回答"了,但我的答案有问题.在Vim中不需要将shell 设置为交互式.无需退出交互式shell,即可查看此主题以获取备用答案.
如果您需要非交互式shell(默认情况下)但扩展bash别名,请将别名定义放在一个文件中,例如.bash_aliases并在此文件中明确启用别名扩展:
Run Code Online (Sandbox Code Playgroud)shopt -s expand_aliases alias la='ls -la'然后将其添加到.vimrc中,以便每次从vim中运行shell命令时实际读取别名文件:
Run Code Online (Sandbox Code Playgroud)let $BASH_ENV = "~/.bash_aliases"
这个解决方案由"Jakob"提出.请参阅以下链接了解原件.我在Mac OS X 10.9上进行了测试,它运行得很完美!
请注意,根据bash dotfiles的配置方式,您可能需要使用-l而不是-i选项.这将以shell身份启动shell.
小智 6
我知道这可能是一个古老的问题,但是以上答案均无法满足我的要求。因此,对于那些通过谷歌搜索来到这里的用户以及(oh-my-)zsh用户而言:
我对此的解决方案就像将.zshrc复制到.zshenv一样简单-按照http://zsh.sourceforge.net/Intro/intro_3.html:
除非设置了-f选项,否则.zshenv会在shell的所有调用中得到。它应包含用于设置命令搜索路径的命令,以及其他重要的环境变量。“ .zshenv”不应包含产生输出或假定外壳已连接到tty的命令。
所以$ cp ~/.zshrc ~/.zshenv会做的事情。
| 归档时间: |
|
| 查看次数: |
15837 次 |
| 最近记录: |