Usr_32
Nvim :help
頁面,由 產生,來源為 原始碼,使用 tree-sitter-vimdoc 解析器。
VIM 使用者手冊 - Bram Moolenaar 編寫
復原樹
Vim 提供多層次復原。如果你復原幾個變更,然後做出新的變更,你將在復原樹中建立一個分支。這段文字是關於在分支之間移動。
復原到檔案寫入
有時候你會進行數個變更,然後發現你想回到上次寫入檔案的時候。你可以使用這個指令來達成
:earlier 1f
這裡的 "f" 代表 "file"(檔案)。
你可以重複這個指令來回到更早之前。或者使用除了 1 以外的數字來更快地返回。
如果你回溯得太遠,可以使用以下指令再次前進
:later 1f
請注意,這些指令實際上是依時間順序運作。如果你在復原一些變更後又進行了變更,這一點就很重要。下一節將對此進行說明。
在
02.5 節中,我們只討論了復原/重做的單行。但是,也可能產生分支。當你復原幾個變更,然後做出新的變更時,就會發生這種情況。新的變更會成為復原樹中的一個分支。
讓我們從文字 "one" 開始。第一個變更是附加 " too"。然後移動到第一個 'o' 並將其變更為 'w'。然後我們有兩個變更,編號為 1 和 2,以及文字的三種狀態
one
| 變更 1 |
one too
| 變更 2 |
one two
如果我們現在復原一個變更,回到 "one too",並將 "one" 變更為 "me",我們將在復原樹中建立一個分支
one
| 變更 1 |
one too
/ \ 變更 2 變更 3 | |
one two me too
你現在可以使用
u 指令來復原。如果你執行兩次,你將會回到 "one"。使用
CTRL-R 來重做,你將會回到 "one too"。再執行一次
CTRL-R 將會帶你到 "me too"。因此,復原和重做會在樹中上下移動,使用最後使用的分支。
這裡重要的是變更發生的順序。在這個上下文中,復原和重做不被視為變更。每次變更後,你都會有文字的新狀態。
請注意,只有變更才有編號,上面樹中顯示的文字沒有識別符號。它們大多是通過上面的變更編號來引用的。但是有時也會通過下面的變更編號來引用,尤其是在樹中向上移動時,以便你知道剛復原的是哪個變更。
那麼你現在要如何回到 "one two" 呢?你可以使用這個指令
:undo 2
現在文字是 "one two",你在變更 2 的下方。你可以使用
:undo 指令跳到樹中任何變更的下方。
現在進行另一個變更:將 "one" 變更為 "not"
one
| 變更 1 |
one too
/ \ 變更 2 變更 3 | |
one two me too
| 變更 4 |
not two
現在你改變主意,想回到 "me too"。使用
g- 指令。這會回到過去。因此,它不會在樹中向上或向下移動,而是會回到之前進行的變更。
你可以重複
g-,你會看到文字變更
me too
one two
one too
one
使用
g+ 在時間上向前移動
one
one too
one two
me too
not two
如果你知道你要跳到哪個變更,使用
:undo 會很有用。如果你不確切知道變更編號,
g- 和
g+ 會很有用。
當你處理文字一段時間後,樹會變得很大。然後你可能想回到幾分鐘前的文字。
要查看復原樹中有哪些分支,請使用此指令
:undolist
編號 變更 時間
3 2 16 秒前 4 3 5 秒前
在這裡你可以看到每個分支中的葉子編號以及變更發生的時間。假設我們在變更 4 的下方,在 "not two",你可以使用此指令返回十秒前
:earlier 10s
根據你進行變更所花費的時間,你最終會在樹中的特定位置。
:earlier 指令參數可以是 "m"(分鐘)、"h"(小時)和 "d"(天)。要完全回到過去,請使用一個很大的數字
:earlier 100d
要再次在時間上向前移動,請使用
:later 指令
:later 1m
參數與
:earlier 相同,為 "s"、"m" 和 "h"。
如果你想要更多細節,或者想要操作這些資訊,你可以使用
undotree() 函數。要查看它返回的內容
:echo undotree()