Wie gebe ich "das Wort unter dem Cursor" in der VIM-Befehlszeile an?


83

Ich möchte einen Befehl schreiben, der "das Wort unter dem Cursor" in VIM angibt. Nehmen wir zum Beispiel an, ich habe den Cursor auf ein Wort und lasse es zweimal erscheinen. Wenn das Wort beispielsweise "abc" lautet und ich "abcabc" möchte, könnte ich Folgendes eingeben:

:s/\(abc\)/\1\1/

Aber dann möchte ich den Cursor auf "def" bewegen und mit demselben Befehl in "defdef" ändern können:

:s/\(def\)/\1\1/

Wie kann ich den Befehl in die Befehlszeile schreiben, damit er dies tut?

:s/\(*whatever is under the commandline*\)/\1\1

Antworten:


71

<cword>ist das Wort unter dem Cursor (: help <cword>).

Entschuldigung, ich hätte in dieser Antwort vollständiger sein sollen.

Sie können ihm einen Befehl zuordnen, oder diese Reihe von Tastenanschlägen für die Faulen funktioniert:

b #go to beginning of current word
yw #yank to register

Wenn Sie dann Ihr Muster eingeben, können Sie drücken, <control-r>0<enter>wodurch der Inhalt des 0. Registers in Ihren Befehl eingefügt wird.

Sie können hierfür auch einen Befehl eingeben:

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/

Dadurch wird das gleichzeitige Drücken von '\' und 'w' zugeordnet, um Ihre Befehlszeile durch zu ersetzen

:s/\(<currentword>\)/

17
Ich schätze die große Antwort, aber ich würde wahrscheinlich die vorschlagen , yiwüber bywnur wegen Muskelgedächtnis. In dem Szenario, in dem sich Ihr Cursor bereits auf dem ersten Zeichen im Wort befindet, müssen Sie das weglassen bund einfach ywvs eingeben, damit Sie das in weglassen können . Unfälle können passieren, und das iyiw
Beheben

126

Im Befehlszeilenmodus fügt CTRL+ R CTRL+ Wdas Wort unter den Cursor ein.

In der Hilfe finden Sie c_CTRL-Reine Liste aller anderen Sonderregister:

:help c_CTRL-R

27
yiwP

yiw: Ziehen Sie das innere Wort (das Wort unter dem Cursor). Dieser Befehl bewegt den Cursor auch an den Wortanfang.

P: Vor dem Cursor einfügen.

Sie können dann das eg: < ALT > - Ddiesem Befehl zuordnen:

:nmap < ALT >-D yiwP

3
Die Frage betraf speziell die Angabe von "Das Wort unter dem Cursor" in Vims Kommandozeile, nicht im Kommandomodus
Nathan Fellman,

12

Eine andere einfache Möglichkeit, dies zu tun, ist die Verwendung des *Befehls.

Geben Sie im regulären Modus über ein Wort ein

*:s//\0\0<Enter>

* macht das Suchmuster zum aktuellen Wort (zB \ <abc \>).

:s//Ersetzt das aktuelle Suchmuster und \0im Ersetzungsabschnitt befindet sich die übereinstimmende Zeichenfolge.

Sie können dieses Verhalten dann wiederholen, z. B. über das Wort "def", indem Sie es entweder erneut eingeben oder eingeben

*@:

@: Wiederholt einfach den letzten ex-Befehl, ohne dass eine <Eingabe> erforderlich ist, in diesem Fall die Ersetzung.

Mit dem qBefehl können Sie auch ein schnelles Makro aufzeichnen

qd*:s//\0\0<Enter>q

Wiederholen Sie es dann nach Herzenslust, indem Sie tippen

@d

wenn über ein Wort, das Sie verdoppeln möchten. Da dies nur ein Zeichen weniger als die vorherige Lösung ist, lohnt es sich möglicherweise nicht für Sie - es sei denn, Sie führen zwischen der Wortverdopplung andere Ex-Befehle aus, die das Verhalten von ändern würden@:


1

Sie müssen die Backslashes innerhalb des Mappings umgehen. Sie können auch die Ersetzungszeichenfolge in die Zuordnung aufnehmen.

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>

1
ywPx

wird tun, was Sie beschreiben.

ywPxw

Bewegt den Cursor auch zum nächsten Wort.


Die Frage betraf speziell die Angabe von "Das Wort unter dem Cursor" in Vims Kommandozeile, nicht im Kommandomodus
Nathan Fellman,

Bitte beschreiben Sie solche Antworten in jedem Buchstaben des Befehls.
Vitaly Zdanevich

0

@ user11211 bietet die einfachste Möglichkeit , das Wort unter dem Cursor zu duplizieren:

yiwP

Ziehen Sie das innere Wort (bewegt den Cursor zum Wortanfang), fügen Sie es ein (vor dem Cursor).

z.B. geradeaus [t] vorwärts ----> geradeaus [d] unkompliziert

[] ist der Cursor

Ausarbeiten ...

Sie möchten wahrscheinlich, dass der Cursor Ihrem duplizierten Wort folgt:

yiwPea

geradeaus [t] vorwärts ----> unkompliziert geradeaus []

HINWEIS:

yiw

ist ein inneres Wort (ohne Leerzeichen)

yaw

ist alles Wort ziehen (einschließlich nachgestellten Leerzeichen).

yawPea

ist daher ein doppeltes Wort, einschließlich Leerzeichen und Positionscursor.

geradeaus [t] vorwärts ----> unkompliziert unkompliziert []


Die Frage war , speziell über „das Wort unter dem Cursor“ aus Vims Angabe Kommandozeile , nicht vom Kommandomodus.
Nathan Fellman

1
Sie können jeden der oben genannten normalen Befehle (Befehlsmodus) im Befehlsmodus verwenden, indem Sie ihnen einfach Folgendes voranstellen: normal ... Beispiel: normales yiwP macht dasselbe wie yiwP im normalen Modus. Dies ist natürlich der langsamere Weg, um das zu tun, was Sie gefragt haben.
BBW vor Windows

-1
" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>

Könnten Sie kommentieren, was dies bewirkt?
Nathan Fellman

1
Dies verwendet das nFlag des :substituteBefehls, um auszudrucken, wie oft das Wort unter dem Cursor im aktuellen Puffer erscheint. Ziemlich klug, aber eigentlich keine Antwort auf diese Frage.
Jacob
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.