При использовании u
или CTL-R
для отмены или повторного редактирования в vim я, кажется, изменяю фрагменты текста, а не только последнее нажатие клавиши.
От чего зависит размер фрагмента, который считается единичным редактированием?
источник
При использовании u
или CTL-R
для отмены или повторного редактирования в vim я, кажется, изменяю фрагменты текста, а не только последнее нажатие клавиши.
От чего зависит размер фрагмента, который считается единичным редактированием?
Вы ищете определение undo-blocks
.
От :h undo-blocks
:
Одна команда отмены обычно отменяет набранную команду, независимо от того, сколько изменений она вносит. Эта последовательность отменяемых изменений образует блок отмены. Таким образом, если набранные клавиши вызывают функцию, все команды в функции отменяются вместе.
Этот же блок используется для redo
. От :h redo
:
Последние изменения запоминаются. Вы можете использовать команды отмены и возврата выше, чтобы вернуть текст к тому, что было до каждого изменения. Вы также можете применить изменения снова, вернув текст перед отменой.
CTRL-G u
в режиме вставки, что полезно, если у вас есть несколько макросов режима вставки.Модальные редактирования Vim, часто рассматриваются как оператор (например
c
,d
...) применяется над движением (напримерiw
,w
,}
, ...). В качестве замечательного продукта Vim получает толстые отменить. В то время как другим редакторам приходится делать какие-то догадки, чтобы превратить множество маленьких откатов в блоки отмены, Vim делает это естественно. Еще один побочный эффект - это дает вам оператор повтора.
(он же точка).В вашем вопросе конкретно упоминаются нажатия клавиш, поэтому я предполагаю, что вы хотите знать, как отменить небольшие изменения в режиме вставки. Ответ в том, что это не «путь Vim». «The Vim Way» означает, что вы будете в режиме вставки для короткой серии за раз. Это означает, что при ошибках в режиме вставки вы часто просто выходите в обычный режим и исправляете текст или просто отменяете его
u
и переписываете текст.Иногда необходимо разделить блок отмены в режиме вставки. Это может быть выполнено через
<c-g>u
режим вставки. Смотрите:h :undoj
и:h undo-blocks
для получения дополнительной информации.Для получения дополнительной помощи я предлагаю следующее:
Есть также несколько скринкастов на эту тему:
источник
Вы также можете думать об этом так: каждый раз, когда вы переходите в режим вставки для редактирования текста, и вы нажимаете Esc, это будет формировать блок. Если вы попытаетесь отменить этот блок, вы перейдете в ту же позицию, прежде чем войти в режим вставки.
Поэтому вы можете «сохранить» ваши изменения, просто выходя из режима вставки время от времени: допустим, вы переходите в режим вставки и пишете функцию. Вы можете продолжить кодирование и перейти к следующей функции, однако иногда предпочтительнее вернуться в обычный режим и снова переключиться в режим вставки. Таким образом, вы можете структурировать свой код простым способом, и если вам нужно вернуться назад, вы можете знать, в какой позиции вы окажетесь.
Примечание: если вы используете стрелки для перемещения, это как если бы вы нажали Esc+ [ hjkl]
источник