让vc-diff在Emacs 23.2中使用ediff

cod*_*one 4 emacs version-control diff

如果这在Emacs 23.1.x中运行良好,但似乎已经打破了向Emacs 23.2的转变

我想在将文件的工作副本与SVN HEAD进行比较时使用ediff.

通常我按Cx v =和ediff运行,因为我的.emacs中有以下配置

;; Use ediff and not diff 
(setq diff-command "ediff")
Run Code Online (Sandbox Code Playgroud)

但是,唉,我仍然会出现正常的vc-diff缓冲区而没有ediff会话......

有没有其他人遇到这个,知道可能是什么问题?

Tre*_*son 8

有点怀疑上述设置是否符合您的说法.

也就是说,这将绑定'='使用'ediff-revision:

(eval-after-load "vc-hooks"
         '(define-key vc-prefix-map "=" 'ediff-revision))
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用命令vc-ediff跳过输入文件名:只需将当前修改的副本与基本版本 (HEAD) 进行比较。

(eval-after-load "vc-hooks"
         '(define-key vc-prefix-map "=" 'vc-ediff))
Run Code Online (Sandbox Code Playgroud)

然后C-x v =将调出 Ediff 会话。


cod*_*one 4

发现我可以重新绑定C-x v =到以下内容:

(defun ediff-current-buffer-revision () 
  "Run Ediff to diff current buffer's file against VC depot. 
Uses `vc.el' or `rcs.el' depending on `ediff-version-control-package'." 
  (interactive) 
  (let ((file (or (buffer-file-name) 
          (error "Current buffer is not visiting a file")))) 
(if (and (buffer-modified-p) 
     (y-or-n-p (message "Buffer %s is modified. Save buffer? " 
                (buffer-name)))) 
    (save-buffer (current-buffer))) 
(ediff-load-version-control) 
(funcall 
 (intern (format "ediff-%S-internal" ediff-version-control-package)) 
 "" "" nil))) 
Run Code Online (Sandbox Code Playgroud)

这种方法意味着您不必指定要比较的版本,因为它默认比较 HEAD 和当前文件状态。

资料来源: http: //www.groupsrv.com/computers/about152826.html