2012-03-12 26 views
8

Tôi thường sử dụng ido để tự động hoàn thành và tramp để truy cập máy chủ từ xa qua ssh. My .emacs bao gồm các dòng sau:Emacs: tắt tính năng hoàn thành Ido ở chế độ Tramp

(require 'tramp) 
(setq tramp-default-method "ssh") 
(ido-mode 1) 
(setq ido-enable-flex-matching t) 
(setq ido-everywhere t) 

Tôi muốn tắt hoàn thành Ido khi tôi đang duyệt nội dung của máy chủ từ xa. Lưu ý rằng biến số ido-enable-tramp-completion không liên quan gì đến vấn đề của tôi. Xem xét dòng /[email protected]#1234:/var/www/file.txt. Tôi cần Ido không để khấu trừ phần sau dấu hai chấm (đường dẫn tệp từ xa), tôi không quan tâm đến phần trước dấu hai chấm. Tôi sử dụng ssh, và Ido làm cho Emacs tụt hậu trong vài giây mỗi lần tôi chạy ido-find-file và khi hết thời gian chờ, Tramp sẽ cố gắng kết nối lại, yêu cầu tôi nhập mật khẩu và vân vân. Hành vi này là không mong muốn.

Emacs version - 24.0.94.1

Chỉnh sửa (20.03.12): Sau khi tiếp xúc với Ido tác giả tôi đã cố gắng để thay đổi ido-file-name-all-completions-1 như sau:

(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)))) 

Không thành công. Sau đó tôi đã thay đổi regex thành

"\\`/[^/]+[:@]" 

và nó hoạt động - Ido đã bị vô hiệu hóa, khi minibuffer chứa khớp đó. Tuy nhiên, khi Ido không thể xem tệp trên máy chủ từ xa, nó bắt đầu gọi ido-make-merged-file-list để tìm kiếm tệp trong các thư mục khác mỗi lần tôi nhập nội dung nào đó. Điều này đã làm việc với Ido trên các máy chủ từ xa thậm chí còn đau hơn.

Tôi cũng đã cố gắng thiết lập biến số ido-slow-ftp-hostsido-slow-ftp-host-regexps đến /[email protected]#1234, không trợ giúp.

Trả lời

8

Nếu bạn nhập C-x C-f lần nữa, bạn tạm thời vô hiệu hóa việc tìm kiếm ido và quay lại tệp tìm kiếm mặc định.

Để biết thêm thông tin C-h f ido-find-file RET

Để làm mỗi thời gian này ido tìm thấy một dấu hai chấm, tôi đoán bạn phải viết chức năng của riêng bạn cho điều đó.

+0

Nếu tôi thực hiện 'ido-find-file' hai lần, thì lỗi này được đưa vào' * Backtrace * 'buffer -' Debugger đã nhập - Lỗi Lisp: (lỗi "Command đã cố sử dụng minibuffer trong khi trong minibuffer") Debugger đã nhập - Lỗi Lisp: (lỗi "Lệnh đã cố sử dụng minibuffer khi đang ở trong minibuffer") '. Và tôi nên viết hàm này ở đâu? –

+0

Bạn không thể chạy ido-find-file hai lần. Lệnh 'C-x C-f' sẽ không ăn trưa tệp tin tìm kiếm, nó vừa trở lại tìm tập tin. Không gõ lại 'M-x ido-find-file RET' lần nữa. Nhập 'C-x C-f'. – mathk

+0

Tôi hiểu. Tôi nên viết một hàm cho ido khi nhìn thấy dấu hai chấm? –

Các vấn đề liên quan