我可以更改 emacs 的默认编译命令吗?

Posted

技术标签:

【中文标题】我可以更改 emacs 的默认编译命令吗?【英文标题】:can I change emacs' default compile command? 【发布时间】:2011-01-05 20:06:44 【问题描述】:

当我运行compile 时,Emacs 默认使用命令make -k。但是,我几乎从不认为在出现错误后让make 继续很有用,所以我总是删除-k 标志。有没有办法将我的.emacs 中的默认值更改为make

【问题讨论】:

对于 X 的所有值,“我可以在 Emacs 中更改 X”的答案都是“是”。 阿雪莱,完全正确。唯一真正的问题是,“如何在 Emacs 中更改 X?” 【参考方案1】:
(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 - C-h f setq 和 C-h f setq-default 提供了更多信息,但无法真正破译。 @Steve, from the Elisp Reference manual on setq-default: "如果 SYMBOL 不是当前缓冲区的本地缓冲区,并且没有自动标记为缓冲区本地,setq-default 与 @987654329 具有相同的效果@。” compile-command 不会自动缓冲本地,在执行.emacs 的过程中它通常不会是缓冲本地,所以它通常不会产生影响。【参考方案2】:

由于我需要针对不同模式使用不同的编译器,因此我使用了以下 sn-p(此处显示为 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))

以上是关于我可以更改 emacs 的默认编译命令吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 windows 系统上用 Emacs 编译 C

Python环境搭建以及编译器Emacs

我可以查看使用 MSBuild 实际执行的构建命令吗?

Emacs shell 无法识别 python 命令

cmake中修改默认编译器的两个问题

emacs 中 grep-find 的默认字符串