Wie lösche ich ein Wort und gehe in Vim in den Einfügemodus?


98

Im normalen Modus kann ich Ctrl+ Edrücken, wodurch der Rest des aktuellen Wortes gelöscht wird und in den Einfügemodus gewechselt wird.

Ich möchte das gesamte Wort löschen, unabhängig von der Cursorposition (natürlich innerhalb des Wortes).

Antworten:


164

Sie können "inneres Wort ändern" verwenden, indem Sie "ciw" eingeben, um ein Wort zu löschen, auf dem sich Ihr Cursor befindet.

Die Befehle "inner" und "a" sind in Vim großartig. Versuchen Sie auch "ci {" in einem {} Block oder "ca {", wenn Sie auch die {} Zeichen entfernen möchten. Um diese Befehle ins Englische zu übersetzen, um sie besser zu speichern, versuchen Sie: "change inner {block" und "change a {block".

Dokumentation unter http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects


"caw" kann anstelle von "ciw" der gleichen Funktionalität verwendet werden.
Amjith

Während 'caw' und 'ciw' das gesamte Wort ersetzen, ändert sich einfach 'cw' von der aktuellen Cursorposition bis zum Ende des aktuellen Wortes.
Drew Stephens

Ich habe die Antwort von "co {" zu "ca {" bearbeitet, wie durch den Kommentar von jinxed_coders erinnert. Meine alte Anpassung implementiert "(a) <>" - Befehle als "(o) uter <>" - Befehle.
Kaali

19
ciwund cawsind nicht genau gleich: ciwlöscht nur das Wort, cawlöscht auch den nachgestellten Leerzeichen.
Roberto Bonvallet

5
: Helfen Sie Objekten in vim, mehr über diese Art von Auswahl zu lesen.
Aaron

19

Antwort auf Ihre Folgefrage: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.

3
Wie würde man das mehrmals hintereinander machen? Jedes Mal, wenn Sie einfügen, füllt sich der Puffer mit dem Wort, das ich eingefügt habe.
Ben Gartner

1
@BenGartner Gefunden im Vim Tips Wiki : Verwenden Sie diese Option, yiwum das aktuelle Wort zu kopieren, setzen Sie den Cursor auf das zu ersetzende Wort und verwenden Sie es ciw<C-r>0. Danach können Sie den Cursor auf das nächste Wort setzen und .den Ersatz wiederholen.
Siegi

@BenGartner Wenn Sie nur versuchen, alle Instanzen von WORD_A durch WORD_B zu ersetzen, verwenden Sie einfach den Ex-Modus von vim :%s/a/b/g. akann exakter Text oder ein regulärer Ausdruck sein und bersetzt alle Übereinstimmungen adurch. Sie können Regexes im vim- /Modus testen . Ersetzen Sie %durch eine Zeilennummer oder einen Bereich, wenn Sie nicht in allen Zeilen ersetzen möchten.
Braden Best

8

Zur zweiten Frage: bPldw

Dadurch gelangen Sie in der Reihenfolge zum Anfang des aktuellen Wortes, fügen das Standardregister vor dem Cursor ein, gehen zum nächsten Zeichen (das Sie über das Ende des gerade eingefügten Textes hinausführt) und löschen den Rest von das Wort.


5
Dadurch wird auch das Leerzeichen nach dem Wort gelöscht. Sollte sein bPlde.
0x89

10
Nein, sollte seinviwp
aehlke

3

Für die erste Frage bcwauch arbeiten. Es bedeutet " back to the begin of word, change word". Aber ich denke, es ciwist einprägsamer, was " change inner word" bedeutet, nur einen Schritt.

Für die zweite Frage zum Thema "Ersetzen durch Paste" lautet meine Lösung "_diwP. Es delete inner word zu einem Register Sie kümmern sich nicht und pAste den Inhalt des Standardregisters. Ein Vorteil ist, dass Sie das Standardregister viele Male einfügen können, da es nicht verschmutzt wäre. Es ist ein kleiner Komplex, also ordne ich ihn als nnoremap ,r "_diwP.


2

Oder Sie können die Tastenfolge verwenden bdwi, um das aktuelle Wort zu löschen und in den INSERT-Modus zu wechseln.


1
Sie können bcwzum Anfang des aktuellen Wortes gehen und dann das Wort ändern, wodurch Sie den Einfügemodus verlassen.
Hank Gay

Befindet sich Ihr Cursor bereits auf dem ersten Zeichen des Wortes, wird das vorherige Wort gelöscht.
Warren Pena

3
@ WarrenPena In diesem Fall verwenden Sie einfach dwi. Seien Sie nur vorsichtig, dass die Polizei es nicht bemerkt, da DWI in den meisten Staaten illegal ist.
Braden Best
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.