回答
短版本:通過撤消撤消。如果撤銷,然後執行非編輯命令(如C-f),則下一次撤銷將撤消撤消,導致重做。
更長版本:
您可以將撤消看作是對一堆操作進行操作。如果在一系列撤銷操作之後執行某個命令(即使是導航命令,例如C-f),則所有的撤消操作都會被推送到操作堆棧。所以下一個撤銷撤銷最後一個命令。假設你有看起來像這樣的操作順序:
- 插入「富」
- 插入「欄中的」
- 插入「我愛垃圾」
現在,你撤消。它會撤銷最近的行動,導致下面的列表:
- 插入「富」
- 插入「欄中的」
如果你做的比撤消在這一點其他的東西 - 比方說,比照,操作堆棧看起來是這樣的:
- 插入 「富」
- 插入 「欄」
- 插入「我愛垃圾」
- 撤消插入「我愛垃圾」
現在,當你撤消,即撤消的第一件事就是撤銷。導致原來的堆(和文件狀態):
- 插入「富」
- 插入「欄中的」
- 插入「我愛垃圾」
如果你做了修改命令打破撤銷序列,該命令在撤消之後添加,因此是之後首先要撤消的命令。假設您在「bar」後面加上了空格,而不是擊中C-f。然後,你將不得不
- 插入「富」
- 插入「欄中的」
- 插入「我愛垃圾」
- 撤消插入「我愛垃圾」
- 刪除「欄」
這種添加/重新添加是無限的。它需要一點時間才能適應,但它的確給了Emacs一個高度靈活和強大的撤銷/重做機制。
爲了以防萬一這聽起來令人討厭,主要優點是你總是可以回到以前的狀態。在大多數編輯人員中,取消幾個更改然後不小心鍵入一個字符會讓你「擱淺」,無法重做你沒有做的事情。 Emacs使這個微不足道。 – phils 2010-08-20 00:15:39
我想在你的構建中,如果一個人想要在紙上做它,你需要兩個堆棧。因爲例如,在你寫下「現在,你撤消了它的位置,它撤消了最後一個動作,導致了以下列表:「你(可以理解)沒有顯示撤消,如果他做了許多撤銷,你不會顯示他們,直到完成某些事情來打破撤銷序列,然後你纔會添加它們。顯示它的另一種方法是有一個列表,並且在列表被破壞之前將列表添加到列表中,但是要注意列表中的光標位置,因此我們知道撤銷列表從 – barlop 2013-08-21 11:31:00
開始反向工作。在撤銷序列被破壞後,肯定知道Emacs操作堆棧只添加了撤消操作? – barlop 2013-08-23 11:44:14
要撤消:C-_
要在撤消後重做:CGC-_
類型上多次C-_重做什麼已被撤消C-_ 要重做emacs命令多次,請執行命令然後鍵入Cxz,然後Z型多次鍵重複命令(有趣的,當你想多次執行宏)
要重複的東西,你也可以使用'C-u',例如'C-u 8 *'(在插入的地方插入8 *)。所以你可以使用'C-u x C-_'來撤銷* x *步驟。 – Patrick 2010-08-20 10:13:55
這與原始問題無關,但在執行完鍵盤宏(使用'C-x e')後,只需按'e'就可以再次執行。 – 2011-11-10 08:51:44
另外,'C- /'和'C-x u'是替代的撤銷密鑰綁定,相當於'C-_'。我更喜歡'C- /',因爲它更容易點擊。 – 2013-04-25 21:36:36
我覺得redo.el
extremly handy做「正常」撤銷/重做,我通常把它綁定到CSZ並撤消對CZ,像這樣:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
只需下載文件,把它放在你的Lisp的路徑並粘貼到您的.emacs
以上。
redo.el標題中的註釋表示它是爲XEmacs製作的。在GNU Emacs和其他相關的Emacsen中使用它有什麼問題嗎? – 2010-08-20 15:05:53
我還沒有任何問題,我已經使用它至少6個月:) – monotux 2010-08-20 17:43:43
來自http://www.emacswiki.org/emacs/RedoMode: 但是,redo.el已經超出因爲Emacs 22. RedoPlus是redo.el的一個分支,並且可以在新版本的Emacs中正確工作,所以它常常會破壞「緩衝區的內容」,因爲'primitive-undo'的行爲與舊的行爲稍有不同。 RedoPlus在這裏:http://www.emacswiki.org/emacs/redo+.el – rofrol 2014-01-23 16:46:41
對於那些想要擁有更常見的撤銷/重做功能的人,有人寫了undo-tree.el
。它提供了非Emacs撤消的外觀和感覺,但提供了對撤消歷史的整個「樹」的訪問。
我喜歡Emacs的內置撤銷系統,但是找到這個包非常直觀。
下面是從文件本身的評論:
Emacs有一個強大的撤銷制度。 與大多數軟件的標準撤銷/重做系統 ,它可以讓你恢復 一個緩衝 的任何過去狀態(而標準的撤銷/重做系統 能儘快失去過去的狀態,你 重做)。然而,這個價格在 的價格:許多人發現Emacs的撤消系統使用困難,難以使用 產生了一系列的軟件包, 取而代之的是功能較弱但更爲直觀的撤銷/重做系統。
都與標準 撤消/恢復數據的損失,和Emacs' 撤消的混亂,從試圖治療撤消 歷史的 變化的線性序列幹。不是。此 軟件包提供的 「undo-tree-mode」將Emacs的撤消系統 替換爲系統,該系統將撤消歷史記錄 視爲原樣: 的分支樹發生更改。這個簡單的想法允許 標準撤消/重做系統的更直觀的行爲是 加上永不 失去任何歷史的權力。一個附加的方面 獎金是,撤消歷史可以在一些 案件更有效地存儲, 允許更多的變化積累 之前Emacs開始丟棄 歷史。
看起來真的很有趣。乾杯。 – phils 2010-08-21 03:31:03
太棒了!誰說emacs撤消是深不可測的?:-) – 2011-10-27 06:36:12
令人驚歎!概念上合理,用戶直觀。一個註釋:我希望在從分支點重做時還會顯示一些警告消息,而不僅僅是在恢復到它時。例如,當用戶調用重做時:'重做從分支點'或'使用默認重做分支' - 只是提醒用戶有多個分支。 – 2014-12-03 00:29:24
- 要撤消一次:
C-/
- 要撤消兩次:
C-/
C-/
- 要重做一次,撤消後:
C-g
C-/
- 重做兩次,撤消後立即:
C-g
C-/
C-/
。請注意0不重複。
- 要撤消立即再次,一旦:
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
。
請參閱Emacs手冊中的Undo以獲取有關Emacs撤消系統的更多詳細信息。
當心undo-tree怪癖重做!
許多受歡迎的「入門套件」(前奏,purcell,spacemacs)與撤消樹捆綁在一起。大多數(全部?)甚至可以自動啓用它。如前所述,撤消樹是可視化和遍歷撤銷/重做樹的便捷方式。前奏曲甚至給它一把和絃(uu
),還有C-x u
。
的問題是:撤銷樹似乎破壞Emacs的默認和知名約束力的重做:C-g C-/
。
相反,你可以使用這些對稱密鑰撤銷/重做:
C-/ undo
C-S-/ redo
這些都是有用的,因爲有時候你想快速重做無需打開了可視化。
This。我正在使用Spacemacs,並不知道爲什麼它不適合我。謝謝! – mghaoui 2016-06-17 12:23:13
- 1. TextBox撤消/重做命令
- 2. MVVM光和撤消/重做?
- 3. Git - 撤消更改
- 4. git撤消更改
- 5. 撤消/重做支持WPF RichTextBox中的表更改
- 6. 如何在執行GroovyShell後撤消元類更改?
- 7. 撤消Git中的最後更改
- 8. Jquery撤消對DOM的最後更改
- 9. 撤消重做在Textarea可能嗎?
- 10. 如何撤消對模型的更改?
- 11. 如何撤消對JSpinner的更改?
- 12. 可撤消的更改集
- 13. Git - 撤消所有更改更改
- 14. 我希望能夠撤消在JTextArea中所做的更改
- 15. 如何在mshtml&c中啓用多級撤消/重做#
- 16. 如何取消正在進行的撤銷/重做操作?
- 17. 如何在Textmate中加速撤消/重做?
- 18. 如何在Android畫布中實現撤消,重做和擦除
- 19. 如何在android studio中增加撤消和重做步驟
- 20. 如何在as3中實現撤消和重做功能
- 21. 如何在git中「撤消撤消」?
- 22. 撤消/重做事件綁定
- 23. Visual C++撤消和重做操作
- 24. 撤消/重做與級聯刪除
- 25. 撤消和重做功能破壞
- 26. 用UITextView撤消/重做(iOS/iPHone)
- 27. 如何撤消包更新
- 28. 如何撤消Mercurial更新
- 29. 如何撤消未更改文件的掛起更改?
- 30. 如何更改在vim中撤銷/重做時顯示的時間戳格式?
答案在接受的答案下告訴你*如何*,如果這就是爲什麼你在看這個答案,根據它的寫法,我希望大多數人都在尋找這個答案。 – 2014-11-02 18:19:11
我剛剛擊中空格鍵,然後撤消空間並重做你所做的撤消操作,直到它結束,然後再次開始返回......我知道有更復雜的方法,但這是快速的很容易,這就是我滾動的方式。 – nroose 2016-10-22 16:16:22