視覚的に選択されたテキストをUNIXコマンドにパイプし、Vimの現在のバッファーに出力を追加する方法

StackOverflow https://stackoverflow.com/questions/230266

  •  04-07-2019
  •  | 
  •  

質問

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 をバッファに追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top