2010-08-19 65 views
216

This article表示「Emacs有重做,因爲您可以在撤消時反轉方向,從而撤消撤消」。如何在Emacs'撤消'之後'重做'更改?

這是什麼意思?用戶如何重做Emacs?

+2

答案在接受的答案下告訴你*如何*,如果這就是爲什麼你在看這個答案,根據它的寫法,我希望大多數人都在尋找這個答案。 – 2014-11-02 18:19:11

+0

我剛剛擊中空格鍵,然後撤消空間並重做你所做的撤消操作,直到它結束,然後再次開始返回......我知道有更復雜的方法,但這是快速的很容易,這就是我滾動的方式。 – nroose 2016-10-22 16:16:22

回答

246

短版本:通過撤消撤消。如果撤銷,然後執行非編輯命令(如C-f),則下一次撤銷將撤消撤消,導致重做。

更長版本:

您可以將撤消看作是對一堆操作進行操作。如果在一系列撤銷操作之後執行某個命令(即使是導航命令,例如C-f),則所有的撤消操作都會被推送到操作堆棧。所以下一個撤銷撤銷最後一個命令。假設你有看起來像這樣的操作順序:

  1. 插入「富」
  2. 插入「欄中的」
  3. 插入「我愛垃圾」

現在,你撤消。它會撤銷最近的行動,導致下面的列表:

  1. 插入「富」
  2. 插入「欄中的」

如果你做的比撤消在這一點其他的東西 - 比方說,比照,操作堆棧看起來是這樣的:

  1. 插入 「富」
  2. 插入 「欄」
  3. 插入「我愛垃圾」
  4. 撤消插入「我愛垃圾」

現在,當你撤消,即撤消的第一件事就是撤銷。導致原來的堆(和文件狀態):

  1. 插入「富」
  2. 插入「欄中的」
  3. 插入「我愛垃圾」

如果你做了修改命令打破撤銷序列,該命令在撤消之後添加,因此是之後首先要撤消的命令。假設您在「bar」後面加上了空格,而不是擊中C-f。然後,你將不得不

  1. 插入「富」
  2. 插入「欄中的」
  3. 插入「我愛垃圾」
  4. 撤消插入「我愛垃圾」
  5. 刪除「欄」

這種添加/重新添加是無限的。它需要一點時間才能適應,但它的確給了Emacs一個高​​度靈活和強大的撤銷/重做機制。

+89

爲了以防萬一這聽起來令人討厭,主要優點是你總是可以回到以前的狀態。在大多數編輯人員中,取消幾個更改然後不小心鍵入一個字符會讓你「擱淺」,無法重做你沒有做的事情。 Emacs使這個微不足道。 – phils 2010-08-20 00:15:39

+3

我想在你的構建中,如果一個人想要在紙上做它,你需要兩個堆棧。因爲例如,在你寫下「現在,你撤消了它的位置,它撤消了最後一個動作,導致了以下列表:「你(可以理解)沒有顯示撤消,如果他做了許多撤銷,你不會顯示他們,直到完成某些事情來打破撤銷序列,然後你纔會添加它們。顯示它的另一種方法是有一個列表,並且在列表被破壞之前將列表添加到列表中,但是要注意列表中的光標位置,因此我們知道撤銷列表從 – barlop 2013-08-21 11:31:00

+0

開始反向工作。在撤銷序列被破壞後,肯定知道Emacs操作堆棧只添加了撤消操作? – barlop 2013-08-23 11:44:14

176

要撤消:C-_

要在撤消後重做:CGC-_

類型上多次C-_重做什麼已被撤消C-_ 要重做emacs命令多次,請執行命令然後鍵入Cxz,然後Z型多次鍵重複命令(有趣的,當你想多次執行宏)

+3

要重複的東西,你也可以使用'C-u',例如'C-u 8 *'(在插入的地方插入8 *)。所以你可以使用'C-u x C-_'來撤銷* x *步驟。 – Patrick 2010-08-20 10:13:55

+8

這與原始問題無關,但在執行完鍵盤宏(使用'C-x e')後,只需按'e'就可以再次執行。 – 2011-11-10 08:51:44

+6

另外,'C- /'和'C-x u'是替代的撤銷密鑰綁定,相當於'C-_'。我更喜歡'C- /',因爲它更容易點擊。 – 2013-04-25 21:36:36

9

我覺得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以上。

+0

redo.el標題中的註釋表示它是爲XEmacs製作的。在GNU Emacs和其他相關的Emacsen中使用它有什麼問題嗎? – 2010-08-20 15:05:53

+0

我還沒有任何問題,我已經使用它至少6個月:) – monotux 2010-08-20 17:43:43

+3

來自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

36

對於那些想要擁有更常見的撤銷/重做功能的人,有人寫了undo-tree.el。它提供了非Emacs撤消的外觀和感覺,但提供了對撤消歷史的整個「樹」的訪問。

我喜歡Emacs的內置撤銷系統,但是找到這個包非常直觀。

下面是從文件本身的評論:

Emacs有一個強大的撤銷制度。 與大多數軟件的標準撤銷/重做系統 ,它可以讓你恢復 一個緩衝 的任何過去狀態(而標準的撤銷/重做系統 能儘快失去過去的狀態,你 重做)。然而,這個價格在 的價格:許多人發現Emacs的撤消系統使用困難,難以使用 產生了一系列的軟件包, 取而代之的是功能較弱但更爲直觀的​​撤銷/重做系統。

都與標準 撤消/恢復數據的損失,和Emacs' 撤消的混亂,從試圖治療撤消 歷史的 變化的線性序列幹。不是。此 軟件包提供的 「undo-tree-mode」將Emacs的撤消系統 替換爲系統,該系統將撤消歷史記錄 視爲原樣: 的分支樹發生更改。這個簡單的想法允許 標準撤消/重做系統的更直觀的行爲是 加上永不 失去任何歷史的權力。一個附加的方面 獎金是,撤消歷史可以在一些 案件更有效地存儲, 允許更多的變化積累 之前Emacs開始丟棄 歷史。

+0

看起來真的很有趣。乾杯。 – phils 2010-08-21 03:31:03

+3

太棒了!誰說emacs撤消是深不可測的?:-) – 2011-10-27 06:36:12

+0

令人驚歎!概念上合理,用戶直觀。一個註釋:我希望在從分支點重做時還會顯示一些警告消息,而不僅僅是在恢復到它時。例如,當用戶調用重做時:'重做從分支點'或'使用默認重做分支' - 只是提醒用戶有多個分支。 – 2014-12-03 00:29:24

39
  • 撤消一次:C-/
  • 要撤消兩次:C-/C-/
  • 重做一次,撤消後:C-gC-/
  • 重做兩次,撤消後立即:C-gC-/C-/。請注意0​​不重複。
  • 撤消立即再次,一旦:C-gC-/
  • 要再次立即撤消,兩次:C-gC-/C-/
  • 重做,一樣的...

如果您按下任意鍵(無論是鍵入字符或只是移動光標)自上次撤銷命令,也沒有必要你的下一個撤消之前鍵入C-g /重做。 C-g只是一個安全的按鍵,它不會自己做任何事情,而是算作一個不可撤銷的按鍵來指示撤消序列的結束。按另一個命令,如C-f也可以;只是它會將光標從你所在的位置移開。

如果您按下C-g或其他命令,如果您不打算,並且您現在正在以錯誤的方向撤消,只需按C-g即可再次反轉您的方向。在到達所需的撤銷列表之前,您必須通過意外重做和撤消操作一直撤消,但如果您只是繼續點擊C-/,則最終會達到您想要的狀態。事實上,如果您按一次C-g一次,然後按C-/足夠多的時間,緩衝區所進入的每個狀態都是可到達的。

替代快捷鍵undo,比C-/等,是C-_C-x uM-xundo

請參閱Emacs手冊中的Undo以獲取有關Emacs撤消系統的更多詳細信息。

12

當心undo-tree怪癖重做

許多受歡迎的「入門套件」(前奏,purcell,spacemacs)與撤消樹捆綁在一起。大多數(全部?)甚至可以自動啓用它。如前所述,撤消樹是可視化和遍歷撤銷/重做樹的便捷方式。前奏曲甚至給它一把和絃(uu),還有C-x u

的問題是:撤銷樹似乎破壞Emacs的默認和知名約束力的重做C-g C-/

相反,你可以使用這些對稱密鑰撤銷/重做

C-/  undo 
C-S-/ redo 

這些都是有用的,因爲有時候你想快速重做無需打開了可視化。

+0

This。我正在使用Spacemacs,並不知道爲什麼它不適合我。謝謝! – mghaoui 2016-06-17 12:23:13