Как вы "переделываете" изменения после "отмены" с помощью Emacs?



в этой статье говорит ,что"Emacs имеет повтор, потому что вы можете изменить направление при отмене, тем самым отменяя отмену".



Что это значит? Как пользователь может "повторить" с Emacs?

605   6  

6 ответов:

короткая версия: путем отмены отмены. Если вы отмените, а затем выполните команду без редактирования, такую как C-f, затем следующая отмена отменит отмену, что приведет к повторению.

больше вариант:

вы можете думать об отмене как о работе со стеком операций. Если вы выполняете какую-либо команду (даже навигационную команду, такую как C-f) после выполнения последовательности операций отмены все отмены перемещаются в стек операций. Так что следующая отмена отменяет последняя команда. Предположим, у вас есть последовательность операций, которая выглядит следующим образом:

  1. вставить "foo"
  2. вставить "бар"
  3. вставить "я люблю спам"

теперь, отменить. Он отменяет последнее действие, в результате чего появляется следующий список:

  1. вставить "foo"
  2. вставить "бар"

Если вы делаете что - то другое, чем отменить в этот момент-скажем,C-f, стек операций выглядит вот так:

  1. вставить "foo"
  2. вставить "бар"
  3. вставить "я люблю спам"
  4. отменить вставку "я люблю спам"

теперь, когда вы отменяете, первое, что отменяется, это отмена. В результате ваш исходный стек (и состояние документа):

  1. вставить "foo"
  2. вставить "бар"
  3. вставить "я люблю спам"

Если вы выполняете команду изменения, чтобы сломать отмену последовательность, эта команда добавляется после отмены и, таким образом, первое, что будет отменено после этого. Предположим, вы отступили над "баром" вместо того, чтобы ударить C-f. Тогда бы у тебя было

  1. вставить "foo"
  2. вставить "бар"
  3. вставить "я люблю спам"
  4. отменить вставку "я люблю спам"
  5. удалить "бар"

это добавление/повторное добавление происходит до бесконечности. К этому нужно немного привыкнуть, но это действительно дает Emacs очень гибкий и мощный механизм отмены/повтора.

чтобы отменить: C -_

чтобы повторить после отмены: C-g C -_

введите несколько раз на C -_ чтобы переделать то, что было отменено C -_ Чтобы повторить команду emacs несколько раз, выполните команду и введите C-xz а затем введите много раз на z клавиша для повторения команды (интересно, когда вы хотите выполнить несколько раз макрос)

  • до отменить после: C-/
  • отменить дважды:C-/C-/
  • до повторить один раз, сразу после отмены: C-gC-/
  • повторить дважды, сразу после удаления:C-gC-/C-/. Обратите внимание, что C-g - это не повторится.
  • до отменить тут снова после: C-g C-/
  • чтобы отменить немедленно снова, дважды:C-gC-/C-/
  • до повторить еще раз, то же самое...

если вы нажали какие-либо клавиши (будь то ввод символов или просто перемещение курсора) с момента последней команды отмены, нет необходимости вводить C-g перед следующей отменой/повтором. C-g это просто безопасный ключ для удара, который ничего не делает сам по себе, но считается ключом без отмены, чтобы сигнализировать о конце вашей отмены последовательность. Нажатие другой команды, например C-f тоже будет работать; просто он переместит курсор с того места, где он был у вас.

если вы нажмете C-g или другая команда, когда вы не хотели, и теперь вы отменяете в неправильном направлении, просто нажмите C-g чтобы снова изменить направление. Вам нужно будет отменить все ваши случайные повторы и отмены, прежде чем вы доберетесь до отмены, которую вы хотите, но если вы просто продолжите нажимать C-/, вы в конечном итоге достигнете государство вы хотите. Фактически, каждое состояние буфера когда-либо было доступно, если вы нажмете C-g один раз, а затем нажмите C-/ достаточно раз.

альтернативные горячие клавиши для undo, кроме C-/, are C-_,C-x u и M-xundo.

посмотреть отменить в руководстве Emacs для получения более подробной информации о системе отмены Emacs.

для тех, кто хочет иметь более общие функции отмены/повтора, кто-то написал undo-tree.el. Он обеспечивает внешний вид не Emacs undo, но обеспечивает доступ ко всему "дереву" истории отмены.

Мне нравится встроенная система отмены Emacs, но этот пакет очень интуитивно понятен.

вот комментарий из самого файла:

Emacs имеет мощную систему отменить. В отличие от стандартной системы отмены / повтора в большинство программ, это позволяет вам восстановить любой прошлое состояние буфера (в то время как стандартная система отмены / повтора может потерять прошлые состояния, как только вы переделывать.) Однако, эта сила приходит в цена: Многие люди находят Emacs' отменить система запутанная и сложная в использовании, нерест ряда пакетов, которые заменить его на менее мощный, но более интуитивная система отмены/повтора.

как потеря данных со стандартом отменить / повторить, и путаница Emacs' отменить, вытекают из попытки лечения отменить история как линейная последовательность изменения. Это не так. Этот отменить-дерево-режиме, предусмотренных настоящим пакет заменяет системные отменить в Emacs' с системой, которая обрабатывает историю отмены каково это: ветвящееся дерево изменения. Эта простая идея позволяет более интуитивное поведение стандартная система отмены/повтора быть в сочетании с силой не теряю всякую историю. Дополнительный боковой бонус заключается в том, что отменить историю можно в некоторых случаях сохраняются более эффективно, позволяя накапливаться большему количеству изменений прежде чем Emacs начнет отбрасывать история.

остерегайтесь undo-tree бзик на повтор!

многие популярные "стартовые наборы" (prelude, purcell, spacemacs) поставляются в комплекте с undo-tree. Большинство (все?) даже автоматически включить его. Как уже упоминалось, undo-tree-это удобный способ визуализации и обхода дерева отмены/повтора. Прелюдия даже дает ему ключ-аккорд (uu), а также C-x u.

проблема: undo-tree, похоже, разрушает значение по умолчанию Emacs и хорошо известную привязку для повтор: C-g C-/.

вы можете используйте эти симметричные клавиши для отмены / повтора:
C-/     undo
C-S-/   redo

они полезны, так как иногда вы хотите быстро повтор без открытия визуализатор.

найти redo.el очень удобно для выполнения "нормальной" отмены/повтора, и я обычно привязываю его к C-S-z и отменяю к C-z, например:

(when (require 'redo nil 'noerror)
    (global-set-key (kbd "C-S-z") 'redo))

(global-set-key (kbd "C-z") 'undo)

просто загрузите файл, поместите его в свой lisp-путь и вставьте выше в свой .emacs.

Comments

    Ничего не найдено.