Как я получаю мелкомодульную отмену в Vim

Я нахожу, что отмена Vim немного слишком крупна. Например, если я ввожу что-то вроде этого:

a // to go into edit mode
to be or not to ve
<esc> // to exit insert mode

Ой! Я сделал опечатку. Я хочу начать отменять так, я нажимаю u, но затем это очищает целую строку. Существует ли способ отменить пословно или познаковый?

15
задан MDCore 24 May 2010 в 07:56
поделиться

3 ответа

Итак, как вы видите по мнению других, то, что вы просите, не существует в Vi (AFAIK).

Отменить отменяет последнее действие. Если вашим последним действием было войти в режим вставки и затем добавить строку, а затем выйти из режима вставки. Это будет отменено, однако, если в режиме по умолчанию вы нажмете клавишу «x», вы удалите 1 символ, или если в визуальном режиме с выделенным текстом, текст будет удален. Если вы нажмете «Отменить», вы восстановите этот символ или текст, который был выбран.

... Вы должны думать об этом как о действии, и действия могут быть автоматически отменены или восстановлены

Как упоминалось ранее, если вы хотите удалить предыдущее слово, вы должны иметь возможность нажать Ctrl + w и удалить предыдущее слово, оставаясь в режиме вставки.

Если вы выйдете из режима вставки, вы можете перемещаться назад по слову с помощью «b» вперед на слово с помощью «w» до конца слова с «е» и можете вырезать (что оставляет вас в режиме вставки) с помощью «c» или удалить с помощью «d». Оба действия cut и delete могут принять движение, следующее за ними, так что вы можете удалить текущее слово / до следующего слова с помощью «dw» или вырезать предыдущее слово с помощью «cb»

Эта концепция становится более полезной, если вы не забываете использовать символ "." команда (в обычном режиме). Эта команда повторяет последнее действие. Я использовал это много раз, чтобы найти и заменить небольшую группу слов в файле (это особенно полезно, если вы параноидально относитесь к изменению слишком большого количества слов).Сценарий будет следующий:

Файл:

Это мой пост

на самом деле это тест

это середина

Это конец

, если я хотел заменить " is "with" was "Я мог бы написать: % s / \ / was / g

, однако, если бы я хотел изменить первую строку, а третью строку «is» на «was» (а я не знал их номеров строк, и я хотел посмотреть, есть ли еще места, которые я хотел бы изменить, это было бы, чтобы я мог напечатать "/ is"

нажимайте "n", пока не дойду до места, которое я хочу заменить, а затем нажмите "cw" и введите "was". Теперь я могу нажимать «n», пока не дойду до другого места, которое я хочу заменить, и нажать «.», И это заменит «is» на «was» (Примечание: моя строка поиска не ограничивалась словом «is», просто два символа "is", поэтому "This" и "this" будут соответствовать в этом случае)

9
ответ дан 1 December 2019 в 00:23
поделиться

В Linux использование control-w в режиме ввода удаляет последнее «слово».

8
ответ дан 1 December 2019 в 00:23
поделиться

Нет, это невозможно и в действительности тоже нет необходимости. У Vim есть миллион способов справиться с этим. Например, попробуйте c b . Или b C . Или b r b . Или T пробел для возврата вместо b . Или c i w .

Конечно, вы можете использовать большинство из этих решений в режиме вставки (сначала нажав CTRL o ) или привязать одно к своей любимой комбинации клавиш (: help map ] и : help imap ).

10
ответ дан 1 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: