ansi-term在当前目录下找不到文件?

时间:2013-12-22 13:21:19

标签: emacs ansi-term

这是一个非常奇怪的问题。我认为它必然导致我ansi-term的错误配置,但我仍然无法找到它的位置。

问题是:当我在ansi-term并按M-x find-file时,提示不是当前目录,而是我在之前的查找文件操作中输入的路径。因此,当我更改目录时,它仍然显示相同的目录。所以我每次都必须进入当前目录。但它在M-x shellM-x eshell

中效果很好

2 个答案:

答案 0 :(得分:1)

在没有init文件的情况下启动Emacs时会发生同样的事情吗,即emacs -Q?如果是这样,那就是设计的行为或(特别是如果你使用开发快照)可能是一个Emacs错误。

如果没有,则递归地对您的init文件进行二等分,以找出它的哪一部分导致此行为。为此,请使用命令comment-region(请参阅doc中的前缀arg)来注释和取消注释文本块。注释掉你的初始文件的1/2,然后是3/4,然后是7/8,..., 每次测试未注释部分是否导致或消除有问题的行为。您将很快确定导致该行为的原因。

答案 1 :(得分:0)

由于emacs的路径与术语的路径不同,因此只能使用emacs命令“cd”进行更改。

因此,要解决此问题,我将以下代码添加到我的emacs配置文件中。方法是

  1. 找到当前条款的pid
  2. 找到此pid的当前工作目录(cwd)。
  3. 我使用多项,我认为该方法在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>时,emacs将更改为与当前学期路径相同的路径。

    顺便说一句,我使用的是Mac Os。如果您使用的是Linux,则可以使用以下代码查找cwd。

    (cwd (file-truename (format "/proc/%d/cwd" pid)))