Как я могу использовать Emacs tramp для ssh на удаленный хост и редактировать файл от имени другого пользователя на специальной основе?

/ multi раньше работал у меня, теперь его больше нет, и я разочарован.

Что я хочу делать, так это в мире моей мечты:

/ myuser @ удаленный хост: sudo: anotheruser: / некоторый / путь / к / файлу

... и иметь режим ido-mode.

Ключевым моментом здесь является то, что «myuser», «remotehost» и «anotheruser» очень специфичны, я использую огромный массив удаленных хостов, часто с разными пользователями и sudo-ing для широкого круга разных пользователей.

Что мне нужно добавить и как я могу протестировать это, не перезагружая emacs снова и снова?


person Chris Withers    schedule 20.10.2011    source источник
comment
Не могли бы вы уточнить: вы использовали tramp-completion-function-alist? Какая у вас конфигурация? Возможно, вам поможет следующий пост: stackoverflow.com/questions/95631/   -  person Renaud    schedule 22.10.2011
comment
Этот поток дает полную информацию: lists.gnu.org /archive/html/tramp-devel/2011-10/msg00014.html   -  person Chris Withers    schedule 29.10.2011


Ответы (2)


Начиная с этого коммита, TRAMP снова поддерживает одноранговые множественные переходы.

Грубо говоря, вы используете это так:

/ssh:transituser@remotehost|sudo:user@remotehost:/some/file

У меня еще нет надежной работы с ido-mode, и это досадно, но это намного лучше, чем ничего! :-)

person Chris Withers    schedule 08.10.2012
comment
Включено в Emacs 24, если кому интересно. См. Также stackoverflow.com/a/16408592/324105 - person phils; 07.05.2013
comment
Подтверждено, что это сработало для меня на Emacs 24.3, никаких специальных настроек не требуется. Уточнение: если ваш ‹remotehost› - это псевдоним, определенный в ~ / .ssh / config (с Host), тогда используйте ваш локальный псевдоним для ‹remotehost› в обоих местах - вам не нужно переводить на истинный имя хоста для sudo. Вы также можете использовать это для dired / dired + для открытия удаленных каталогов и eshell. - person mike; 10.07.2014

Следующий код может помочь:

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

У меня он был в моем файле .emacs, и, похоже, он пришел отсюда: http://atomized.org/2011/01/toggle-between-root-non-root-in-emacs-with-tramp/

Я не использовал его широко, но похоже, что это шаг в правильном направлении.

person stevejb    schedule 19.12.2011