В этой статье говорится, что «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, но я нахожу этот пакет очень интуитивным.
Вот комментарий от самого файла:
источник
Остерегайтесь причудливого причудливого дерева для повторения !
Многие популярные «стартовые наборы» (прелюдия, purcell, spacemacs) поставляются в комплекте с отменить дерево. Большинство (все?) Даже автоматически включают его. Как уже упоминалось, дерево отмены - это удобный способ визуализации и обхода дерева отмены / повтора. Прелюдия даже дает ему клавишный аккорд (
uu
), а такжеC-x u
.Проблема заключается в том : уничтожьте дерево , кажется, разрушит по умолчанию Emacs' и хорошо известно обязательным для повтора :
C-g C-/
.Вместо этого вы можете использовать эти симметричные ключи для отмены / повтора :
Это полезно, поскольку иногда вы хотите быстро повторить, не открывая визуализатор.
источник
Я нахожу
redo.el
чрезвычайно удобным для выполнения «нормальной» отмены / повтора, и я обычно привязываю это к CSz и отмену к Cz, вот так:Просто скачайте файл, вставьте его в свой lisp-путь и вставьте вышеупомянутый в свой
.emacs
.источник
Emacs 28 добавляет команду повтора (вызывается
undo-redo
).Если вы хотите иметь более типичную отмену / повтор, используйте следующие команды.
источник
Если вы хотите повторить последнюю операцию, сделайте следующее.
ESC
C + /
)источник
По умолчанию для повтора в Emacs требуется нажать Cg, а затем отменить.
Однако возможно использовать встроенную в Emacs отмену, чтобы также реализовать команду повтора.
Пакет undo-fu использует встроенную функцию отмены Emacs для предоставления как отмен, так и повторения.
источник