В этой статье говорится, что «Emacs имеет повтор, потому что вы можете изменить направление при отмене, тем самым отменяя отмену».
Что это значит? Как пользователь может «повторить» с Emacs?
В этой статье говорится, что «Emacs имеет повтор, потому что вы можете изменить направление при отмене, тем самым отменяя отмену».
Что это значит? Как пользователь может «повторить» с Emacs?
Ответы:
Краткая версия: отменив отмену. Если вы отмените, а затем выполните команду без редактирования, такую как C-f, то следующая отмена отменит отмену, что приведет к повторному выполнению.
Более длинная версия:
Вы можете думать об отмене как о работе со стеком операций. Если вы выполняете какую-либо команду (даже команду навигации, например C-f) после последовательности операций отмены, все отмены помещаются в стек операций. Поэтому следующая отмена отменяет последнюю команду. Предположим, у вас есть последовательность операций, которая выглядит следующим образом:
Теперь вы отменяете. Это отменяет последнее действие, приводя к следующему списку:
Если вы делаете что-то кроме отмены в этот момент - скажем C-f, стек операций выглядит так:
Теперь, когда вы отменяете, первое, что отменено - это отмена. Получив исходный стек (и состояние документа):
Если вы выполните изменяющую команду, чтобы разорвать последовательность отмен, эта команда будет добавлена после отмены и, таким образом, будет первым, что впоследствии будет отменено. Предположим, что вы нажали «бар» вместо удара C-f. Тогда вы бы имели
Это добавление / повторное добавление происходит до бесконечности. Требуется немного привыкнуть, но это действительно дает Emacs очень гибкий и мощный механизм отмены / повторения.
Отменить: C-_
Чтобы повторить после отмены: C-g C-_
Введите несколько раз, C-_ чтобы повторить то, что было отменено. C-_ Чтобы повторить команду emacs несколько раз, выполните команду, затем введите, C-xzа затем введите несколько раз zклавишу, чтобы повторить команду (интересно, если вы хотите выполнить макрос несколько раз)
C-u
Например, для повторения вы также можете использовать C-u 8 *
(вставьте восемь *, где находится курсор). Таким образом, вы можете использовать, C-u x C-_
чтобы отменить х шагов.
C-x e
), вы можете просто нажимать e
так часто, как вам нужно, чтобы выполнить его снова.
C-/
и C-x u
альтернативные отмены привязок клавиш, эквивалентных C-_
. Я предпочитаю, C-/
так как это легче ударить.
C-g C-_
«повторить после отмены», это применимо только при первом нажатии комбинации. После этого повторите ваш ключ отмены без C-g
. Чтобы повторить три раза сразу после удаления, введите C-g C-_ C-_ C-_
. Если вы C-g C-_ C-g C-_ C-g C-_
введете текст, вы просто будете ходить кругами, отменяя повторение отмены ...
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-g
один раз, а затем нажмете C-/
достаточно раз.
Альтернативные ярлыки undo
, кроме C-/
, есть C-_
, C-x u
и M-x
undo
.
Смотрите Undo в Руководстве по Emacs для более подробной информации о системе отмены Emacs.
Для тех, кто хочет иметь более общие функции отмены / повтора, кто-то написал undo-tree.el
. Он обеспечивает внешний вид отмены, не связанной с Emacs, но обеспечивает доступ ко всему «дереву» истории отмен.
Мне нравится встроенная система отмены Emacs, но я нахожу этот пакет очень интуитивным.
Вот комментарий от самого файла:
Emacs имеет мощную систему отмены. В отличие от стандартной системы отмены / повтора в большинстве программ, она позволяет восстанавливать любые прошлое состояние буфера (тогда как стандартная система отмены / возврата может потерять прошлые состояния, как только вы выполните повтор). Однако эта мощь имеет свою цену: многие люди находят систему отмены Emacs запутанной и сложной в использовании, порождая ряд пакетов, которые заменяют ее на менее мощную, но более интуитивную систему отмены / возврата.
И потеря данных со стандартными отменами / повторами, и путаница отмены Emacs проистекают из попытки трактовать историю отмен как линейную последовательность изменений. Это не. `Режим отмены дерева ', предоставляемый этим пакетом, заменяет систему отмены Emacs системой, которая обрабатывает историю отмены как то, что она есть: ветвящееся дерево изменений. Эта простая идея позволяет сочетать более интуитивное поведение стандартной системы отмены / возврата с возможностью никогда не потерять историю. Дополнительный побочный бонус заключается в том, что в некоторых случаях история отмен может быть сохранена более эффективно, что позволяет накопить больше изменений, прежде чем Emacs начнет отбрасывать историю.
Остерегайтесь причудливого причудливого дерева для повторения !
Многие популярные «стартовые наборы» (прелюдия, purcell, spacemacs) поставляются в комплекте с отменить дерево. Большинство (все?) Даже автоматически включают его. Как уже упоминалось, дерево отмены - это удобный способ визуализации и обхода дерева отмены / повтора. Прелюдия даже дает ему клавишный аккорд ( uu
), а также C-x u
.
Проблема заключается в том : уничтожьте дерево , кажется, разрушит по умолчанию 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-путь и вставьте вышеупомянутый в свой .emacs
.
По умолчанию для повтора в Emacs требуется нажать Cg, а затем отменить.
Однако возможно использовать встроенную в Emacs отмену, чтобы также реализовать команду повтора.
Пакет undo-fu использует встроенную функцию отмены Emacs для предоставления как отмен, так и повторения.