So ersetzen Sie Text zwischen Anführungszeichen in vi

106

Angenommen, ich habe diese Codezeile:

$query = "SELECT * FROM table";

Gibt es in vi / vim einen Befehl, mit dem alles zwischen Anführungszeichen sofort gelöscht und der Cursor zwischen ihnen positioniert werden kann, damit ich mit der Eingabe beginnen kann?

Nikola
quelle

Antworten:

182

Verwenden Sie ci", was bedeutet: Ändern Sie, was in den doppelten Anführungszeichen steht.

Sie können auch andere Textobjekte auf ähnliche Weise bearbeiten, z.

  • ci' - innerhalb der einfachen Anführungszeichen ändern
  • ciw - innerhalb eines Wortes ändern
  • ci( - in Klammern ändern
  • dit - Löschen innerhalb eines HTML-Tags usw.

Mehr über verschiedene vim-Textobjekte hier .

Eugene Yarmash
quelle
2
Scheint nur mit zu arbeiten vim, aber NICHT vi. (Nicht sicher)
Ivan Chau
Für mich funktioniert dies nur in der aktuellen Zeile, nicht irgendwo im Dokument.
Und schließlich
Welcher Befehl würde dies dann rückwärts tun? Dies ist der Fall, wenn Sie Text in Anführungszeichen hinter dem Cursor ersetzen möchten.
dtburgess
1
@dtburgess: Ein Weg ist F"ci".
Eugene Yarmash
ci 'und ci "funktionieren gut, aber ci (funktioniert bei mir nicht. Hat jemand eine Idee warum?
Vram Vardanian
24

Sie können zwischen Anführungszeichen wählen und dann mit (( d), change ( c) usw. löschen

vi"

Ebenso können Sie geschweifte Klammern, Klammern, XML-Elemente usw. wie folgt ersetzen:

vi(
vi{
vit

oder einfach ändern / löschen, führen Sie die entsprechenden di", ci"usw. Durch Einsetzen afür iWillen der umliegenden Elemente umfasst (so dass Sie die Klammern markieren oder ändern und Inhalte, zum Beispiel)

Brian Agnew
quelle
5

Ich habe ein Plugin erstellt vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Es bietet Textobjekte für die nächsten Anführungszeichenpaare eines beliebigen Typs und unterstützt Anführungszeichen, die sich über mehrere Zeilen erstrecken. Wenn Sie nur iqoder verwenden aq, können Sie den Inhalt von einfachen ('), doppelten (") oder hinteren (`) Anführungszeichen bearbeiten, die derzeit den Cursor umgeben, sich vor oder hinter dem Cursor befinden (in dieser Reihenfolge). Mit anderen Worten, es springt bei Bedarf vorwärts oder rückwärts, um die Anführungszeichen zu erreichen.

Es ist einfacher zu verstehen, wenn man sich Beispiele ansieht (der Cursor wird mit angezeigt |):

  1. Vorher foo '1, |2, 3' bar;; nach dem Drücken von diq:foo '|' bar
  2. Vorher foo| '1, 2, 3' bar;; nach dem Drücken von diq:foo '|' bar
  3. Vorher foo '1, 2, 3' |bar;; nach dem Drücken von diq:foo '|' bar
  4. Vorher foo '1, |2, 3' bar;; nach dem Drücken von daq:foo | bar
  5. Vorher foo| '1, 2, 3' bar;; nach dem Drücken von daq:foo | bar
  6. Vorher foo '1, 2, 3' |bar;; nach dem Drücken von daq:foo | bar

Die obigen Beispiele gelten für einfache Anführungszeichen. Das Plugin funktioniert für doppelte (") und hintere (`) Anführungszeichen genauso.

Sie können auch alle anderen Operatoren: ciq, diq, yiq, viq, usw.

Weitere Informationen finden Sie auf der oben verlinkten Github-Seite.

Anton Beloglazov
quelle
3

Von bereits innerhalb der Anführungszeichen können Sie tun

di"

Lesen Sie es als "löschen"

Sam Friedlich
quelle
6
Der Cursor muss sich nicht innerhalb der Zeichenfolge in doppelten Anführungszeichen befinden, da der Befehl standardmäßig die erste Zeichenfolge in der Zeile
ändert
1
Danke, das ist sehr gut zu wissen! Nur um zu zeigen, dass ich die Dinge etwas genauer lesen sollte. :)
Sam Peacey
3

Zusätzlich zu Brians Antwort können Sie den neuen Wert auch p(einfügen) und y(ziehen). Wenn Sie also den Wert in Anführungszeichen durch einen anderen Wert ersetzen möchten, können Sie yi"die Auswahl, die Sie kopieren möchten, vi"für den Bereich auswählen dass Sie ersetzen möchten und dann nur p, um den Wert richtig zu ersetzen.

Ulisses Caon
quelle
0

Die gewählte Antwort ist NUR für ViM geeignet, NICHT jedoch für vi. Die Frage ist ebenfalls ungenau, da der Autor die ursprüngliche Position des Cursors nicht erwähnt hat. Wenn wir annehmen, dass sich der Cursor innerhalb der doppelten Anführungszeichen befindet, lautet die Antwort für vi:

T"ct"

Wo:

T "- gehe gleich nach dem" Zeichen zurück

c - Befehl ändern

t "- Geben Sie die Endposition für den Befehl c an, an der keine Zeichen mehr gelöscht werden sollen, dh der zu ändernde Bereich

user1337
quelle