視覚的に選択されたテキストをUNIXコマンドにパイプし、Vimの現在のバッファーに出力を追加する方法
質問
Vimを使用して、ビジュアルモードで選択したテキストをUNIXコマンドにパイプし、現在のファイルの最後に出力を追加しようとしています。たとえば、次のようなSQLコマンドがあるとします。
SELECT * FROM mytable;
次のようなことをしたい:
<ESC>
V " select text
:'<,'>!mysql -uuser -ppass mydb
しかし、現在選択されているテキストを出力で上書きするのではなく、出力をファイルの最後に追加したいと思います。あなたはおそらくこれがどこに向かっているのかを見るでしょう。 Vimを単純なSQLエディターとして使用することに取り組んでいます。そうすれば、SQLコードを編集、調整、テストするためにVimを離れる必要はありません。
解決
選択したテキストをファイルの最後にコピーして、コピーを選択してコマンドを実行する方法は?同じコマンドを何度も繰り返したくない場合は、 q
を使用してシーケンスを記録するか、新しいコマンドを追加できます。私は次のように後者を試しました:
:com -range C <line1>,<line2>yank | $ | put | .,$ !rev
これを使用して、いくつかの行を選択し、:C
と入力できます。これにより、最初に選択範囲がヤンクされ、ファイルの最後に移動して、ヤンクされたテキストが貼り付けられ、新しいテキストに対してコマンド(この場合は rev
)が実行されます。
他のヒント
よりプログラム的なアプローチを希望する場合は、次のようにできます
:call append(line("func! GetSelectedText()
normal gv"xy
let result = getreg("x")
normal gv
return result
endfunc
quot;), system("command", GetSelectedText()))
GetSelectedText
は再利用可能な関数です:
試用
:r | YourCommand
例:
:r ! echo foo
foo
をバッファに追加します。
所属していません StackOverflow