Frage

Ich möchte einen Befehl schreiben, der in VIM „das Wort unter dem Cursor“ angibt.Nehmen wir zum Beispiel an, ich befinde mich mit dem Cursor auf einem 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 würde ich gerne in der Lage sein, den Cursor auf „def“ zu bewegen und ihn mit demselben Befehl in „defdef“ zu ändern:

: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
War es hilfreich?

Lösung

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

Entschuldigung, ich hätte in dieser Antwort ausführlicher sein sollen.

Sie können ihm einen Befehl zuordnen, oder diese Tastenfolge für die Faulenzer 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> Dadurch wird der Inhalt des 0. Registers in Ihren Befehl eingefügt.

Sie können hierfür auch einen Befehl eingeben, z. B.:

: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>\)/

Andere Tipps

Im Befehlszeilenmodus STRG+R STRG+W fügt das Wort unter dem Cursor ein.

Siehe die Hilfe für c_CTRL-R für eine Auflistung aller anderen Sonderregister:

:help c_CTRL-R
yiwP

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

P:Vor dem Cursor einfügen.

Sie können dann z. B. Folgendes zuordnen: < ALT > - D zu diesem Befehl:

:nmap < ALT >-D yiwP

Eine andere einfache Möglichkeit, dies zu tun, ist die Verwendung von * Befehl.

Geben Sie im regulären Modus Folgendes ein, wenn Sie sich über einem Wort befinden:

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

* Macht das Suchmuster zum aktuellen Wort (z. B.\<abc\>).

:s// führt eine Ersetzung unter Verwendung des aktuellen Suchmusters durch und \0 in der Ersetzung -Abschnitt ist die übereinstimmende Zeichenfolge.

Sie können dieses Verhalten dann wiederholen, beispielsweise über das Wort „def“, indem Sie entweder dasselbe erneut eingeben oder indem Sie Folgendes eingeben

*@:

@: wiederholt einfach den letzten Ex-Befehl, ohne dass eine <Eingabetaste> erforderlich ist, in diesem Fall die Ersetzung.

Sie können dazu auch ein schnelles Makro aufzeichnen q Befehl

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

Dann wiederholen Sie es nach Herzenslust, indem Sie es eintippen

@d

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

Sie müssen die Backslashes innerhalb der Zuordnung maskieren.Sie können die Ersatzzeichenfolge auch in die Zuordnung einbeziehen.

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

werde tun, was du beschreibst.

ywPxw

wird den Cursor auch zum nächsten Wort bewegen.

@Benutzer11211 hat den einfachsten Weg Um das Wort unter dem Cursor zu duplizieren:

yiwP

Inneres Wort ziehen (bewegt den Cursor an den Wortanfang), Einfügen (vor dem Cursor).

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

[] ist der Cursor

Um es näher zu erläutern...

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

yiwPea

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

NOTIZ:

yiw

ist ein inneres Wort (ohne Leerzeichen)

yaw

ist das Entfernen aller Wörter (einschließlich nachfolgender Leerzeichen).

yawPea

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

geradeaus ----> geradeaus geradeaus[]

" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top