有谁知道如何设置 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