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


11

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

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

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

2つのアイデア:

  • どういうわけかEXPORT、元のシェルからその子プロセスへvim、そして再びそのシェル子プロセスへのエイリアス
  • .zshrcサブシェルを作成するときに自分を読むようにVimを構成する

.zshrc.profileにインクルードします(これは、次のユーザーが使用しているようですvim
14

回答:


13

古い質問ですが、zshでのvimの最もクリーンな解決策は、エイリアスをに追加することでした~/.zshenv。このファイルは、zshがすべてのシェル、ログイン、インタラクティブなどのためにロードするファイルです。これにより、vimまたはzshをフラグで開始すること、およびそれに関連して起こり得る問題が回避されます。

~/.zshenvvsの良い説明があり~/.zshrcます:http : //tanguy.ortolo.eu/blog/article25/shrc

基本的に、zshは常にsourceします~/.zshenv。対話型シェルのソース~/.zshrc、およびログインシェルのソース~/.zprofile~/.zlogin。したがって、対話型ログインシェルのソース~/.zshenv ~/.zprofile ~/.zlogin ~/.zloginと、vimがソースのみのコマンドを実行するために使用する非対話型の非ログインシェルです~/.zshenv


これはリンクのみの回答ではありませんが、リンクとの違いの説明をインライン化すると最適です。そうすれば誰もがここでの説明から利益を得ることができ、私たちはリンクロットから安全です。
HalosGhost 2015

1
リンクからの主なポイントで私の答えを更新しました。
ケビン・リー

これは、他の回答よりも指数関数的にうまく機能しました。vimにインタラクティブシェルを起動するように追加すると、すぐに中断されました。.zshenvファイル(以前は存在していたことが知らなかった)を使用すると、エイリアスが返されました!
カレブ2015

5

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

  • が配置されて$ZDOTDIR=いるディレクトリを確認し.zshrcます。例えば、export ZDOTDIR=$HOME
  • .vimrcset shell=zsh\ -iまたはset shellcmdflag+=i同じ効果のため。

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


1
うーん、これは私にとって奇妙な問題を引き起こします:"+y今のようにシステムのクリップボードにコピーするとVimが一時停止します!superuser.com/questions/712245/...
ネイサンロング

5
vimを開くとすぐに中断されます。
カレブ2015

0

私はあなたが入って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、内部から参照してvimください。

:!{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をエコーし​​てVimが使用しているシェルを確認すると、「/ bin / zsh」が出力されます」
Nathan Long

@NathanLong-いいえ、それはあなたを誤解させるものだと思います。私のアップデートを参照してください。
slm

@slm vimはから値を引き出します$SHELL。だからあなたのシェルは/bin/bashです。私のシェルがの場合、/bin/zshそれが使用されます。
Patrick 14

0

私の問題shell=/usr/bin/zsh\ -l.vimrc解決に設定することによって

注意:

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


ubuntu 14.04を使用すると、これは私には
うまくいき
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.