Emacs:stream氓不起作用

我试图通过Tramp通过Emacs打开一个远程文件。

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

我收到了Emacs的消息

stream氓:等待来自远程shell的提示

Emacs挂起,之后没有任何回应

Emacs安装在Windows上; 远程文件在Linux机器上。

如果您连接的帐户使用了一些奇怪的花哨的shell提示符,那么这很有可能导致stream氓访问。

以root身份login,然后input

 PS1="> " 

(这是一个正常的,标准的shell(ZSH,BASH,younameit)提示,一个tramp会理解的),然后切换到用户帐户,启动emacs -q (确保你的.emacs不会造成这个混乱)到Cx Cf /sudo:root@localhost:/etc/hosts ,看看有什么。

你可以(不推荐)自定义正则expression式来定义tramps的期望:

 Mx customize-variable RET tramp-terminal-prompt-regexp 

我的方法是:

  1. 确保variablestramp-terminal-type设置为“哑”

Mx customize-variable RET tramp-terminal-type

  1. testing你的。* shrc并提供正确的提示:
 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来处理authentication。 细节在这里: 使用EmacsW32和cygwin的stream行可能吗?

我想这同样适用于任何独立的ssh客户端,不需要完整的Cygwin安装,但使用Cygwin DLL。 (我提到这一点,因为我很确定我记得看到这样的事情。)

如果您使用PuTTY,那么您需要“plink”方法,如Alex Ott指出的那样。 如果Wiki不够用,那么这里的search可能会提出configuration这种方法的解决scheme。

我可以build议的其他select是:

  1. 使用Cygwin本地Emacs。 这将比NTEmacs慢,但stream浪汉似乎与'ssh'方法很好,并且密码提示也适用。

  2. 在你的Windows机器上托pipe一个Linux VM,然后运行Emacs。 这是一个相当大的跳跃,但这是我在Windows中使用Tramp的首选方式 。

你有没有检查Emacs维基解决scheme? ssh是在PATH ? 还build议在MS Windows上使用plink – 请参阅Tramp文档中的“内联方法”一节

顺便说一句 – 如果你需要tramp sudo – 你可以sudoedit 没有stream浪汉 sudoedit

目前我正在使用这个bash函数:

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