Emacs:在不定期模式下禁用Ido完成

Emacs:在不定期模式下禁用Ido完成,emacs,elisp,tramp,ido,Emacs,Elisp,Tramp,Ido,我经常使用ido自动完成,并使用tramp通过ssh访问远程服务器。My.emacs包括以下几行: (require 'tramp) (setq tramp-default-method "ssh") (ido-mode 1) (setq ido-enable-flex-matching t) (setq ido-everywhere t) 我想在浏览远程服务器的内容时禁用Ido完成。请注意,变量ido enable tramp completion与我的问题无关。考虑线root@site.c

我经常使用ido自动完成,并使用tramp通过ssh访问远程服务器。My
.emacs
包括以下几行:

(require 'tramp)
(setq tramp-default-method "ssh")
(ido-mode 1)
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
我想在浏览远程服务器的内容时禁用Ido完成。请注意,变量
ido enable tramp completion
与我的问题无关。考虑线<代码>root@site.com#1234:/var/www/file.txt。我需要Idonot来扣除冒号后面的部分(远程文件路径),我不关心冒号前面的部分。我使用ssh,每次运行
Ido find file
,Ido都会让Emacs延迟几秒钟,当ssh超时结束时,Tramp会尝试重新连接,询问密码等等。这种行为是不可取的

Emacs版本-24.0.94.1

编辑(20.03.12):与Ido作者联系后,我试图将
Ido-file-name-all-completions-1
更改为以下内容:

(defun ido-file-name-all-completions-1 (dir)
  (cond
   ((ido-nonreadable-directory-p dir) '())
   ;; do not check (ido-directory-too-big-p dir) here.
   ;; Caller must have done that if necessary.

   ((and ido-enable-tramp-completion
     (or (fboundp 'tramp-completion-mode-p)
         (require 'tramp nil t))
     (string-match "\\`/[^/]+[:@]\\'" dir))
    ;; TRAMP RELATED CODE DELETED
    nil)
   (t
    (file-name-all-completions "" dir))))
没有成功。然后我把正则表达式改为

"\\`/[^/]+[:@]"
它起作用了——当minibuffer包含匹配项时,Ido被禁用。但是,由于Ido无法查看远程服务器上的文件,因此每次输入内容时,它都会调用
Ido make merged file list
,以搜索其他目录中的文件。这使得在远程服务器上使用Ido更加痛苦


我还尝试将变量
ido slow ftp hosts
ido slow ftp hostregexps
设置为
/root@site.com#1234
,没有帮助。

如果再次输入
C-x C-f
,则暂时禁用ido查找并返回默认查找文件

有关详细信息,请参见C-h f ido查找文件RET


要在每次我找到冒号时执行此操作,我想您必须为此编写自己的函数。

如果我两次
ido find file
,则会在
*Backtrace*
buffer-
调试器输入时抛出此错误--Lisp错误:(错误“命令试图在minibuffer中使用minibuffer”)调试器输入--Lisp错误:(错误)“命令试图在minibuffer中使用minibuffer”)
。我应该在哪里写这个函数呢?你不能运行ido find file两次。
C-x C-f
命令不会占用ido find file,它只是返回到find file。不要再次键入
M-x ido find file RET
。键入
C-x C-f
。我明白了。我应该在哪里写一个函数让ido看到冒号?在这种情况下,我不这么做nk有一个钩子。我建议你重写你自己的find file方法,并复制ido find file的大部分行为,除非你看到冒号。两年后,我发现这篇文章很有帮助!这个问题似乎与。