2011-10-20 19 views
9

/đa được sử dụng để làm việc cho tôi, bây giờ nó đã biến mất và tôi thất vọng.Làm cách nào tôi có thể sử dụng Emacs tramp để ssh đến máy chủ từ xa và chỉnh sửa tệp với tư cách người dùng khác trên cơ sở đặc biệt?

Những gì tôi muốn làm là, trong giấc mơ thế giới của tôi:

/myuser @ remotehost: sudo: anotheruser:/some/path/to/file

... và có ido chế độ làm việc .

Điều quan trọng ở đây là 'myuser', 'remotehost' và 'anotheruser' đều rất đặc biệt, tôi sử dụng một loạt các máy chủ từ xa, thường với những người dùng khác nhau và sudo-ing cho một loạt các người dùng khác nhau.

Tôi cần thêm gì và làm cách nào để thử nghiệm mà không cần tải lại các emacs?

+0

Bạn có thể chính xác hơn không: bạn đã sử dụng 'tramp-completion-function-alist' chưa? Cấu hình của bạn là gì? Có lẽ bài viết sau đây có thể giúp bạn: http://stackoverflow.com/questions/95631/open-a-file-with-su-sudo-inside-emacs – Renaud

+1

Chủ đề này cung cấp toàn bộ nền: http: // danh sách. gnu.org/archive/html/tramp-devel/2011-10/msg00014.html –

Trả lời

8

Kể từ this commit, TRAMP hỗ trợ nhiều bước nhảy đột xuất.

Nói đại khái, bạn sử dụng nó như thế này:

/ssh:[email protected]|sudo:[email protected]:/some/file 

tôi đã không nhận được nó để làm việc đáng tin cậy với ido-mode nào, đó là một sự xấu hổ, nhưng nó tốt hơn rất nhiều so với không có gì! :-)

+2

Bao gồm trong Emacs 24, cho bất kỳ ai tự hỏi. Xem thêm http://stackoverflow.com/a/16408592/324105 – phils

+0

Xác nhận điều này đã làm việc cho tôi trên Emacs 24.3, không cần cấu hình đặc biệt. Một điểm làm rõ: Nếu là một bí danh được định nghĩa trong ~/.ssh/config (với Máy chủ), sau đó sử dụng bí danh cục bộ của bạn cho ở cả hai nơi - bạn không cần dịch sang tên máy chủ thực cho sudo . Bạn cũng có thể sử dụng lệnh này cho dired/dired + để mở các thư mục từ xa và eshell. – mike

0

Các mã sau đây có thể giúp:

(defun find-file-as-root() 
    "Find a file as root." 
    (interactive) 
    (let* ((parsed (when (tramp-tramp-file-p default-directory) 
        (coerce (tramp-dissect-file-name default-directory) 
          'list))) 
      (default-directory 
      (if parsed 
       (apply 'tramp-make-tramp-file-name 
         (append '("sudo" "root") (cddr parsed))) 
       (tramp-make-tramp-file-name "sudo" "root" "localhost" 
              default-directory)))) 
     (call-interactively 'find-file))) 

tôi đã có nó trong tập tin emacs của tôi, và có vẻ như xuất phát từ đây: http://atomized.org/2011/01/toggle-between-root-non-root-in-emacs-with-tramp/

tôi đã không sử dụng nó rộng rãi nhưng nó có vẻ như đó là một bước đi đúng hướng.