Geben Sie im Befehlszeilenmodus die Befehle <Esc> und Strg ein


11

Stellen Sie sich vor, Sie möchten das folgende Wort zitieren. Wenn dies |die Cursorposition ist, können Sie das Wort einfach cw""<Esc>Paus dem Normalmodus zitieren .

|below

Ich möchte das gleiche Verhalten im Befehlszeilenmodus erreichen. Meine Frage ist, wie ich dem Befehlszeilenmodus sagen kann, dass ich ein eingeben möchte <Esc>. Ich habe versucht :norm cw""<Esc>Pund einige andere Variationen, aber ich bekomme nur ""<Esc>Pstatt "below".

Im Zusammenhang damit möchte ich wissen, wie ich Befehlszeilenmodus-Typ-Strg-Befehle erstellen kann. Zum Beispiel könnte ich cw"<C-r>""<Esc>stattdessen das oben genannte Wort mit zitieren . Aber dann würde ich die Befehlszeile brauchen, um <C-r>für mich zu tippen . Wie kann ich das machen?


1
Genau wie <C-x><C-e>in readline, um die Befehlszeile zu bearbeiten $EDITOR, müssen Sie <C-f>in Vim das Befehlszeilenfenster öffnen. Siehe :help cmdline-window.
Romainl

Antworten:


11

<C-v>ist das, wonach Sie suchen. Sie können damit Literalzeichen eingeben (z. B. ein Literal Escanstelle der Zeichenfolge "Esc"), ohne dass Sie etwas maskieren müssen.

:norm cw""<C-v><Esc>P

wird angezeigt als:

:norm cw""^[P

und wird tun, was Sie wollen (dh das Wort zitieren). Sie können dies auch mit anderen <C-?>Zuordnungen verwenden. Zum Beispiel Ihre zweite Anfrage:

:norm cw"<C-v><C-r>""

wird angezeigt als:

:norm cw"^R""

Und wird das gleiche wie oben ergeben. Das Extra muss Escam Ende nicht eingefügt werden .


10

Dies liegt daran, dass Sondertasten wie <Esc>nicht in normalBefehle übersetzt werden und wie gedrückt behandelt werden <Esc>. Um dies zu beheben, können Sie einen execBefehl verwenden. Wie so:

:exec "norm cw\"\"\<Esc>P"

Beachten Sie, dass Sie vor und in Anführungszeichen einen Backslash setzen müssen. Die <Esc>Verwendung von einfachen Anführungszeichen anstelle von doppelten Anführungszeichen funktioniert nicht.


Funktioniert dies auch für Strg-Befehle? Wie soll ich sie in den Befehl schreiben?
Gonçalo Ribeiro

Ja, es sollte funktionieren. Sie können sie so schreiben:"\<C-{insert key}>"
EvergreenTree

2

Der Befehlszeilenmodus ist anders. Sie können dort nicht dieselben Bearbeitungsbefehle (im normalen Modus) verwenden. Eine Liste der Befehle finden Sie unter :help c_CTRL-V.

Jetzt gibt es das Befehlszeilenfenster ( :help command-line-window), das über den q:Normal- und den <C-F>Befehlszeilenmodus aufgerufen werden kann. In diesem Fenster können Sie alle normalen Befehle und Zuordnungen verwenden, sodass dies Option 1 wäre.

Option 2 sind spezielle Zuordnungen für den Befehlszeilenmodus. Wie gesagt, Sie können den Ansatz nicht über :normalet al. Der Schlüssel zur Definition dieser ist das :help c_CTRL-\_eMapping, das "[s] {expr} auswertet und [s] die gesamte Befehlszeile durch das Ergebnis ersetzt". Hier ist ein einfaches Beispiel, das nur am Ende der Befehlszeile korrekt funktioniert:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
Ich glaube nicht, dass das OP eine Zuordnung für die Befehlszeile erstellen wollte, sondern eine Zuordnung über die Befehlszeile ausführen sollte.
EvergreenTree
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.