私の.zshrc
では、いくつかのエイリアスを宣言しています。たとえば、which dbstart
はそのエイリアスの内容を示します。
そのシェルからvimを開くと、それは子プロセスです。 Vimでは、:! some_command
を使用してシェルコマンドを実行できます。 Shell Vimが使用しているものを確認するために:! echo $0
を実行すると、「/ bin/zsh」が出力されます。ただし、私のエイリアスは使用できません。
Vimからシェルアウトするときに、通常のシェルエイリアスを使用できるようにするにはどうすればよいですか?
2つのアイデア:
EXPORT
エイリアスを元のシェルからその子プロセスvim
に、そして再びそのシェル子プロセスに.zshrc
を読み取るようにVimを構成する古い質問ですが、zshでのvimの最もクリーンな解決策は、~/.zshenv
にエイリアスを追加することでした。このファイルは、zshがすべてのシェル、ログイン、インタラクティブなどのためにロードするファイルです。これにより、vimまたはzshをフラグで開始すること、およびそれで起こりうる問題を回避できます。
~/.zshenv
と~/.zshrc
の良い説明はこちら: http://tanguy.ortolo.eu/blog/article25/shrc
基本的に、zshは常に~/.zshenv
をソースとします。インタラクティブシェルソース~/.zshrc
、およびログインシェルソース~/.zprofile
および~/.zlogin
。したがって、対話型ログインシェルは~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogin
をソースとし、vimがソース~/.zshenv
のみのコマンドを実行するために使用する非対話型非ログインシェルを使用します。
これはzshで機能するようです:
$ZDOTDIR=
が.zshrc
が配置されているディレクトリであることを確認します。例:export ZDOTDIR=$HOME
.vimrc
、set Shell=zsh\ -i
またはset shellcmdflag+=i
では同じ効果が得られます。-i
は、zshellがインタラクティブモードで起動すると$ZDOTDIR/.zshrc
をロードするためです。詳細については、man zsh
を参照し、$ZDOTDIR
を検索してください。
あなたがvim
にいて、:!some_command
を使用しているときは、環境変数$Shell
で定義されているシェルを使用していると思います。
これは構成可能であるため、$Shell
ファイルの$HOME/.vimrc
動作をオーバーライドして、代わりにzsh
を使用するように変更できます。
:set Shell
shell=/bin/bash
:set Shell=zsh\ -i
または.vimrc
で、これらの2行のうち1行を使用
set Shell=/bin/bash\ -i
set Shell=/bin/zsh\ -i
詳細については、vim
内から:help Shell
を参照してください。
:!{cmd} Execute {cmd} with the Shell. See also the 'Shell'
and 'shelltype' option.
Any '!' in {cmd} is replaced with the previous
external command (see also 'cpoptions'). But not when
there is a backslash before the '!', then that
backslash is removed. Example: ":!ls" followed by
":!echo ! \! \\!" executes "echo ls ! \!".
After the command has been executed, the timestamp of
the current file is checked timestamp.
設定することにより Shell=/usr/bin/zsh\ -l
in .vimrc
問題を解決しました
注意:
私が使用しています:linux mint 17.1