12

自動補完には 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、役に立ちませんでした。

4

1 に答える 1

11

もう一度入力C-x C-fすると、ido-find が一時的に無効になり、デフォルトの検索ファイルに戻ります。

詳細についてはC-h f ido-find-file RET

ido がコロンを見つけるたびにこれを行うには、独自の関数を作成する必要があると思います。

于 2012-03-13T09:56:43.097 に答える