7

Vim を使用して、ビジュアル モードで選択したテキストを UNIX コマンドにパイプし、出力を現在のファイルの末尾に追加しようとしています。たとえば、次のような SQL コマンドがあるとします。

SELECT * FROM mytable;

次のようなことをしたい:

<ESC>
V                 " select text
:'<,'>!mysql -uuser -ppass mydb

しかし、出力で現在選択されているテキストを上書きする代わりに、出力をファイルの最後に追加したいと考えています。おそらく、これがどこに向かっているのかがわかります。私は Vim を単純な SQL エディターとして使用することに取り組んでいます。そうすれば、SQL コードを編集、微調整、テストするために Vim から離れる必要がなくなります。

4

3 に答える 3

7

選択したテキストをファイルの最後にコピーし、コピーを選択してコマンドを実行するのはどうですか?同じコマンドを何度も繰り返したくない場合はq、新しいコマンドを使用または追加して、シーケンスを記録できます。私は後者を次のように試しました:

:com -range C <line1>,<line2>yank | $ | put | .,$ !rev

これを使用すると、いくつかの行を選択して、と入力できます:C。これにより、最初に選択範囲がヤンクされ、次にファイルの最後に移動し、ヤンクされたテキストが貼り付けrevられ、新しいテキストに対してコマンド(この場合)が実行されます。

于 2008-10-23T16:51:51.430 に答える
1

よりプログラム的なアプローチを好む場合は、

:call append(line("$"), system("command", GetSelectedText()))

再利用可能なGetSelectedText関数は次のとおりです。

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc
于 2012-09-13T22:42:16.847 に答える
0

試す

:r | YourCommand

例えば:

:r ! echo foo

fooバッファに追加します。

于 2011-02-08T15:02:19.527 に答える