我使用 Emacs 23 并遇到以下问题:
我从 Emacs 中运行我们项目的构建系统,例如 M-xcompile -> cd /foo/bar && ./build
构建系统现在做了一些魔法,“cd”到构建过程的某个子目录中,然后 gcc 抛出一个错误:
../src/somesource.cc:50 错误:blablabla
现在的问题是 Emacs 找不到该路径,因为它假设编译过程是在 /foo/bar 中开始的,而不是在 /foo/bar/builddir 中开始的。因此,前导“../”不适用于 Emacs,例如运行compile-goto-error时。有没有办法告诉 Emacs 尝试跳过前导“../”?
最好的解决方案可能是更改构建系统以在更改目录时发出消息。 Emacs 寻找
Entering directory `...'
...
Leaving directory `...'
(请参阅
compilation-directory-matcher
变量。如果您的构建系统在更改目录时确实发出消息,但它们不是 Emacs 正在寻找的格式,您可以将新的正则表达式添加到 compilation-directory-matcher
。)
另一个解决方案是更改
compilation-search-path
(这是目录列表)。
有几次我通过 sed 传递 make 的输出来解决。
首先,交互式调试'编译命令:make | sed 's/x/y/' 。然后重新打包为自定义的emacs交互函数。
我还没有找到一种方法来使这个项目具体化,但是我的 init.el 中的这个方法可以解决错误:
(setq directory-abbrev-alist '(("^/src" . "./")))
您需要将其调整为您想要的替换。
就您而言,您可以尝试将
../
替换为 ./
:
(setq directory-abbrev-alist '(("^../" . "./")))
如果您知道如何使其仅适用于特定项目的编译缓冲区,我很高兴知道。