2009-06-24 46 views

回答

4

为Emacs 23.1,此解决方案的工作(使用默认的Emacs设置):

(defadvice minibuffer-complete-and-exit (before minibuffer-complete-and-exit activate) 
    "translate all occurrences of multiple/into single /" 
    (let ((unread-command-events t)) 
(save-excursion (replace-regexp "/+" "/" nil (point-min) (point-max))) 
(message nil))) 

我没有获得Emacs的22 *,所以你必须尝试两个,但我怀疑解决方案如下。

为Emacs 21.3,早前答案的工作原理:

这似乎这样的伎俩(打TAB看到它在行动):

(defadvice read-file-name-internal (before read-file-name-internal-reduce-slash activate) 
    "translate all occurrences of multiple/into single /" 
    (ad-set-arg 0 (replace-regexp-in-string "/+" "/" (ad-get-arg 0)))) 

这并不需要你输入TAB得到翻译发生。

编辑补充:

要得到的效果没有击中TAB,使用此代码:

(define-key minibuffer-local-map (kbd "RET") 'exit-minibuffer-reduce-slash-if-in-find-file) 
(defun exit-minibuffer-reduce-slash-if-in-find-file() 
    "when finding a file translate all occurrences of multiple/into single /" 
    (interactive) 
    (when (or nil minibuffer-completing-file-name) 
    (goto-char (point-min)) 
    (while (re-search-forward "//+" nil t) 
     (replace-match "/"))) 
    (call-interactively 'exit-minibuffer)) 
+0

伟大的小费。双斜杠-means-filesystem-root很少发生,但是当它出现时,它就是震耳欲聋的。这很方便。 – Cheeso 2009-06-25 02:59:39

0

Emacs使用替代品,在文件名称做文件几种替代名。一个是(来自功能doc字符串):

如果//' appears, everything up to and including the first of those /'被丢弃。

不幸的是,这个功能是不可定制的。但是你可以创建一个意见替代品,在文件名称实际执行之前删除多个斜线:

(defadvice substitute-in-file-name (before fixup-double-slashes activate) 
    (ad-set-arg 0 (replace-regexp-in-string "//+" "/" (ad-get-arg 0))))