Wie ersetze ich ein einzelnes Wort unter dem Cursor?

144

Wie ersetze ich ein Wort unter dem Cursor in Vim?

Anstatt also mit dwdann idann dem Wort und dann Escist es eine einfachere Kombination das Wort unter dem Cursor zu ersetzen?

sayth
quelle

Antworten:

251
ciw

(inneres Wort ändern) ändert das gesamte Wort unter dem Cursor. Vergleichen mit

cw

Dadurch wird nur das Wort von der aktuellen Cursorposition geändert . Weitere Informationen finden Sie in dieser SO Frage / Antwort.

Brian Agnew
quelle
Wie gehe ich mit der Situation um, wenn das Wort Punkte oder Schrägstriche enthält (z. B. /usr/bin/bashoder 1222.333)? Es sieht aus wie vim interpretiert /und .als Ende des Wortes und wählt nicht die gesamte Zeichenfolge aus.
Alexander Cska
85

Ich möchte oft ein Wort durch ein anderes ersetzen, das ich von einem anderen Ort gezogen habe. Das Problem mit den anderen Lösungen besteht darin , dass , wenn Sie versuchen , ein Wort zu ändern, dann die nächste Paste wird sein , dass Wort , dass Sie mit gelöscht cw.

Versuche Folgendes:

1 "This first word should overwrite the second"

yiw     yank inner word (copy word under cursor, say "first").
...     Move the cursor to another word (say "second").
viwp    select "second", then replace it with "first". 

Ich hoffe, das haben Sie gesucht.

Ätherisch
quelle
7
Es funktioniert gut, aber nur, wenn ein Austausch erforderlich ist once. Wenn ich ein paar second' by zuerst ersetzen muss (in Ihrem Beispiel), wird das kopierte Wort secondnach dem ersten Ersetzen.
ViFI
32

ciw

c   change
iw  inner word

Dadurch wird das Wort unter dem Cursor gelöscht (auch wenn sich der Cursor irgendwo in der Mitte des Wortes befindet) und der Einfügemodus aktiviert.


Siehe auch die Dokumentation von Vim als Referenz:

:help c
:help text-objects
Xophmeister
quelle
17

Wenn Sie ein Wort durch ein zuvor gezogenes Wort ändern möchten, gibt es eine andere Lösung viwp(sobald Sie das erste Wort gerissen haben).

ciwEntfernt das vorherige Wort und versetzt Sie in den Einfügemodus, in dem es sich befand. Aber dann können Sie ctrl+r, 0den Inhalt von Register 0 (das das zuvor gerissene Wort enthält) einfügen.

So:

yiw
[move to next word]
ciw
ctrl+r
0

Dies funktioniert besser als viwpweil Sie nach dem ersten Gebrauch den Austausch mit wiederholt wiederholen können .. Es wechselt auch nicht in den visuellen Modus und hebt kurz hervor.

Connor
quelle
1
Sie sind sich nicht sicher, was Sie damit meinen, dass der Modus nicht geändert wird. Das Gegenteil scheint der Fall zu sein, aber vielleicht wollten Sie genau das, um im Einfügemodus zu bleiben. Ein großer Vorteil ist jedoch, dass dies (im Gegensatz zu viwp) mehrmals mit nur einem Ruck durchgeführt werden kann. Vielen Dank!
Palo
Oh, du hast recht, ich dachte daran, in den visuellen Modus zu wechseln, bearbeitet. Ich wusste nicht, dass dies eine Einschränkung von ist viwp- auch wenn .es nicht dupliziert wird.
Connor
3
Dies ist bei weitem die beste Lösung, wenn wir das Ersatzwort bereits weggerissen haben.
mljrg
1
Das ist die Antwort! Die Fähigkeit, damit zu arbeiten, .ist großartig!
izzy
1

Versuchen Sie cw- wie in "Wort ändern".

Verwenden Sie http://linuxmoz.com/vi-commands-cheat-sheet/ oder einen anderen Spickzettel als Referenz.

Kosma Dunikowski
quelle
1
Das funktioniert, aber es werden nur die Zeichen rechts vom Cursor geändert
Brian Agnew