web-dev-qa-db-ja.com

Vimからシェルアウトするときにシェルエイリアスを使用できるようにするにはどうすればよいですか?

私の.zshrcでは、いくつかのエイリアスを宣言しています。たとえば、which dbstartはそのエイリアスの内容を示します。

そのシェルからvimを開くと、それは子プロセスです。 Vimでは、:! some_commandを使用してシェルコマンドを実行できます。 Shell Vimが使用しているものを確認するために:! echo $0を実行すると、「/ bin/zsh」が出力されます。ただし、私のエイリアスは使用できません。

Vimからシェルアウトするときに、通常のシェルエイリアスを使用できるようにするにはどうすればよいですか?

2つのアイデア:

  • 何とかEXPORTエイリアスを元のシェルからその子プロセスvimに、そして再びそのシェル子プロセスに
  • サブシェルの作成時にmy .zshrcを読み取るようにVimを構成する
11
Nathan Long

古い質問ですが、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のみのコマンドを実行するために使用する非対話型非ログインシェルを使用します。

13
Kevin Lee

これはzshで機能するようです:

  • $ZDOTDIR=.zshrcが配置されているディレクトリであることを確認します。例:export ZDOTDIR=$HOME
  • .vimrcset Shell=zsh\ -iまたはset shellcmdflag+=iでは同じ効果が得られます。

-iは、zshellがインタラクティブモードで起動すると$ZDOTDIR/.zshrcをロードするためです。詳細については、man zshを参照し、$ZDOTDIRを検索してください。

5
Nathan Long

あなたが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のヘルプ

詳細については、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.
0
slm

設定することにより Shell=/usr/bin/zsh\ -l in .vimrc問題を解決しました

注意:

私が使用しています:linux mint 17.1

0
murali kodali