我正在尝试在Vim中进行突出显示的撤消,例如spacemacs默认配置。因此,我想在撤消操作时使用类似的东西:



任何人都知道如何在Vim中执行此操作吗?

(我已经有了Gundo插件,我只想使默认的undo更平滑)

编辑:undotree插件可以完成工作(Gundo不会突出显示更改),只需使用UndotreeToggle命令并文件上所有将来的更改都将突出显示。

评论

好主意。您可以使用matchadd()创建一个高亮显示,但要弄清楚文件的哪些部分已更改,则需要一点技巧。
也许在撤消之前保存到临时缓冲区/文件,然后在撤消之后保存到第二缓冲区/文件,并在清理(或更改其颜色)先前的差异后突出显示新的差异。大文件可能变慢。

UndoTree实际上会突出显示已更改的行,但不会实时进行。我认为它使用GNU diff。获取单词粒度将是一个额外的步骤(例如,在分行符,差异,重新组合行时拆分行)。
这些插件接近,但它们仍基于行:smeargle可以突出显示自上次保存以来更改的行。 changes插件在左侧装订线中更改了行(包括删除)。

@ joeytwiddle,changesPlugin也可以突出显示上一个更改区域

#1 楼

新解决方案

您可以使用:changes命令查看最近的更改。因此,您可以使用正则表达式来完成最新的行更改,然后按照@joeytwiddle的建议将行应用于matchadd()

这是代码: >
注意:



此功能仅添加新的高光而不删除旧的高光,因此您必须先删除旧的高光。使用clearmatches功能,您可以在添加新匹配项之前删除匹配项。小心,它将删除所有匹配项。如果您想获得更高的粒度,则可以保存并手动删除匹配项:我发现它仅适用于单行更改。

参考文献:


为什么\ ra Vim换行符? br />http://vim.wikia.com/wiki/Capture_ex_command_output
http://vim.wikia.com/wiki/Highlight_long_lines


旧解决方案

这里是一个可能的解决方案,主要是受Diff当前缓冲区和原始文件的启发:该系统,因此您撤消上一次更改,将其写入,重做所有更改并执行差异。

我认为这应该可以用于时间上的时间差异可视化。

评论


有没有办法清除DiffWithPrevious()上的消息“缓冲区”?我希望该功能突出显示最后的更改,但是突出显示会随着时间的推移而累积,我尝试使用诸如message = 0或message =“”之类的方法,但没有成功。

– tjbrn
15年8月19日在22:29

是的,让我更新我的答案。

– nobe4
15年8月20日在4:15

#2 楼

检查我的更改插件,并确保将变量g:changes_linehi_diff设置为1

#3 楼

对于正在尝试与我相同的人,这要归功于答案,这是我达到的最接近的结果。