web-dev-qa-db-ja.com

vimの現在の場所にシステムコマンドの出力を挿入する

Vimでは、使用するとき

:r !ls somefilename

現在の行の下の新しい行にそのコマンドの出力を挿入します。

私が行った場合

let @a = system("ls")

以降

"ap

現在の行の下の新しい行に出力を挿入します。

現在の場所でvim insertの出力を作成する方法はありますか?

29
deshmukh

挿入モードでCtrl-R *を使用して、クリップボードバッファーの内容を文字間で貼り付けることができます(他のバッファーでも同様の方法です)。したがって、システムコマンドをバッファに取得できる場合は、設定する必要があります。 (ソース: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position )。

:let @a=system("ls -l")は、ls -lの出力をレジスタaに入れます。 ^R-aを使用して(挿入モードで)貼り付けることができます。

13
Steve Kroon
:r !command 

コマンドからの出力を読み取り、現在の行の下の行に挿入します。これはviのプログラム方法であり、動作を変更することはできません。

ただし、行番号3の場合は言ってください。:r !dateを試してみてください。日付値を行番号4に挿入します。

行番号3に日付値を表示する場合は、:2r !dateを試して、行番号3に日付値を挿入します。

39
devav2

カーソルの前に外部コマンドからの出力を貼り付ける別の方法を次に示します。

:exe 'norm i' . system("ls -l")

または式レジスタ(:help @=)を使用します:

"=system('ls -la')

その後、ヒット P。またはより短い方法:

<CTRL-R>=system('ls -la')<CR>
11
kenorb