我看了一下
vc-find-revision
,并发现它实际上跳过了一些限制,将修订内容放入文件中,然后打开该文件。所以我想我可以把它短路:
(defun vc-find-revision-in-temporary-buffer (rev)
"Visit revision REV of the current file in another window.
The revision is showed in a temporary buffer; no file is written
to disk."
(interactive
(save-current-buffer
(vc-ensure-vc-buffer)
(list
(vc-read-revision "Revision to visit (default is working revision): "
(list buffer-file-name)))))
(let ((old-buffer-file-name (buffer-file-name)))
(vc-ensure-vc-buffer)
(when (string= rev "")
(setq rev (vc-working-revision old-buffer-file-name)))
(let ((new-buffer-name (vc-version-backup-file-name old-buffer-file-name rev)))
(if (get-buffer new-buffer-name)
(progn
(message "Switching to existing buffer `%s'" new-buffer-name)
(switch-to-buffer-other-window new-buffer-name))
(let ((new-buffer (get-buffer-create new-buffer-name)))
(vc-call find-revision old-buffer-file-name rev new-buffer)
(switch-to-buffer-other-window new-buffer))))
(goto-char (point-min))
(let ((buffer-file-name old-buffer-file-name))
(normal-mode))))
我在社区维基上回答了这个问题。欢迎改进!