2012-06-24 9 views
12

、それは、オペレーティングシステム(のようなPATH)から環境変数の多くをつかむと、それはまた、それ自身の環境変数(MYVIMRCのような)を設定します。Vimのすべての環境変数を表示するには? <strong>Vimの</strong>が開始されると

をリストするか、またはVimが理解できるすべての環境変数とそれぞれの値をVim内部から表示しますか?

+1

http://vim.wikia.com/wiki/Displaying_the_current_Vim_environmentだから、助け – epsilonhalbe

+0

のものであってもよいですenv vars vim継承の完全なリストを探しているか、Vimが単独で作成したすべてのenv Varsを探していますか? –

+2

私が知る限り、Vimのみの手段ではできません。しかし、Unixのようなシステムでは、単に ':!env'を使うことができます。 –

答えて

18

Vimスクリプトでは、現在のところ 定義された環境変数のリストを取得する設計された方法はありません。しかし、Vim コマンドライン補完機能を利用することは可能です。

次の未完了コマンドの可能な補完を検討してください。

:echo $ 

Vimのスクリプトの構文に応じて、 補完の全てが、環境変数の名前であることが見て難しいことではありません。 wildcharキー (デフォルトではタブ、)またははCtrl +Dを押すと、それらのすべて を表示します。

スクリプト内からこの補完リストを取得するには、 がその対話型の性質を克服する必要があります。 ここでは、機能の組み合わせに依存すると考えている可能性があります。最初は Ctrl + コマンドです。コマンドラインモードでは、このショートカット は、使用可能なすべての補完をカーソルの前に挿入します。 これらの補完はアルファベット順にリストされ、スペースで区切られています。

の補完をVimで印刷すると、コマンド出力を:redir コマンドでリダイレクトすることで簡単に取り込むことができます。しかし、我々はその副作用を達成するために必要なすべてのはCtrl +に挿入されたテキスト を引用することである:引用は、私たちの :echoコマンドの残りの部分だけ印刷されます文字列リテラルになります!プレスはCtrl +、ユーザーが:ec:echoの別名) $を入力することができ、コマンドラインをこのように編集するには

:echo 'NAME1 NAME2 NAME3' 
NAME1 NAME2 NAME3 

、タイプ'、コマンドの先頭にジャンプ はCtrl +Bと、二回、そのを削除(右矢印キー)を押して ドル記号の上にカーソルを移動 と代わりに'を挿入してください。 :normalコマンドを使用して、同じキー・シーケンスを 非対話形式で再現できます。

これらすべてのパズルをまとめると、次のような関数が得られます。仕事へのこのアプローチのために

function! Env() 
    redir => s 
    sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>" 
    redir END 
    return split(s) 
endfunction 

、Vimは+cmdline_compl 機能付きでコンパイルする必要があります。

+0

'echo'を' return'に変更する方が良いです:それは私のために働きます: 'execute" fu!Test()\ nexe'silent normal!:return $ \ '')\ \ \ \ split( '' '。\ "\\ n \" \ nendfu "' – ZyX

13

その後

:echo $<C-D> 

を使用し、すべての環境変数を一覧表示するには、あなたは、オートコンプリートタブでの関心の変数の名前を入力し始めることができ、最終的には押しは、その値を表示するようにを入力します。

あなたはこれを対話的に、またはスクリプトで必要とするかどうかは分かりませんでした。後者の場合、残念ながら:redirで出力をキャプチャすることはできません。

+0

Ingo Karkat:ありがとう。インタラクティブで私と一緒にいいです。 –

+0

':redir'を使ってコマンドライン補完を取得することができます。それは、しかし、トリビュートなトリックが必要です。興味があれば、私の[回答](http://stackoverflow.com/a/11192777/254635)を参照してください。 –

3

他のアンワースを見ると、スクリプトなしで実行できます。

は、挿入モードを開始し、その後、はCtrl +Rは、あなたが(参照:i_Ctrl-Rを助ける)レジスタのいずれかが使用可能に挿入することができます

<C-R>= 

を押してください。しかし特に、式レジスタ=を使用して文字列を評価します(help @ =を参照)。

これで、ib。の答えによって導入された式を挿入できるようになりました。

$<C-A>"<HOME>"<CR><ESC> 

ここで、通常のモードに戻って、式が文字列に評価され、バッファに入れられているはずです。

​​

これは、すべての環境変数を別の行に配置する必要があります。 IBとZYXからのコメントによって考えに基づき

0

、ここで私が使用して終了機能があります:

function! GetEnvVars() 
    silent execute "normal! :return $\<C-a>')\<C-b>\<C-right>\<Right>\<Del>split('\<CR>" 
endfunction