EmacsからTramp経由でリモートファイルを開こうとしました。
(require 'tramp)
(setq tramp-default-method "ssh")
Emacsからメッセージを受け取ります
Tramp:リモートシェルからのプロンプトを待機しています
Emacsがハングし、その後のアクションに応答しませんでした
EmacsはWindowsにインストールされました。リモートファイルはLinuxマシン上にありました。
接続先のアカウントが奇妙で奇妙なシェルプロンプトを使用している場合、これがトランプトリップの原因となる可能性が高くなります。
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
私のアプローチ:
tramp-terminal-type
が「ダム」に設定されていることを確認してくださいM-x customize-variable RET tramp-terminal-type
case "$TERM" in "dumb") PS1="> " ;; xterm*|rxvt*|eterm*|screen*) PS1="my fancy multi-line \n Prompt > " ;; *) PS1="> " ;; esac
ここで重要なのはWindows sshクライアントであり、 'ssh' Trampメソッドはほぼ間違いなく間違っています。
Cygwinを使用している場合は、「sshx」メソッドを使用する必要があり、おそらく認証を処理するためにssh-agentを使用する必要があります。詳細はこちら: EmacsW32とcygwinでtrampを使用することは可能ですか?
Cygwinの完全インストールを必要としないスタンドアロンのsshクライアントにも同じことが当てはまると思いますが、dosはCygwin DLLを使用します。 (私はそのことを見たのを覚えていると確信しているので、これについて言及します。)
PuTTYを使用している場合は、Alex Ottが指摘したように、「plink」メソッドが必要です。 Wikiで不十分な場合は、ここで search を使用すると、そのアプローチを構成するためのソリューションが表示されます。
私が提案できる他の選択肢は次のとおりです:
CygwinネイティブのEmacsを使用します。これはNTEmacsより遅くなりますが、Trampは 'ssh'メソッドでうまく機能するようで、パスワードプロンプトも機能します。
LinuxをホストするVM、そしてその上でEmacsを実行します。それはジャンプするのにかなり大きなフープですが、 私の好みの方法 作業時にTrampを使用する方法ですWindowsで。
Emacs wiki で解決策を確認しましたか? ssh
はPATH
にありますか? MS Windowsではplink
を使用することもお勧めします-Trampのドキュメントの「インラインメソッド」を参照してください
まあ、これは浮浪者の欠点です。
実際の解決策は、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
に便乗する必要があります。
ちなみに--_tramp
からSudo
が必要な場合-実際には トランプなしのSudo を使用してsudoedit
を使用できます。
現在、私はこのbash関数を使用しています:
erf () { Sudo_EDITOR="emacsclient -a emacs" sudoedit $@; }