我正在尝试解决为什么以前可以工作的 emacs+tramp 连接现在不起作用。起初我以为这可能是 Aquamacs 的问题,但我在 OSX 上加载了基于 23.3 (9.0) 版本的 Emacs.app,它也不起作用。远程主机运行 FreeBSD 7.4,用户 shell 默认为 /usr/local/bin/bash。
如果我尝试打开一个文件,例如:
Find file: /username@remote_host:~/folder/
...迷你缓冲区中的光标停在:
Find file: /username@remote_host
......我不能再输入任何东西了。令人困惑的是,我也无法 Cg 阻止它。Emacs 只是锁定。它在一分钟左右后超时,但在那之前是不可用的。
我的 .emacs 文件的相关行是:
(require 'tramp)
(setq tramp-debug-buffer t)
(setq tramp-verbose 9)
(setq tramp-default-method "ssh")
(setq tramp-password-prompt-regexp ".*[Pp]assword: *$")
(setq tramp-shell-prompt-pattern "^[^;$#>]*[;$#>] *")
(setq password-cache-expiry nil)
相关机器上的密码和 shell 提示(匿名)如下所示:
Password:
[username@remote_host ~]$ # with a single space at the end
tramp-password-prompt-regexp 的值为".*[Pp]assword: *$"
tramp-shell-prompt-pattern 的值为"^[^;$#>]*[;$#>] *"
最后,调试缓冲区的最后几行:
14:36:40.271851 tramp-get-connection-property (7) # check-remote-echo nil
14:36:41.090876 tramp-wait-for-regexp (6) #
are you awake
#$
14:36:41.091037 tramp-wait-for-regexp (1) # File error: [[Regexp `\(^\|\)[^#$
?$' not found in 60 secs]]
我不确定不同版本的 shell 正则表达式来自哪里,但无论如何,我什至没有进入密码提示符。
有什么想法我可能做错了吗?
附录
使用 GNU Emacs 22.1.1(mac-apple-darwin,Carbon 版本 1.6.0),Tramp 版本 2.0.55,可以工作。但是,我不愿意依赖它,因为它基于终端窗口,并且我已经改变了 Cmd、Ctrl 和 Caps Lock 以使我的工作站感觉更像我的家用机器,然后告诉 Emacs 处理 Cmd键作为备用 Ctrl;不幸的是,终端窗口包含几个 Cmd 键组合。
此外
从Emacs For OS X下载了 Emacs-22.3-i386-10.5.7.dmg ,它使用 tramp 2.0.58-pre。这也有效,并且环境捕获键组合的问题更少。但我仍然不明白为什么 Aquamacs 和后来的 Carbon Emacs 版本停止工作。