web-dev-qa-db-ja.com

vimから実行されるコマンドはbashコマンドエイリアスを認識しません

私はMacでbashを使用していますが、エイリアスの1つはこのようなものです

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に追加したくありません。それは乾燥していません。

より良い解決策はありますか?

92
Nick Vanderbilt

Bashは、インタラクティブでない限り.bashrcをロードしません。使用する

:set shellcmdflag=-ic

vimの:!シェルはコマンドプロンプトのように動作します。

109
Josh Lee

この質問はすでに「回答済み」でしたが、回答に問題があります。シェルは、Vimでインタラクティブに設定する必要はありません。対話型のシェルを終了する必要のない別の回答については、このスレッドを参照してください。

非対話型のシェル(デフォルト)で、bashエイリアスの拡張が必要な​​場合は、エイリアス定義をファイルに入れます(例: .bash_aliasesおよびこのファイルでエイリアス展開を明示的に有効にします。

shopt -s expand_aliases  
alias la='ls -la'

次に、これを.vimrcに追加して、vim内からシェルコマンドを実行するたびにエイリアスファイルが実際に読み取られるようにします。

let $BASH_ENV = "~/.bash_aliases"

この解決策は「Jakob」によって提案されました。オリジナルについては、以下のリンクをご覧ください。これをMac OS X 10.9でテストしたところ、問題なく動作しました!

vim-対話モードでエイリアスを認識しない?

77
Zahnon

Bashドットファイルの設定方法によっては、-iオプションではなく-lを使用することをお勧めします。これにより、ログインシェルとしてシェルが起動します。

7
user836003

私はそれが古い質問かもしれないことを知っていますが、上記の答えのどれも私が望んでいたようにうまくいきませんでした。したがって、グーグルからここに来た人と(oh-my-)zshユーザーの場合:

これに対する私の解決策は、 http://zsh.sourceforge.net/Intro/intro_3.html に従って.zshrcを.zshenvにコピーするだけでした。

`.zshenv 'は、-fオプションが設定されていない限り、シェルのすべての呼び出しで取得されます。コマンド検索パスを設定するコマンドと、その他の重要な環境変数を含める必要があります。 `.zshenv 'には、出力を生成したり、シェルがttyに接続されていると想定したりするコマンドを含めないでください。

そう $ cp ~/.zshrc ~/.zshenvが行います。

5
Damian Borowski

-iオプションを設定することにあまり不安はありません。かなり影響があり、vimからシェルを頻繁に使用しているためです。私が代わりにやることは、:!bash -c ". ~/.alias; gitlog"

2
pfnuesel