題 搜索Vim的撤消歷史記錄


我在vim中有一個“怪異”的使用模式,我經常使用 - 或者必須使用,這取決於你如何查看它。

通常會發生這種情況:我輸入一些文本,進行一些編輯,然後再刪除一些文本。在將來的某個時候,我認為這個刪除的文本將再次有用,因此會發生以下情況:

  1. 撤消,直到再次出現刪除的文本
  2. 將文本放入某個寄存器中
  3. 重做撤消歷史記錄,直到我再次處於“當前”版本
  4. 粘貼被拉動的文本

我想知道的是:有沒有辦法在文件的撤消歷史記錄中搜索某些東西,所以我不必撤消數十(或數百)個撤消來獲得正確的版本?

請注意,我明確沒有尋找像Git或Subversion這樣的“外部”VCS - 我甚至試圖在將文件保存到磁盤之前搜索更改。


5
2018-04-25 12:16


起源


我相信這有一個“市場”:加速通過自動剔除搜索而不是手動線性搜索找到過去的變化的工作流程:c.f。 git log -p 和 git log -p -S 'regex_for_change'。我不知道任何vim功能(或Gundo功能)可以讓你專門定位差異的一部分。例如,添加電源非常容易 git log -p 只需使用搜索 less,但這不能在Gundo中完成。 - Steven Lu
啊,更正:-S用於git pickaxe搜索字符串,-G用於git pickaxe搜索正則表達式。相當強大。 - Steven Lu
在 功能請求:搜索撤消歷史記錄,Undo-tree插件的作者提出了一個簡單的算法,可以用來在Vim中實現這個功能: loop until undo is not available { search "the string"; undo one step; }。撤消狀態可通過Vim獲得 undotree() 功能。 - Rory O'Kane
看到 vi.stackexchange.com/q/2220/1060 - Kyle Strand


答案:


看起來你想要做的就是確切的用例 Gundo


-1
2018-04-25 14:13



多任務的危險:你開始輸入一個答案,然後你必須處理一個“緊急情況”,你回來完成你的答案,點擊按鈕,並註意到已經有類似的答案。用漂亮的截圖。 - romainl
Gundo非常有用,但有一種簡單的方法 搜索 撤消樹中顯示的文件的各種版本? - Kyle Strand
@KyleStrand,我認為你不能比Gundo的diff功能更精細。 - romainl
我並不是真的要求粒度,我要求搜索功能。具體來說,我希望能夠提交搜索查詢,搜索Gundo顯示的所有差異,並顯示類似於在其差異中具有該搜索模式的文件的所有版本的列表。從表面上看,這似乎是這裡的原始問題所在,但由於你的回答並沒有真正回答我的反應並且已被“接受”,我認為我應該寫一個新問題。 - Kyle Strand
我並不是故意粗魯,但考慮到我們都熟悉Gundo而且我們都不認為Gundo做了我想做的事情,我不確定為什麼你的回答是“閱讀文檔”。我甚至不確定你為什麼認為我 沒有 閱讀文檔。關鍵是你的答案根本不回答我的問題。 - Kyle Strand


你有沒有嘗試過 :history?這顯示了 命令歷史 (在評論後編輯和強調)當前可用的寄存器。看到 :help history 在Vim中獲取更多信息。


有關輸入的歷史記錄緩衝區,請參閱 :h undo-redo (特別是 :h :undolist 部分)。

另見 如何使用Vim的撤消樹? (SO)和 使用撤消分支 (Vim wiki)。


0
2018-04-25 13:14



這是命令歷史記錄,而不是文件的歷史記錄。 - Dave Vogt
@DaveVogt:所以它是,用你正確的幫助部分更新了我的答案。 - Daniel Andersson
謝謝你的鏈接。第二個答案指向 bitbucket.org/sjl/gundo.vim 已經是 漂亮 關。 - Dave Vogt