自动记录一个文件的修改历史?


#1

PyCharm 有个 Local History 功能,会自动记录一个文件的历史:

感觉可能挺有用的,不用太担心删除内容找不到了。

希望能有一个 Emacs 插件提供这样的功能,最后也像 PyCharm 有一个集中的数据库记录信息:

~ $ ls ~/Library/Caches/PyCharm2019.1/LocalHistory
changes.storageData  changes.storageRecordIndex
~ $

不要创建一大堆文件,何时自动记录应该还能从 Emacs 的 Auto Save 汲取灵感。


#2

undo-tree


#3

其实可以用 https://gitlab.com/pidu/git-timemachine/tree/b97f93d66cffcd69281346845d3a1e32197eda29


#4

emacs的backups就是干这个的,只要你不关,就会有5-6个版本保存。


#5

emacs 自带的 undo 有一个我不太喜欢的地方,就是它的 undo 并不是像栈弹出那样把修改记录弹出,然后把 undo 之后新的记录压入栈,而是会把 undo 对 buffer 的修改一并记录下来。即 undo 并不是弹出而是压入。


#6

让 undotree 支持跨 session 保存就可以。

emacs 虽然支持,可惜出错几率特别高。Vim 的 undotree 插件表现就让人很满意。

不过这是很久以前的事了,现在不知道改善了没。


#7

还是一样让人头疼 :joy:


#8

undo tree不用session也会偶尔丢失历史


#9

还是git靠谱


#10

感觉主要的工作量是如何实现一个查看器。

记录修改历史本身不会很复杂,备份文件就好了,我想大概有两种方式:

1 增量备份

ver0 ---- ver1 ---- ver2 ... ---- verN
      \          \             \
     patch0-1   path1-2       patch(N-1)-N

查看 ver(N-1)verN 的差异时,需要把之前所有的 patch 都应用上,时间换空间

2 全量备份

多占用一些空间,但是可以方便地查看任意版本之间的差异。如果想实现例如保留最后 xxx 次修改 也很容易,直接把旧的版本丢弃就可以了。


#11

我觉得这篇文章吐槽得不错,undo蛇什么的。。。


#12

(setq undo-tree-auto-save-history t) 不能满足需求吗?


#13

undo-tree.el开头的commentary讲得很好,可以看看

另外历史方面undo-tree已经做的很好了,可能只需要优化visualizer的ui就可以达到pycharm的效果


#14

先把undo-in-region容易污染undo記錄樹的問題修了吧


似乎有人不滿undo-tree的體驗,重新造輪子了