Wie man Rohr visuell Text zu einem UNIX-Befehl ausgewählt und hängen Ausgabe an aktuellen Puffer in Vim

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

  •  04-07-2019
  •  | 
  •  

Frage

Mit Vim, ich versuche zu Rohr Text im visuellen Modus auf einen Befehl UNIX ausgewählt und hat die Ausgabe an das Ende der aktuellen Datei angehängt. Zum Beispiel, sagen wir einen SQL-Befehl haben, wie:

SELECT * FROM mytable;

Ich möchte so etwas wie die folgenden Funktionen ausführen:

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

Aber anstatt die Ausgabe den aktuell ausgewählten Text überschrieben zu haben, würde Ich mag die Ausgabe an das Ende der Datei angehängt haben. Sie sehen wahrscheinlich, wohin dieses geht. Ich arbeite an Vim als einfacher SQL-Editor. Auf diese Weise habe ich zu Vim nicht verlassen zu bearbeiten, optimieren, Test SQL-Code.

War es hilfreich?

Lösung

Wie wäre es den ausgewählten Text an das Ende der Datei zu kopieren, die Kopie auswählen und den Befehl ausführen? Wenn Sie nicht die gleichen Befehle immer und immer wieder wiederholen möchten, können Sie die Reihenfolge aufnehmen, indem q verwenden oder einen neuen Befehl hinzuzufügen. Ich habe die letztere versucht, wie folgt:

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

Damit können Sie ein paar Zeilen auswählen und dann :C eingeben. Dies wird zunächst die Auswahl zerrt, dann gehen Sie zum Ende der Datei, die zerrte Text einfügen und den Befehl (rev in diesem Fall) über den neuen Text ausgeführt werden.

Andere Tipps

Wenn Sie mehr programmatischen Ansatz bevorzugen, können Sie

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

wo GetSelectedText ist die wiederverwendbare Funktion:

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc

Versuchen

:r | YourCommand

Zum Beispiel:

:r ! echo foo

fügt foo zu Ihrem Puffer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top