【问题标题】:Tab Completion In Emacs shell-mode SSH SessionsEmacs shell 模式 SSH 会话中的选项卡完成
【发布时间】:2011-01-13 17:41:51
【问题描述】:

我当前的 emacs 使用模式导致我打开了几个 shell 模式缓冲区,每个缓冲区都运行一个 ssh 会话。不过,我遇到了一个问题——当我尝试在远程会话中使用制表符完成文件名和其他内容时,shell 会尝试使用本地机器上可用的完成,而不是远程机器上可用的完成。

例如,如果文件~/foobar 存在于本地计算机上而~/frob 存在于远程计算机上,则键入~/f 并按Tab 会导致~/foobar 而不是正确完成。如果我在 emacs 之外使用 ssh 并尝试相同的操作,我会得到正确的 ~/frob 补全。

如何获得 tab-completion 以完成它在正常 ssh 会话中的方式?

稍后注意:M-x cd RET /ssh:host.example.com:/path/to/me 似乎也促使它能够优雅地处理制表符完成。

【问题讨论】:

标签: linux bash emacs ssh tab-completion


【解决方案1】:

在 ssh-ing 到其他机器时,Emacs 无法跟踪当前目录(默认目录)。

您可以在当前的 shell 缓冲区中手动将 default-directory 设置为像 /ssh:YOURHOST:/home/dir" 这样的流浪文件名。 p>

我主要通过 tramp-bookmarks/shell 在远程机器上启动 shell 会话。 Tramp 自动设置 default-directory。 但是远程文件的目录跟踪存在一个错误,该错误已在主干中修复(未发布)。

http://comments.gmane.org/gmane.emacs.bugs/39082

【讨论】:

  • 感谢尤尔根!顺便说一句,您可以使用此 elisp 反向移植该目录跟踪错误修复: (add-hook 'comint-mode-hook (lambda () (set (make-local-variable 'comint-file-name-prefix) (or (file-远程-p 默认目录)“”))))
【解决方案2】:

不要运行 M-x shell 并在远程计算机上运行 ssh,而是访问远程计算机上的一个目录(使用 Tramp),然后在该 Dired 缓冲区中运行 M-x shell。

【讨论】:

  • 下次遇到这种情况我一定会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
相关资源
最近更新 更多