Text zwischen HTML-Tags in vim löschen?

163

ich weiß

di<

wird in einem HTML-Tag selbst gelöscht.

Gibt es eine einfache Möglichkeit, Text zwischen zwei Tags zu löschen?

<span>How can I delete this text?</span>

Vielen Dank!

CMB
quelle

Antworten:

320

ditlöscht den Text zwischen übereinstimmenden XML-Tags. ( itsteht für "inner tag tag block".)

Siehe :h itund :h tag-blocks.

Brian Carper
quelle
30
Und natürlich, citwenn Sie gleich danach schreiben möchten.
Debilski
6
Und das Surround-Plugin ( vim.org/scripts/script.php?script_id=1697 ) ist fantastisch, wenn Sie beispielsweise das umgebende Tag (cst) von einem <p> in ein <div> ändern möchten.
Kris Jenkins
4
Es gibt auch dat (Delete A Tag-Block), das die tatsächlichen Tags enthält. cit, das wie dit ist, aber danach in den Einfügemodus wechselt. Katze, die wie dat ist, aber danach in den Einfügemodus wechselt. Auch di "und di (zum Löschen des inneren doppelten Anführungszeichens bzw. zum Löschen der inneren Klammer.
aiham
@KrisJenkins können Sie ein vollständiges Beispiel zeigen, wie dies erreicht werden kann? Ich kann das nur mit Anführungszeichen machen.
FelikZ
1
Auch vat(oder vit), gefolgt von wiederholtem at(oder it), um die umgebenden Tags schrittweise auszuwählen. (Oder v2atusw.). Dann dlöschen (etc).
Joe Freeman
27
cit
ci"

Zwei der besten Produktivitätsaktivierungsbefehle von vim.

Ich spare viel Zeit und Mühe mit nur diesen beiden.

Chipairon
quelle
3
citwird in diesem Thread behandelt, aber für die Nachwelt ci"wird bis zum nächsten "gefunden gelöscht . Hervorragend geeignet zum Ändern von Klassennamen in HTML-Tags, z. B. <span id="really long annoying-id">- mit dem Cursor zuerst "drücken ci"und neue Zeichen zwischen den Anführungszeichen einfügen.
Alex Moore-Niemi
ciwist auch nützlich, da es das aktuelle Wort löscht; Ich benutze es mehr als citund ci"tatsächlich.
John Sparwasser
2
@ AlexMoore-Niemi: ci"Löscht den Text links bis zum nächsten Zitat und rechts bis zum nächsten Zitat und wechselt dann in den Einfügemodus. ct"ist eigentlich der Befehl zum "Löschen bis zum nächsten" gefunden ". Aber ja, es verhält sich genauso, wenn sich der Cursor unter dem linken Anführungszeichen befindet.
schlimmchen
9

Versuchen Sie dt <, während sich der Cursor auf dem ersten zu löschenden Zeichen befindet. In Ihrem Beispiel das 'H'.

JD Frias
quelle
Auch für andere Situationen sehr nützlich, danke! (dachte, ich denke, es sollte "dt <" sein)
CMB
1
Dies ist zwar technisch gesehen richtig, erfordert jedoch das Navigieren zum ersten Zeichen, das Sie löschen möchten, anstatt nur irgendwo in die Zeile zu springen. Aber wahr ist wahr. :-)
Lyonsinbeta
4

( Cursor auf das erste zu löschende Zeichen ) v / <[Enter] d

Diese Lösung beginnt mit dem ersten Zeichen und wechselt dann in den visuellen Modus ("v"). Anschließend wird nach der nächsten Startklammer ("/ <") gesucht und anschließend die Eingabetaste gedrückt, um die Suche zu beenden.

Zu diesem Zeitpunkt deckt Ihre visuelle Auswahl den zu löschenden Text ab. Drücken Sie d ("d"), um es zu löschen.

Wenn ich dies für eine Reihe von Tags tun müsste, würde ich den Befehl aufzeichnen und ihn mit einigen anderen Suchvorgängen kombinieren, um ihn wiederholbar zu machen. Die Tastenfolge könnte folgendermaßen aussehen:

[ Cursor beim Dateianfang ] qa /> [enter] lv / <[enter] dnq

dann drücken:

20 @ a

um dies für 20 Tags zu tun

Brad
quelle
Früher habe ich c/<[enter]in meinem "Vim-Leben" oft Befehle verwendet , aber jetzt bereue ich das ein bisschen. Sie sehen, die meisten "Vi-Modus" -Plugins für beliebte andere Editoren / IDEs unterstützen diesen speziellen Befehlstyp nicht. Sie unterstützen cit, ci", ct<und aber. Also unterrichte ich wieder.
Pilat
-1

Wenn Sie das Löschen von Text zwischen Flags umgekehrt durchführen möchten, empfehle ich, Vim-Surround zu installieren und auszuführen, dstwodurch das Surround-Tag gelöscht wird

Nick Sarafa
quelle