Rücktaste verwenden, um den aktuellen Befehl im normalen Modus zu ändern?

9

Manchmal, wenn Sie einen Befehl im normalen Modus 10dkeingeben, können Sie einen Tippfehler machen. Wenn ich beispielsweise beabsichtige zu tippen , kann ich versehentlich mit dem Tippen beginnen 19d.

Ist es möglich, die falschen Schlüssel über die Rücktaste zu löschen 19d<backspace><backspace>0dk, anstatt den Befehl zu drücken und erneut zu wiederholen , da der Befehl noch nicht abgeschlossen / festgeschrieben wurde ?

Nebenfrage: Gibt es einen Vim-Begriff für die Datenstruktur, der den aktuellen Befehl enthält, bevor er festgeschrieben wird?

HellaMad
quelle
1
Wahrscheinlich kann dies in neueren Versionen als Feature abgefragt werden!
SibiCoder
3
Siehe auch
SibiCoder
4
AFAIK nicht möglich - aber da diese Sequenzen kurz sind, bin ich mir nicht sicher, welchen Gewinn ein solches Feature erzielen würde. Wenn Sie die gesamte Sequenz wiederholen müssen, sind Sie zumindest "gezwungen", sie zu wiederholen, bis Sie keine derartigen Fehler mehr machen;) (dh - Wiederholen des Build-Charakters! Wortspiel beabsichtigt).
VanLaser
1
@VanLaser Der schlimmste Albtraum eines Vimmers ist, "gezwungen" zu werden, etwas zu wiederholen;) Außerdem lutsche ich am Tippen und habe eine leere Tastatur, so dass es nicht ungewöhnlich ist, dass ich einen Befehl 256 Mal durcheinander bringe, bevor ich ihn richtig mache.
HellaMad
4
Was könnte schief gehen, wenn ein schlechter Schreibkraft eine leere Tastatur verwendet?
Romainl

Antworten:

3

Es gibt keine Möglichkeit, dies zu tun, und es ist normal, dass dies nicht der Fall ist: Befehle im normalen Modus sind im Allgemeinen ziemlich kurz und können abgebrochen werden, Escwenn Sie es durcheinander bringen.

Eine mögliche Problemumgehung wäre die Verwendung des :normalBefehls. Dies verlängert den Vorgang, aber wenn Sie beispielsweise :normal 10jdie Befehlszeile eingeben, wird Vim so ausgeführt, 10jals hätten Sie ihn im normalen Modus eingegeben. (Siehe :h :normal)

Sie können diese Zeilen auch zu Ihrem hinzufügen .vimrc:

nnoremap <F4> :call NormalModeCommand()<CR>

function! NormalModeCommand()
    let command = input("Normal command: ")
    execute "normal " . command
endfunction

Sie erstellen ein Mapping (hier F4aber verwenden Sie, was Sie wollen), das die Funktion aufruft NormalModeCommand().

Mit dieser Funktion können Sie eine Zeichenfolge in die Befehlszeile eingeben und dann die Zeichenfolge ausführen, die Sie als Befehl für den normalen Modus eingegeben haben. Während Sie die Zeichenfolge in die Befehlszeile eingeben, können Sie sie wie jeden anderen Befehl korrigieren. Natürlich ist es nicht ideal, aber auch hier ist Vim nicht dazu gedacht.

statox
quelle