自动更改编译模式当前目录?


16

目前,我的编译命令如下:

cd ~/somedir && ./somescript.sh

这样可以防止emacs查找发生错误的文件(并打开该文件)。

我当然可以M-x cd手动运行,但是有没有办法告诉缓冲区以编程方式更改其当前目录?


1
这也是我一直在尝试做的事情。理想情况下,您可以在基本目录中的.dir-locals.el中放置一些可以起作用的文件(我见过在默认目录中设置默认目录的hack会引起不良的副作用,而仅针对编译模式进行设置不会似乎没有用)。
朱利安·斯奎尔

Answers:


7

最后,我放弃了对当前目录的依赖,因为它过于侵入性,而诸如ido之类的其他东西最终都会受到影响...

相反,我使用将构建目录添加到 compilation-search-path

(add-to-list 'compilation-search-path "/path/to/build")

找到以下问题:如何调整Emacs的编译错误从编译缓冲区获取的路径?

该问题还说明,如果发出某些特定的字符串,则目录匹配器可以自动更改目录:

Entering directory `...'
... 
Leaving directory `...'

这显然也是可定制的。


这看起来像一个可靠的解决方案。如果它适合您,请随时接受。
马拉巴巴

请注意,如果您需要构建系统在中找到一些文件,则此方法可能无法工作/path/to/build
安德烈·霍尔兹纳

5

您可以简单地在要调用编译命令的目录中创建Dired缓冲区,以用作锚点。当您要编译时,切换到Dired缓冲区并运行compile命令。compile将在Dired缓冲区的此目录中运行其命令。这样做的好处是,您不需要M-x cd在编译时遍历目录。

如果使用projectile该命令,则它具有一个名为的命令projectile-compile,该命令会在识别的项目根目录下自动运行compile命令projectile


4

这个替代命令应该可以解决这个问题:

(defun compile-in-dir (dir command)
  (interactive "DCompile in directory: \nsCommand: ")
  (let ((default-directory dir))
    (compile command)))

或者,使用常规compile命令运行编译后,可以(setq default-directory "~/somedir")*compilation*缓冲区中进行评估。这样可以使错误导航正常工作,但是它可能会停止运行,recompile并且朋友们无法做正确的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.