【问题标题】:Any editor/IDE that supports or could be hacked to support viewing diffs live while editing?任何支持或可能被黑客入侵以支持在编辑时实时查看差异的编辑器/IDE?
【发布时间】:2013-04-12 19:18:47
【问题描述】:

在我编辑文件时,是否有任何编辑器/IDE 可以提供差异的实时视图(可能使用diff)。理想的设置是当我以这种差异模式打开文件进行编辑时,文件缓冲在两个独立的窗格中(但并排放置),这样当我编辑一个的内容时,两者的差异为我突出显示。

【问题讨论】:

  • 你已经问过关于自动化 Vim 的 :diffupdate; vimdiff 对你来说缺少什么?!
  • vimdiff 有两个缺点: 1. 它不能独立缓冲同一个文件以允许diff 比较。当然,这可以通过自动制作文件的临时副本来解决; 2.在vimdiff内部,内联编辑(插入或删除)无法触发diff重新计算差值,必须手动执行:diffupdate。我希望在退出 INSERT 模式并进入 NORMAL 模式时自动重新计算。
  • +1 问题。因为我终于看到了,vim 和 emacs 这两个家伙坐在标签排里,看着我们发布答案。
  • @plmday vim 你可以为事件 InsertEnter/InsertLeave 创建au。你可以在那里调用 diffupdate。
  • @Kent,没错。实际上我发现perfect solution 是为了捕捉CursorMovedCursorMovedI 的事件。

标签: vim emacs editor diff


【解决方案1】:

似乎没有现有的 Emacs 模式可以完全满足您的需求,但粗略的谷歌搜索出现了 thisthis

从第二个开始(格式稍微固定):

(defun diff-buffer-against-file (context)
    "diff the current [edited] buffer and the file of the same name"
    (interactive "P")
    (let (($file buffer-file-name)
          ($tempFile "/tmp/emacs.diff")
          ($tempBuffer "emacs.diff"))
        (delete-other-windows)
        (push-mark (point) t)
        (generate-new-buffer $tempFile)
        (copy-to-buffer $tempBuffer (point-min) (point-max))
        (set-buffer $tempBuffer)
        (write-file $tempFile)
        (shell-command (concat (if context "diff -c " "diff ") $file " " $tempFile))
        (kill-buffer $tempFile)
        (pop-mark)))

(global-set-key "\C-cd" 'diff-buffer-against-file)

该操作看起来有点过于激烈,无法绑定到 change hook,但如果您喜欢这种事情,没有什么可以阻止您这样做。

编辑: Stefan 指出 diff-buffer-with-file 存在,并且具有您正在寻找的行为(它需要一个缓冲区,并且 diffs 该缓冲区及其文件,显示该输出在一个不集中的临时缓冲区中),所以你甚至不需要定义上面的内容。不过我确实试过了,而且很天真

(defun diff-current (start end len) (diff-buffer-with-file (current-buffer)))
(add-hook 'after-change-functions 'diff-current)

使编辑对我的口味来说太不舒服了。您可能希望遵循 Stefan 的建议,并在每次更改时立即使用超时而不是 diffing。

【讨论】:

  • Emacs 已经提供了diff-buffer-with-file,不用再手写了。将这样的功能添加到计时器可能是可以的(它不会立即刷新,但很快)。
  • 很高兴看到 Emacs 还提供了部分解决方案,正如您建议的完整解决方案一样,它可能会被黑客入侵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2014-10-27
  • 2018-04-12
  • 1970-01-01
  • 2011-03-21
  • 2021-12-12
相关资源
最近更新 更多