vim:如何追溯白天对文件所做的所有更改

vim:如何追溯白天对文件所做的所有更改

有谁知道如何设置 vim (文本编辑器),以便可以追溯一天内对文件所做的所有更改?当我不小心修改了子例程并希望将其返回到初始状态(就像一天开始时一样)时,我需要它。

我通常使用 svn 将最新版本的源代码保存在全局存储库中。但有时我需要返回到代码在两次 svn 提交之间的状态。

更新:

启用持久撤消创建撤消目录,例如~/.vim/undodir,并将以下设置进入.vimrc文件:

set undodir=~/.vim/undodir
set undofile
set undolevels=1000
set undoreload=10000

答案1

如果 的值足够大'undolevel',Vim 应该能够撤消一整天的更改。如果您在中间退出 Vim,您还需要启用持久撤消通过设置'undofile'选项。

Vim 不仅捕获用于撤消的命令的顺序列表,而且实际上捕获所有更改的树。它还有几个有关撤消的命令(cp. :help undo-branches);回到一天开始时的状态,

:earlier 12h

是一个很好的候选人。

还有类似的插件军藤撤消树,它可视化撤消树并允许对其进行导航。

如果导航撤消树听起来太麻烦(例如,因为您一整天都进行了很多更改),您还可以添加一个轻量级版本控制系统(除了 Subversion 之外),就像我的写备份插件,并在特定时间显式创建备份。

答案2

几年来,我一直在使用脚本包装器来vi保存我正在编辑的文件。它每天最多执行一次,这样我就不会得到太多的备份文件。

这是我使用的脚本的一个更简单的版本;也许它对你也有用。vi您可以运行vib(vi with backup) ,而不是运行:

vib() {
    local DATE=$(date +'%Y-%m-%d') FILE BACK
    for FILE in "$@"
    do
        BACK="$FILE.$DATE"
        test ! -f "$BACK" && cp -p "$FILE" "$BACK"
    done
    vi "$@"
    for FILE in "$@"
    do
        BACK="$FILE.$DATE"
        cmp -s "$FILE" "$BACK" && rm -f "$BACK"
    done
}

可以将其放入.bash_profile或删除函数声明后放入可执行文件,例如/usr/local/bin/vib

相关内容