Emacs: бродяга не работает - PullRequest
       23

Emacs: бродяга не работает

40 голосов
/ 05 августа 2011

Я пытался открыть удаленный файл через Emacs через Tramp.

(require 'tramp)
(setq tramp-default-method "ssh")

Я получаю сообщение от Emacs

Tramp: ожидание запросов от удаленной оболочки

Emacs завис и не реагировал ни на какие действия после этого

Emacs был установлен в Windows; удаленный файл был на машине с Linux.

Ответы [ 5 ]

64 голосов
/ 03 декабря 2011

Если учетная запись, к которой вы подключаетесь, использует какое-то странное необычное приглашение оболочки, то есть большая вероятность, что это то, что делает путешествие бродягой.

Войдите в систему как пользователь root, затем введите

PS1="> "

(это обычная стандартная оболочка (ZSH, BASH, younameit), которую tramp поймет) затем переключитесь на учетную запись пользователя и запустите emacs -q (чтобы убедиться, что ваш .emacs не вызывает этот беспорядок) и попробуйте C-x C-f /sudo:root@localhost:/etc/hosts и посмотрите, что к чему.

Вы также можете (не рекомендуется) настраивать регулярное выражение, определяющее, что ожидает бродяга:

M-x customize-variable RET tramp-terminal-prompt-regexp

Мой подход:

  1. Убедитесь, что для переменной tramp-terminal-type установлено значение "немой"

M-x customize-variable RET tramp-terminal-type

  1. Проверьте это в своем. * Shrc и подайте правильное приглашение:
case "$TERM" in
"dumb")
    PS1="> "
    ;;
xterm*|rxvt*|eterm*|screen*)
    PS1="my fancy multi-line \n prompt > "
    ;;
*)
    PS1="> "
    ;;
esac
18 голосов
/ 05 августа 2011

Ваш клиент Windows ssh является ключевым здесь, и метод Tramp 'ssh' почти наверняка неверен.

Если вы используете Cygwin, вам нужно использовать метод 'sshx', и вам, вероятно, нужно использовать ssh-agent для обработки аутентификации. Подробности здесь: Возможно использование tramp с EmacsW32 и cygwin?

Я полагаю, что то же самое относится к любому автономному клиенту ssh, который не требует полной установки Cygwin, но использует библиотеки DLL Cygwin. (Я упоминаю об этом, потому что я почти уверен, что помню такую ​​вещь.)

Если вы используете PuTTY, то вам нужен метод plink, как указал Алекс Отт. Если Wiki не достаточно, search здесь, вероятно, найдет решения для настройки этого подхода.

Другие альтернативы, которые я могу предложить:

  1. Используйте родной Cygwin Emacs. Это будет медленнее, чем NTEmacs, но, похоже, Tramp хорошо работает с методом 'ssh', и также работает запрос пароля.

  2. Разместите виртуальную машину Linux на вашем компьютере с Windows и запустите Emacs на ней. Это довольно большой обруч для прыжка, но это мой предпочтительный способ использования Tramp при работе в Windows.

3 голосов
/ 05 августа 2011

Проверяли ли вы Emacs wiki для решения? ssh в PATH? Также рекомендуется использовать plink в MS Windows - см. Раздел «Встроенные методы» в документации по Tramp

1 голос
/ 02 августа 2018

Ну, это дефект бродяги.

Реальным решением является предотвращение загрузки .bashrc при использовании tramp.(потому что теперь это PS1, но это может быть PATH или любая другая вещь, которую сделает ваш .bashrc, что вызовет недовольство tramp ...).

Это можно сделать, задав ssh установитьпеременная окружения и тестирование в .bashrc:

Добавьте это к ~/.emacs:

(require 'tramp-sh nil t) (setf tramp-ssh-controlmaster-options (concat "-o SendEnv TRAMP=yes " tramp-ssh-controlmaster-options))

и это в начале ~/.bashrc:

if [ ! -z ${TRAMP-x} ] ; then return fi

Другое значение по умолчанию tramp состоит в том, что у него нет переменной для передачи случайных аргументов в команду ssh, мы должны добавить tramp-ssh-controlmaster-options.

0 голосов
/ 01 октября 2012

Кстати - если вам нужно tramp до sudo - Вы можете sudo без бродяги , используя sudoedit.

В настоящее время я использую этот bashфункция:

erf () { SUDO_EDITOR="emacsclient -a emacs" sudoedit $@; }
...