В этой статье говорится, что "Emacs имеет повтор, потому что вы можете отменить направление при отмене, тем самым отменив отмену".
Что это значит? Как пользователь может "переделать" с помощью Emacs?
В этой статье говорится, что "Emacs имеет повтор, потому что вы можете отменить направление при отмене, тем самым отменив отмену".
Что это значит? Как пользователь может "переделать" с помощью Emacs?
Краткая версия: отменив отмену. Если вы отмените, а затем выполните команду без редактирования, например C-f, то последующее отмена отменяет отмену, что приведет к повторению.
Более длинная версия:
Вы можете думать об отмене, как о работе в стеке операций. Если вы выполните некоторую команду (даже команду навигации, такую как C-f) после последовательности операций отмены, все отмены будут перенесены в стек операций. Таким образом, следующая отмена отменяет последнюю команду. Предположим, что у вас есть последовательность операций, которая выглядит так:
Теперь вы отмените. Он отменяет последнее действие, в результате чего появляется следующий список:
Если вы делаете что-то другое, кроме отмены в этот момент - скажем, C-f, стек операций выглядит следующим образом:
Теперь, когда вы отменяете, первое, что отменено, - это отмена. Результат в исходном стеке (и состоянии документа):
Если вы выполните команду изменения, чтобы разбить последовательность отмены, эта команда добавляется после отмены и, следовательно, первая вещь, которую нужно отменить после. Предположим, вы переместились через "бар" вместо удара C-f. Тогда у вас было бы
Это добавление/повторное добавление происходит бесконечно. Это немного привыкает, но это действительно дает Emacs очень гибкий и мощный механизм отмены/повтора.
Отменить: C-_
Повторить после отмены: C-g C-_
Введите несколько раз на C-_ , чтобы повторить то, что было отменено с помощью C-_ Чтобы повторно выполнить команду emacs несколько раз, выполните команду, затем введите C-x z, а затем введите много раз в z, чтобы повторить команду (интересно, когда вы хотите выполнить несколько раз макрос)
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Обратите внимание, что C-g
не повторяется.C-g
C-/
C-g
C-/
C-/
Если вы нажали какие-либо клавиши (ввод символов или просто перемещение курсора) с момента последней команды отмены, нет необходимости вводить C-g
перед следующим отмене/повтором. C-g
- это всего лишь безопасный ключ для удара, который ничего не делает сам по себе, но считается неотключительным ключом, чтобы сигнализировать о завершении последовательности отмены. Нажатие другой команды, такой как C-f
, тоже будет работать; его просто, чтобы он перемещал курсор из того места, где у вас было это.
Если вы нажмете C-g
или другую команду, когда вы этого не сделали, и теперь вы отмените неправильное направление, просто нажмите C-g
, чтобы снова изменить направление. Вам нужно будет полностью отменить все ваши случайные повторы и отменить, прежде чем вы получите требуемые исправления, но если вы просто продолжаете ударять C-/
, вы в конечном итоге достигнете состояния, которое хотите. Фактически, каждое состояние, в котором когда-либо находился буфер, можно нажать один раз, а затем нажать C-/
достаточно времени.
Альтернативные ярлыки для undo
, кроме C-/
, равны C-_
, C-x u
и M-x
undo
.
Подробнее о системе устранения Emacss см. Undo в руководстве Emacs.
Для тех, кто хочет иметь более распространенные функции отмены/повтора, кто-то написал undo-tree.el
. Он обеспечивает внешний вид не-Emacs undo, но обеспечивает доступ ко всему "дереву" истории отмены.
Мне нравится встроенная система отмены Emacs, но найти этот пакет очень интуитивно понятным.
Здесь комментарий из самого файла:
Emacs имеет мощную систему отмены. В отличие от стандартной системы отмены/повтора в большинстве программ, это позволяет восстановить любое прошлое состояние буфера (тогда как стандартная система отмены/повтора может потерять прошлые состояния, как только вы повтор). Однако эта власть приходит к цена: много людей находят Emacs 'undo система запутанная и сложная в использовании, порождает ряд пакетов, которые замените его менее мощным, но более интуитивно понятная система отмены/повтора.
Обе потери данных со стандартными отменить/повторить, и путаница Emacs ' отменить, от попыток лечения отменить история как линейная последовательность изменения. Не это. `undo-tree-mode ', обеспечиваемый этим пакет заменяет систему отмены Emacs с системой, которая обрабатывает историю отмены как это: ветвящееся дерево изменения. Эта простая идея позволяет более интуитивное поведение стандартная система отмены/повтора в сочетании с силой никогда теряя всякую историю. Добавленная сторона бонус - это то, что история отмены может в некоторых случаи хранятся более эффективно, позволяя больше изменений накапливать перед тем, как Emacs начнет отбрасывать история.
Остерегайтесь undo-tree quirk для повтора!
Многие популярные "стартовые наборы" (прелюдия, пурцелла, космосмахи) поставляются в комплекте с undo-tree. Большинство (все?) Даже автоматически активируют его. Как уже упоминалось, undo-tree - это удобный способ визуализации и перемещения дерева отмены/повтора. Прелюдия даже дает ему ключевой аккорд (uu
), а также C-x u
.
Проблема заключается в следующем: undo-tree, похоже, разрушает Emacs по умолчанию и хорошо известную привязку для повтора: C-g C-/
.
Вместо этого вы можете использовать эти симметричные клавиши для отмены/повтора:
C-/ undo
C-S-/ redo
Это полезно, так как иногда вы хотите быстро выполнить повтор, не открывая визуализатор.
Я нахожу redo.el
чрезвычайно удобный для выполнения "нормального" отмены/повтора, и я обычно привязываю его к CSz и отменяю на Cz, например:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Просто скачайте файл, поместите его в свой lisp -path и вставьте выше в свой .emacs
.
Если вы хотите повторить последнюю операцию, сделайте следующее.
ESC
C +/
)