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).

Joernsn
quelle

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

Kaali
quelle
"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.
zu viel php
quelle
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.

Hank Gay
quelle
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.

Justme0
quelle
2

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

Ayaz
quelle
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