【问题标题】:vim - undo across all buffers / windows / open files etcvim - 撤消所有缓冲区/窗口/打开文件等
【发布时间】:2012-05-29 22:35:15
【问题描述】:

在 vim 中,我想通过 all 缓冲区中的 all 更改按时间顺序撤消。

例如,在 vim 会话中,我通常打开许多选项卡,每个选项卡中有许多窗口。使用u 撤消(或g; / g, 移动通过更改列表),vim 移动通过对 那个 缓冲区所做的更改,即使在其他缓冲区中有最近所做的更改。 (我承认,这是我大部分时间想要的。)

但是有没有办法按时间顺序返回所有缓冲区的变化? (我想 vim 会从一个标签跳到另一个标签,这没关系。)

为什么这会有用? ...主要是这样当我在休息后恢复编码时,我可以提醒自己“我在做什么”,即我上次所做的所有更改。

(使用 macvim 7.3)

更新:关于使用 git / mercurial 的回应很有意义(特别感谢git stash),但我仍然觉得这个功能很有用,因为它让我回到最近的变化,按顺序,在 vim 中使用语法着色等等)

【问题讨论】:

  • 我认为提交日志是比其他任何东西更好的进度指标。即使您有未完成的更改,也可以向git stash 添加消息。
  • FTR 我同意这里的一般观点:使用 VCS。更好的是,使用 DVCS 和微提交!
  • 另一个用例:我刚刚花了 5 分钟进行过于激进的重构。现在大量的单元测试都失败了,我不知道我破坏了什么。我想撤消,直到测试再次通过。是的,如果我想在重构之前检查版本控制,那会很好,但我没有想到。

标签: vim


【解决方案1】:

undolist 可以让您走得更远:

:bufdo echo expand('%') | undolist

导致,例如对于一个简单的编辑会话:

SpiritParser.cpp
number changes  when               saved
     1       1  13:57:51
SpiritParser.h
number changes  when               saved
     1       1  13:57:55

要对所有可见窗口执行此操作,请执行 windo 而不是 bufdo。如果你有多个标签,那就做吧

:tabdo windo echo expand('%') | undolist

【讨论】:

    【解决方案2】:

    您应该使用某种版本控制:Git、Mercurial、Subversion 等等……

    每天早上,您都可以阅读项目日志并查看以前的提交以查看发生了什么变化,您可以创建分支来处理特定功能,编写干净且描述性的提交消息以便更好地了解您以前的更改等。

    或者您可以执行:windo u 之类的操作。但这听起来很混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2020-02-26
      相关资源
      最近更新 更多