12

我经常使用 ido 进行自动完成,并通过 ssh 访问远程服务器。我的.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。我需要 Ido不要扣除冒号之后的部分(远程文件路径),我不关心冒号之前的部分。我使用 ssh,每次运行时,Ido 都会让 Emacs 延迟几秒钟ido-find-file,当 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-hostsido-slow-ftp-host-regexpsto /root@site.com#1234,但没有帮助。

4

1 回答 1

11

如果您C-x C-f再次输入,您将暂时禁用 ido-find 并回退到默认的查找文件。

了解更多信息C-h f ido-find-file RET

每次 ido 找到一个冒号时都要这样做,我想你必须为此编写自己的函数。

于 2012-03-13T09:56:43.097 回答