Я нахожу, что отмена Vim немного слишком крупна. Например, если я ввожу что-то вроде этого:
a // to go into edit mode
to be or not to ve
<esc> // to exit insert mode
Ой! Я сделал опечатку. Я хочу начать отменять так, я нажимаю u
, но затем это очищает целую строку. Существует ли способ отменить пословно или познаковый?
Итак, как вы видите по мнению других, то, что вы просите, не существует в Vi (AFAIK).
Отменить отменяет последнее действие. Если вашим последним действием было войти в режим вставки и затем добавить строку, а затем выйти из режима вставки. Это будет отменено, однако, если в режиме по умолчанию вы нажмете клавишу «x», вы удалите 1 символ, или если в визуальном режиме с выделенным текстом, текст будет удален. Если вы нажмете «Отменить», вы восстановите этот символ или текст, который был выбран.
... Вы должны думать об этом как о действии, и действия могут быть автоматически отменены или восстановлены
Как упоминалось ранее, если вы хотите удалить предыдущее слово, вы должны иметь возможность нажать Ctrl + w и удалить предыдущее слово, оставаясь в режиме вставки.
Если вы выйдете из режима вставки, вы можете перемещаться назад по слову с помощью «b» вперед на слово с помощью «w» до конца слова с «е» и можете вырезать (что оставляет вас в режиме вставки) с помощью «c» или удалить с помощью «d». Оба действия cut и delete могут принять движение, следующее за ними, так что вы можете удалить текущее слово / до следующего слова с помощью «dw» или вырезать предыдущее слово с помощью «cb»
Эта концепция становится более полезной, если вы не забываете использовать символ "." команда (в обычном режиме). Эта команда повторяет последнее действие. Я использовал это много раз, чтобы найти и заменить небольшую группу слов в файле (это особенно полезно, если вы параноидально относитесь к изменению слишком большого количества слов).Сценарий будет следующий:
Файл:
Это мой пост
на самом деле это тест
это середина
Это конец
, если я хотел заменить " is "with" was "Я мог бы написать:
% s / \
, однако, если бы я хотел изменить первую строку, а третью строку «is» на «was» (а я не знал их номеров строк, и я хотел посмотреть, есть ли еще места, которые я хотел бы изменить, это было бы, чтобы я мог напечатать "/ is"
нажимайте "n", пока не дойду до места, которое я хочу заменить, а затем нажмите "cw" и введите "was". Теперь я могу нажимать «n», пока не дойду до другого места, которое я хочу заменить, и нажать «.», И это заменит «is» на «was» (Примечание: моя строка поиска не ограничивалась словом «is», просто два символа "is", поэтому "This" и "this" будут соответствовать в этом случае)
В Linux использование control-w в режиме ввода удаляет последнее «слово».
Нет, это невозможно и в действительности тоже нет необходимости. У Vim есть миллион способов справиться с этим. Например, попробуйте c b . Или b C . Или b r b . Или T пробел для возврата вместо b . Или c i w .
Конечно, вы можете использовать большинство из этих решений в режиме вставки (сначала нажав CTRL o ) или привязать одно к своей любимой комбинации клавиш (: help map
] и : help imap
).