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


33

vimでは、使用するとき

:r !ls somefilename

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

私が行った場合

let @a = system("ls")

以降

"ap

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

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


この便利な回答を参照してくださいvimからbashで現在の行を実行する
Rohan Ghige

回答:


14

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

:let @a=system("ls -l")の出力ls -lをregister に入れますa。その後、(挿入モードで)で貼り付けます^R-a


また、ほとんどのプラットフォームでは、クリップボードはレジスタ(通常は*)と同期されるため、コマンド出力をクリップボードにパイプすると、"*使用できるようになります。
ブルーノブロノスキー

39
:r !command 

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

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

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


4
それは別の行に挿入しますが、それ自体の行に挿入します。現在の場所に挿入したい!
deshmukh

13

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

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

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

"=system('ls -la')

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

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

4
これが答えです。
ジェイコブ

1
同意した!これは:exe、コマンドに含めることができるよりプログラム的なソリューション(withを含む)を含むため、本当に正しい答えになるはずです。
メタソアラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.