2009-09-04 5 views
86

Im normalen Modus kann ich Ctrl + E getroffen, die den Rest des aktuellen Worts löscht und Modus einfügen geht an.Wie lösche ich ein Wort und gehe in den Einfügemodus in Vim?

Ich möchte das gesamte Wort löschen, unabhängig von der Cursorposition (innerhalb des Wortes natürlich). Außerdem - wie kann ich das aktuelle Wort durch das ersetzen, was im Standardregister steht?

Antwort

146

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

Die "inneren" und "a" -Befehle sind großartig in Vim, 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 merken, versuchen Sie: "change inner {block" und "change a {block".

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

+0

" caw "kann anstelle von" ciw "gleiche Funktionalität verwendet werden. – Amjith

+0

Während "caw" und "ciw" das gesamte Wort ersetzen, wechselt einfach "cw" von der aktuellen Cursorposition zum Ende des aktuellen Wortes. –

+0

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

8

Für die zweite Frage: bPldw

Dies wird, um, nehmen Sie an den Anfang des aktuellen Worts, legen Sie die Standard-Register vor dem Cursor, um zum nächsten Zeichen gehen (unter vorbei an dem Ende des Textes, den Sie gerade eingefügt haben) und löschen Sie den Rest des Wortes.

+5

löscht das auch den Raum nach dem Wort. Sollte "bPlde" sein. – 0x89

+9

Nein, sollte 'viwp' sein – aehlke

2

Oder könnten Sie vielleicht die Tastenfolge verwenden bdwi das aktuelle Wort zu löschen und in INSERT-Modus.

+1

Sie können 'bcw' verwenden, um zum Anfang des aktuellen Wortes zu gehen und dann das Wort zu ändern, was den Einfügemodus belässt. –

+0

Wenn sich der Cursor bereits auf dem ersten Zeichen des Worts befindet, wird das vorherige Wort gelöscht. –

+3

@WerrenPena Verwenden Sie in diesem Fall einfach 'dwi'. Seien Sie vorsichtig, dass die Polizei es nicht bemerkt, da DWI in den meisten Staaten illegal ist. –

18

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. 
+2

Wie würde man das mehrmals hintereinander machen? Bei jedem Einfügen füllt sich der Puffer mit dem Wort, das ich eingefügt habe. –

+1

@BenGartner Gefunden bei [Vim Tipps wiki] (http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text#Alternate_method): Verwenden Sie 'Yiw', um das aktuelle Wort zu kopieren, den Cursor auf das Wort zu ersetzen, verwenden Sie' ciw 0'. Danach können Sie den Cursor auf das nächste Wort setzen und '' 'verwenden, um die Ersetzung zu wiederholen. – siegi

+0

@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'. 'a' kann exakter Text oder ein regulärer Ausdruck sein, und' b' ist das, was Sie alle Übereinstimmungen von 'a' mit ersetzen werden. Sie können Regexes mit dem '/' -Modus von vim testen. Ersetzen Sie "%" durch eine Zeilennummer oder einen Bereich, wenn Sie nicht alle Zeilen ersetzen möchten. –

2

Für die erste Frage, bcw auch funktionieren. Es bedeutet "b ack zum Anfang des Wortes, c hange w ord". Aber ich denke ciw ist mehr einprägsam, was bedeutet "c hange i nner w ord", nur ein Schritt.

Für die zweite Frage zu "Ersetzen mit Paste" ist meine Lösung "_diwP. Es d elete i nner w ord zu einem Register, das Sie nicht interessieren und p aste den Inhalt des Standardregisters. Ein Vorteil ist, dass Sie das Standardregister mehrmals einfügen können, da es nicht verschmutzt wäre. Es ist ein kleiner Komplex, so dass ich es als nnoremap ,r "_diwP abbilde.

Verwandte Themen