如何强制终止Emacs Tramp连接?

5
我经常使用emacs中的TRAMP。但是,有时服务器会宕机,tramp会等待超时。通常是在ido-mode中执行C-x-f打开一个新文件后发生的。我必须等待非常长的时间,这很烦人。有没有一种简单的方法告诉TRAMP超时并让ido-mode继续。我尝试了C-g,但打开文件的选项从未出现。

无论 C-g 在这种情况下是否有效可能取决于您的操作系统(以及某些“异国情调”(即非Unix)平台,Emacs是如何编译的,甚至可能是ssh或其他辅助程序是如何编译的)。 - Gilles 'SO- stop being evil'
啊,我正在使用Cygwin的Emacs和Cygwin的SCP。 - User1
3个回答

2
在那些(频繁出现的) tramp 崩溃的情况下,我只需使用 C-g 终止该进程,然后杀死 tramp 缓冲区,就可以保存文件了。
M-x kill-buffer RET *tramp.*

1
确实,杀死与相关连接的 tramp 缓冲区是解决 tramp 问题的一种有用的通用方法。(我不确定这是否是发生非常频繁的事情的最佳解决方案,但肯定是要记住的好方法。) - phils
当我说经常时,我的真正意思是,当我返回编辑一个由tramp打开的文件时,可能已经过去了一小时以上(这并不是非常频繁),我非常确定tramp已经进入了深度睡眠。自从我发现了C-g和删除tramp缓冲区的方法后,我与emacs的关系有所改善。顺便问一下,是什么阻止您为我的答案点赞呢? - yPhil
我没有点赞,因为它似乎与问题没有直接关联——杀死tramp缓冲区可能非常有用,但它无法让远程服务器恢复正常。 - phils

1

我找到了一个提示,可以将痛苦的等待时间限制在5秒钟内。将以下行添加到 .ssh/config 文件中:

Host *
     ServerAliveInterval 5

然而,五秒钟后,你仍然无法选择文件。所以,当它失败时,只需使用 C-x b 切换到未连接到故障服务器的缓冲区,然后从那里使用 C-x-f 就不会花费太长时间。


0

我经常使用TRAMP,但从未遇到过这样的超时情况。尝试像这样做:

(defun tramp-find-file-timeout ()
  (when tramp
    (with-timeout (4)
      (keyboard-quit))))
(add-hook 'find-file-hook 'tramp-find-file-timeout)

我使用了thisthis来提出这个建议。可能有比keyboard-quit更好的选择适合你。

哦,这看起来应该可以工作,但由于某些原因它失败了。真遗憾! - User1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接