Ich finde, wenn Sie ein numerisches Präfix eingeben, bevor Sie einen ex-Befehl ausführen, gilt die Konvention, den Befehl einzurichten, um eine Operation über einen Zeilenbereich vorzubereiten. Es wird in der Dokumentation erklärt,
Eine Anzahl von Zeilen
Wenn Sie wissen, wie viele Zeilen Sie ändern möchten, können Sie die Nummer und dann ":" eingeben. Wenn Sie beispielsweise "5:" eingeben, erhalten Sie:
:.,.+4
Jetzt können Sie den Befehl eingeben, den Sie verwenden möchten. Es wird der Bereich "." (aktuelle Zeile) bis ". + 4" (vier Zeilen nach unten). Somit umfasst es fünf Zeilen.
Ich habe es jetzt mit einer benutzerdefinierten Funktion von mir zu tun, dieser:
function! MyAmazingEnhancedDot()
if v:hlsearch == 1
:normal! .n
else
:normal! .j
endif
endfun
Dies ist nur eine Möglichkeit, sich wiederholende Aufgaben zu optimieren, einschließlich des Wiederholens einer Operation in einem Zeilenbereich oder über eine Reihe von Suchübereinstimmungen.
Diese Funktion ist an einen Hotkey gebunden. Wie Alt+ .oder was auch immer.
Mein Ziel ist es, etwas sehr Mächtiges tun zu können: Ich sollte tippen können /varName<CR>ciwnew-var<ESC>n9<Alt+.>
, um 10 Instanzen von varName
to umzubenennen new-var
.
Was tatsächlich passiert, wenn ich dies tue, ist, dass es das Umbenennen nicht durchführt und die 9 Zeilen mit meiner .
gespeicherten Bearbeitungsoperation aus Spalte 0 bearbeitet werden.
Ich kann nur davon ausgehen, dass Vim meine Tastenanschläge folgendermaßen interpretiert : :.,.+8 normal! .n
.
Auf der halb vollen :normal! .j
Glasseite funktioniert der Fall der Bindung tatsächlich, da die j
Bewegung, die keine Wirkung hat, in dieser Situation keine Konsequenz hat. (Ich brauche immer noch das j
, damit es in einem interaktiven Anwendungsfall mit nicht numerischen Präfixen funktioniert.)
Meine Frage ist also, wie ich das Zeilenerweiterungsverhalten überschreiben kann, das Vim auf meine Bindung anwendet. Was fantastisch wäre, wäre, wenn ich das numerische Präfix als Argument oder so etwas einlesen könnte.
quelle
nnoremap <M-.> :<C-u>call MyAmazingEnhancedDot(v:count1)<cr>
und zu überspringencommand -count=1 EDot call MyAmazingEnhancedDot(<count>)
?:9EDot
. Wenn Sie nicht häufig Ex-Befehle verwenden, überspringen Sie diese.