自動補完には ido を使用し、ssh 経由でリモート サーバーにアクセスするには、tramp を使用することがよくあります。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
。コロンの後の部分 (リモート ファイル パス) を差し引かないようにIdo が必要です。コロンの前の部分は気にしません。私は ssh を使用しており、Ido は を実行するたびに Emacs を数秒間遅延させido-find-file
、ssh タイムアウトが終了すると、Tramp は再接続を試み、パスワードなどを尋ねてきます。この動作は望ましくありません。
Emacs バージョン - 24.0.94.1
編集 (20.03.12)ido-file-name-all-completions-1
: Ido の作成者に連絡した後、次のように変更しようとしました。
(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))))
失敗。次に、正規表現を次のように変更しました
"\\`/[^/]+[:@]"
そしてそれは機能しました-ミニバッファーにその一致が含まれている場合、Idoは無効になりました。しかし、Ido はリモート サーバー上のファイルを見ることができなかったido-make-merged-file-list
ため、何かを入力するたびに、他のディレクトリ内のファイルを検索するように呼び出しを開始しました。これにより、リモート サーバーで Ido を使用する作業がさらに困難になりました。
ido-slow-ftp-hosts
また、変数を設定しようとido-slow-ftp-host-regexps
しましたが/root@site.com#1234
、役に立ちませんでした。