我能否更改Emacs的默认编译命令?

15

当我运行compile命令时,Emacs默认使用make -k命令。然而,我几乎从来不认为在错误后继续执行make是有用的,所以我总是删除-k标志。是否有一种方法可以在我的.emacs中更改默认设置,使其只使用make命令?


11
“我能在Emacs中更改X吗?”的答案对于所有的X都是肯定的。 - AShelly
2
AShelley,完全正确。唯一真正的问题是,“我该如何在Emacs中更改X?” - Cheeso
2个回答

15
(setq compile-command "make") 

在你的 .emacs 文件中添加类似的内容应该就足够了。

要获取更多信息,请输入

C-h f compile

这段文字描述了在调用"M-x compile"时使用了哪些变量。

在此过程中,你会发现它调用了compile-command和一个

C-h v compile-command
告诉你,这默认为"make -k"。上面的所有内容都是简化版,如果需要深入挖掘,所有信息都应该在这些命令中。

为此,(setq compile-command ...)(setq-default compile-command ...)之间是否有有效的区别? - Steve
不知道 Steve - C-h f setq 和 C-h f setq-default 给了一些更多的信息,但是我无法真正理解。 - cristobalito
2
@Steve,来自Elisp参考手册关于setq-default的说明:“如果一个符号对于当前缓冲区不是本地缓冲区,并且没有被自动标记为本地缓冲区,则setq-default具有与setq相同的效果。” compile-command不是自动缓冲区本地化的,通常在执行.emacs期间它也不会成为缓冲区本地化,因此通常不会有任何影响。 - cjm

8

由于不同模式需要不同的编译器,因此我使用以下代码片段(此处显示为JavaScript):

(require 'compile)
(add-hook 'js-mode-hook
          (lambda ()
            (set (make-local-variable 'compile-command)
                 (format "jshint %s" (file-name-nondirectory buffer-file-name)))))

这个命令是运行“jshint ”。我还可以添加其他语言的钩子,并根据我的需求进行自定义。


请注意,您还可以使用 (file-name-sans-extension buffer-file-name) 来获取不带扩展名的文件名。例如,(format "rustc %s && %s" (file-name-nondirectory buffer-file-name) (file-name-sans-extension buffer-file-name)) - Jake Ireland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接