这是一个非常奇怪的问题。我认为它一定是导致我的配置不正确ansi-term
,但我仍然找不到它在哪里。
问题是:当我进入ansi-term
并按下M-x find-file
时,提示不是当前目录,而是我在之前的查找文件操作中输入的路径。所以当我改变目录时,它仍然显示相同的目录。所以我每次都必须进入当前目录。但它在M-x shell
和M-x eshell
当你在没有你的 init 文件的情况下启动 Emacs 时会发生同样的事情emacs -Q
吗?如果是这样,那是设计的行为,或者(特别是如果您使用开发快照)可能是 Emacs 错误。
如果不是,则递归地一分为二您的 init 文件,以找出它的哪一部分导致了这种行为。为此,请使用例如命令comment-region
(参见文档中的前缀 arg)来注释和取消注释文本块。注释掉初始化文件的 1/2,然后是 3/4,然后是 7/8,...,每次测试未注释的部分是否会导致或消除有问题的行为。您将很快确定导致该行为的原因。
由于emacs的路径和term的路径不同,只能通过emacs命令“cd”来改变。
所以为了解决这个问题,我将以下代码添加到我的 emacs 配置文件中。方法是
我使用multi-term,我认为方法在ansi-term上会类似。
(defadvice term-send-input (after update-cwd)
(let* ((pid (process-id (get-buffer-process (current-buffer))))
(cwd (shell-command-to-string
(format "lsof -p %d -Fn | awk 'NR==2{print}' | sed \"s/n\\//\\//\" | tr -d '\n'" pid))))
(cd cwd)
(message (concat "change emacs path to: " cwd))))
(ad-activate 'term-send-input)
然后您可以将 term-send-input 的键绑定到<enter>
. 当你按<enter>
term时,emacs将变为与term当前路径相同的路径。
顺便说一句,我使用 Mac OS。如果你在 Linux 上,你可以使用下面的代码来查找 cwd。
(cwd (file-truename (format "/proc/%d/cwd" pid)))