私は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に追加したくありません。それは乾燥していません。
より良い解決策はありますか?
Bashは、インタラクティブでない限り.bashrcをロードしません。使用する
:set shellcmdflag=-ic
vimの:!
シェルはコマンドプロンプトのように動作します。
この質問はすでに「回答済み」でしたが、回答に問題があります。シェルは、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でテストしたところ、問題なく動作しました!
Bashドットファイルの設定方法によっては、-iオプションではなく-lを使用することをお勧めします。これにより、ログインシェルとしてシェルが起動します。
私はそれが古い質問かもしれないことを知っていますが、上記の答えのどれも私が望んでいたようにうまくいきませんでした。したがって、グーグルからここに来た人と(oh-my-)zshユーザーの場合:
これに対する私の解決策は、 http://zsh.sourceforge.net/Intro/intro_3.html に従って.zshrcを.zshenvにコピーするだけでした。
`.zshenv 'は、-fオプションが設定されていない限り、シェルのすべての呼び出しで取得されます。コマンド検索パスを設定するコマンドと、その他の重要な環境変数を含める必要があります。 `.zshenv 'には、出力を生成したり、シェルがttyに接続されていると想定したりするコマンドを含めないでください。
そう $ cp ~/.zshrc ~/.zshenv
が行います。
-iオプションを設定することにあまり不安はありません。かなり影響があり、vimからシェルを頻繁に使用しているためです。私が代わりにやることは、:!bash -c ". ~/.alias; gitlog"