Отменить в режиме вставки

23

Есть ли команда для отмены последней операции, выполненной в режиме вставки?

Я просто вставил текст из неправильного регистра, используя <C-r>, и у меня есть два варианта:

  1. Удалите вручную то, что я только что вставил, и начните все сначала.
  2. Переключитесь в нормальный режим, нажмите uи потеряйте текст, который я набрал, прежде чем нажать <C-r>.

Есть ли способ лучше?

Зоол
источник

Ответы:

16

Vim предлагает ограниченную возможность указать область отмены изменения с помощью Ctrl-G uкоманды, которая нарушает последовательность отмен. Видеть

:help i_CTRL-G_u

В вашем случае решение будет переназначить <C-R>так:

:inoremap <C-R> <C-G>u<C-R>

Тогда ввод <C-O>uбудет отменять только те изменения, которые были сделаны после ввода <C-R>. Видеть

:help i_CTRL-O
garyjohn
источник
1
Это замечательно, я не знал об этой команде. Между вводом <C-O>uи выводом результата на экран довольно большая задержка (около 4 секунд), есть идеи, как мне от этого избавиться?
zool
Я тоже это заметил. Я не знаю; Я постараюсь выяснить.
garyjohn
Привет, возможно, вы имели в виду <CR> (возврат каретки) вместо <CR> (ctrl-r)?
Деруэнт
Нет. Первоначальный вопрос касался поведения <CR>, так что это то, что использует отображение. Однако вы можете заменить <CR> на <CR> в этом отображении, чтобы последовательность отмены была прервана вместо <CR>. Больше примеров можно найти по адресу :help i_CTRL-G_u.
garyjohn
6

Из режима вставки:

  1. Если ваш вставленный текст меньше, чем одна строка (что подразумевает ваша вторая точка), просто нажмите, <C-u>чтобы удалить все символы перед курсором в текущей строке.

  2. Если вставляемый текст более одной строки, ваше второе решение будет работать лучше, адаптированная следующим образом : <C-o>u.

Обе точки выше начнут и останутся - или закончат - в режиме вставки; они фактически совпадают с вашими предлагаемыми решениями, просто сделаны короче :)

VanLaser
источник
6

Вы можете попробовать <C-w>(удаляет слово слева) или <C-u>(очистить символы перед курсором при однократном нажатии, удалить разрыв строки при повторном нажатии). Смотрите :help i_CTRL-Wи :help i_CTRL-U.

Если вы вставляете много данных из регистра, конечно, быстрее отменить ваши изменения, вы можете использовать <C-o>для этого команду insert-normal-mode (выполните одну команду в обычном режиме, а затем вернитесь в режим вставки).

В общем случае полезно разделить ваши правки на мелкие фрагменты, часто возвращаясь к обычному режиму, чтобы у вас были возможности отменить все детали.

cbaumhardt
источник