2014-03-19 106 views
2

首先看Vim中的時間命令,即ea {N}slat {N}s,我認爲它會非常簡單。但是,它並沒有像預期的那樣爲我工作,現在我完全困惑。這是發生了什麼事。Vim的'早期'和'後期'命令沒有按預期工作

我啓動了我的Vim,並開始寫以下行

say, first line written at time 5 
second line written after a pause of 5 seconds may be around time 18 
third line again after a pause of 5 seconds around 30 

所以,想如果我開始在00:00:00寫作,我完成了1號線由00:00:05,然後我拿了5 seconds暫停,然後完成第2行00:00:18,然後再次停頓約5秒鐘,並通過00:00:30完成最後的第三行。然後,我想過要去到以前的狀態5秒,但是當我做:EA 5S,我留下了以下內容:

say, first line written at time 5 

在VIM底部的線表示

2 fewer lines; before #2 67 seconds ago 

我真的很困惑。然後,我檢查幫助命令EA /早了,我看到這一點:

:earlier {N}s  Go to older text state about {N} seconds before. 

是什麼Vim的由是什麼意思?它不是確切的嗎?它仍然有什麼意義呢?任何人都可以解釋嗎?

注意:提及的時間可能會有1-2秒的變化。

回答

4

我覺得

:changes 

:undolist 

應有助於瞭解歷史是如何實際存儲。很難從這裏知道你的情況究竟是如何不能達到你的期望的(兩者都有點模糊)。我只想說的是,當我折回您的編輯步驟(帶定時)我:

change line col text 
    3  1 0 say, first line written at time 5 
    2  2 0 second line written after a pause of 5 seconds may be around time 18 
    1  3 0 third line again after a pause of 5 seconds around 30 
> 

number changes when    saved 
    4  4 17:01:19 
+0

嗯..我看到了。實際上我預計vim會讓我回到5秒前的狀態..例如,假設我寫了最後一行,然後暫停5秒,然後運行命令:然後根據我的預期,由於5秒鐘之前文件完全相同,因此不應該更改任何內容。我認爲我把Vim的「時間旅行」看得太簡單了。 –

4

你離開插入模式每行之後?通常認爲儘快離開插入模式是一種最佳做法;按輸入並等待5秒可能不足以構成新的更改。

您可以通過<C-g>u插入(也在一行內)強制創建撤消點。

由於已經評論過,:changes命令是一個很好的起點。像Gundo - Visualize your undo tree(需要Python)或undotree.vim - Display your undo history in a graph(不)進行導航並更容易地調用樹。

+0

就我而言,我以5秒的間隔完成了3次粘貼操作。顯然,這不會創建離散的歷史 – sehe