コマンドラインモードでは、次の例は機能しません。
!alias lol='echo lol'
!lol='echo lol'
:!
コマンドを使用すると、Vim内から新しいシェルが生成されます。そのシェルでは、エイリアスが設定されていますが、その直後にシェルが終了し、すべてが失われます。
Vimを起動するシェルでエイリアスを定義するのが最適です。環境変数については、Vim内から:let $VAR = 'value'
を介して設定することもでき、:!
コマンドで使用することもできます。また、Vim内から:Shell
を使用してシェルを開始するか、Vimを一時停止して:stop
または^z
を使用して元のシェルに戻ることができます。
vim
は、非対話型bash
の1つのインスタンスを開始します(bash
がログインシェルであり、_$Shell
_ごとに_!
_を変更していないと仮定します) __コマンド(_!cmd
_では、vimは_bash -c cmd
_を実行します)。そう:
bash
はエイリアスを展開せず、インタラクティブでない場合は_~/.bashrc
_を読み取りませんこれを回避するには、_$BASH_ENV
_をエイリアスの拡張を有効にし、bash
の終了時に新しいエイリアスのリストを含めて自分自身を書き換えるようなものに設定します。 (_~/.vimrc
_内)のようなもの:
_let $BASH_ENV = $HOME . "/.bashvimrc." . getpid()
au VimLeave * silent !exec rm -f "$BASH_ENV"
silent !echo 'vim_setup() { shopt -s expand_aliases; trap write_aliases EXIT; eval "$@"; }; write_aliases() { typeset -f vim_setup write_aliases; alias; echo vim_setup \"\$@\";} > "$BASH_ENV"; vim_setup "$@"' > "$BASH_ENV"
set Shell=/bin/bash
_