web-dev-qa-db-ja.com

Emacs:Trampが機能しない

EmacsからTramp経由でリモートファイルを開こうとしました。

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

Emacsからメッセージを受け取ります

Tramp:リモートシェルからのプロンプトを待機しています

Emacsがハングし、その後のアクションに応答しませんでした

EmacsはWindowsにインストールされました。リモートファイルはLinuxマシン上にありました。

41
jerboa

接続先のアカウントが奇妙で奇妙なシェルプロンプトを使用している場合、これがトランプトリップの原因となる可能性が高くなります。

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
66
yPhil

ここで重要なのはWindows sshクライアントであり、 'ssh' Trampメソッドはほぼ間違いなく間違っています。

Cygwinを使用している場合は、「sshx」メソッドを使用する必要があり、おそらく認証を処理するためにssh-agentを使用する必要があります。詳細はこちら: EmacsW32とcygwinでtrampを使用することは可能ですか?

Cygwinの完全インストールを必要としないスタンドアロンのsshクライアントにも同じことが当てはまると思いますが、dosはCygwin DLLを使用します。 (私はそのことを見たのを覚えていると確信しているので、これについて言及します。)

PuTTYを使用している場合は、Alex Ottが指摘したように、「plink」メソッドが必要です。 Wikiで不十分な場合は、ここで search を使用すると、そのアプローチを構成するためのソリューションが表示されます。

私が提案できる他の選択肢は次のとおりです:

  1. CygwinネイティブのEmacsを使用します。これはNTEmacsより遅くなりますが、Trampは 'ssh'メソッドでうまく機能するようで、パスワードプロンプトも機能します。

  2. LinuxをホストするVM、そしてその上でEmacsを実行します。それはジャンプするのにかなり大きなフープですが、 私の好みの方法 作業時にTrampを使用する方法ですWindowsで。

18
phils

Emacs wiki で解決策を確認しましたか? sshPATHにありますか? MS Windowsではplinkを使用することもお勧めします-Trampのドキュメントの「インラインメソッド」を参照してください

3
Alex Ott

まあ、これは浮浪者の欠点です。

実際の解決策は、trampが使用されているときに.bashrcを読み込まないようにすることです。 (現在は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のもう1つのデフォルトは、ランダムな引数をsshコマンドに渡す変数がないため、tramp-ssh-controlmaster-optionsに便乗する必要があります。

3
informatimago

ちなみに--_trampからSudoが必要な場合-実際には トランプなしのSudo を使用してsudoeditを使用できます。

現在、私はこのbash関数を使用しています:

erf () { Sudo_EDITOR="emacsclient -a emacs" sudoedit $@; }
0
Adobe