在 Emacs 中跟踪我的 shell 路径

在 Emacs 中跟踪我的 shell 路径

不久前,我发现了以下宝贵的代码片段,它允许 Emacs 跟踪任何ansi-term缓冲区上的当前目录。

更具体地说,如果我cd <some/path>从 Emacs 内的终端中按下C-x C-f,Emacs 将直接运行find-file<some/path>这非常非常方便。

if [ -n "$INSIDE_EMACS" ]; then
  chpwd() { print -P "\033AnSiTc %d" }
  print -P "\033AnSiTu %n"
  print -P "\033AnSiTc %d"
fi

ssh但是,如果我从 shell 访问远程计算机,则上述技巧不起作用。理想情况下,在这种情况下,如果我按Emacs 应该识别出我已经 sshed 到某台机器,并使用 trapmp在相应的机器和远程路径上C-x C-f运行。find-file

这让我想到以下两个问题:

  1. 上面的代码片段如何以及为什么起作用?
  2. 如何扩展它,以便在我 ssh 到另一台计算机后它也可以跟踪我的远程路径?

答案1

首先,正如罗伯特的评论中提到的,您的代码片段无效。之前至少需要一个分号或换行符}。打印语句可能也不正确。

然而这里已经足够猜测发生了什么,所以我会解释一下。

当您运行时ansi-term,它会调用设置了环境变量的 shell $INSIDE_EMACS。然后,shell 代码会执行其他操作,主要是重新定义函数chpwd,以便打印其他操作,其中无疑包括当前工作目录。您可以通过注意到在每个命令中,在最后一个命令正确完成后,您可能会在提示区域的某个位置看到当前目录来轻松验证这一点。

当 ansi-term 在行首看到类似目录的内容时,它会跟踪该内容。所以从这个意义上说,代码并不特殊;该目录可以通过多种方式显示,例如\w通过设置环境变量添加到提示符PS1

至于#2,请参阅“在 emacs ansi-term 缓冲区/窗口中打开远程文件:ansi-term + trapp

相关内容