Использовать клавишу Backspace для изменения текущей команды в обычном режиме?

9

Иногда при вводе команды в обычном режиме вы можете сделать опечатку, например, если я собираюсь печатать 10dk, я могу случайно начать печатать 19d.

Поскольку команда еще не была завершена / зафиксирована, возможно ли удалить неправильные ключи, используя клавишу Backspace, например: 19d<backspace><backspace>0dkвместо того, чтобы нажимать escape и повторить команду?

Дополнительный вопрос: существует ли термин Vim для структуры данных, которая содержит текущую команду до ее фиксации?

HellaMad
источник
1
Вероятно, это можно спросить в качестве функции в новых версиях!
SibiCoder
3
Связанный: vi.stackexchange.com/questions/570/…
SibiCoder
4
AFAIK невозможен - но, поскольку эти последовательности короткие, я не уверен, какой выгоды получит такая функция. Когда вам нужно повторить всю последовательность, вы, по крайней мере, «вынуждены» повторять ее до тех пор, пока не сделаете таких ошибок;) (то есть - повторение сборок персонажа! Намерение каламбура).
VanLaser
1
@VanLaser Самый страшный кошмар Vimmer'а - это «заставлять» что-то повторять;) Кроме того, я не умею набирать текст и у меня пустая клавиатура, поэтому я нередко перепутываю команду 256 раз, прежде чем получить ее правильно.
HellaMad
4
Что может пойти не так, когда плохая машинистка использует пустую клавиатуру?
Ромен

Ответы:

3

Нет никакого способа сделать это, и это нормально, что нет: команды обычного режима, как правило, довольно короткие и могут быть отменены, Escесли вы запутались.

Возможный обходной путь - использовать :normalкоманду. Это удлиняет процесс, но, например, если вы наберете :normal 10jв командной строке, Vim будет выполняться так, 10jкак если бы вы набирали его в обычном режиме. (См. :h :normal)

Вы также можете добавить эти строки в свой .vimrc:

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

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

Они создают отображение (здесь, F4но используют все, что вы хотите), которое будет вызывать функцию NormalModeCommand().

Функция позволяет вам ввести строку в командной строке, а затем выполнить введенную вами строку как команду обычного режима. Когда вы вводите строку в командной строке, вы можете исправить ее, как и любую другую команду. Конечно, это не идеально, но опять же Вим не предназначен для этого.

statox
источник