【问题标题】:Emacs compile ignoring compile-command variableEmacs编译忽略编译命令变量
【发布时间】:2018-06-11 20:50:44
【问题描述】:

最初,我在 .emacs.d/init.el 中定义了以下内容

(defun go-mode-setup ()
  (setq compile-command "go build -v && go test -v && go vet && golint")
  (define-key go-mode-map (kbd "C-c C-c") 'compile)
  )

在 go-mode 中,其他一切似乎都运行良好,但他似乎没有设置或尊重我的 C-c C-c 命令,而是产生

C-c C-c is undefined.

所以,我添加了一个明确的钩子:

(add-hook 'go-mode-hook (lambda () (define-key go-mode-map (kbd "C-c C-c") 'compile)))

这现在尊重我的 C-c C-c kbd 快捷方式,但仍然忽略我设置的编译命令。不幸的是,它似乎编译了整个文件夹,而不仅仅是我正在处理的 main.go 文件。

Compile command: make -k 

如何设置 C-c C-c 使用我设置的编译命令?

【问题讨论】:

    标签: go emacs


    【解决方案1】:

    您的代码对我有用。唯一缺少的是add-hook。您可能还想将 compile-command 设置为缓冲区本地。

    这是我绝对有效的代码:

    (defun jpk/go-mode-hook ()
      (make-local-variable 'compile-command)
      (setq compile-command "go build -v")
      (define-key go-mode-map (kbd "C-c C-c") #'compile))
    (add-hook 'go-mode-hook #'jpk/go-mode-hook)
    

    我强烈建议不要像@jdc 的回答那样重新定义compile。如果您必须定义自己的命令,请使用不同的名称。

    您可能想查看multi-compile 包,它允许您设置多个编译命令(可选特定于主模式)。

    【讨论】:

      【解决方案2】:

      这应该可行:

      (add-hook 'go-mode-hook (lambda ()
        (defun compile ()
          (setq compile-command "go build -v && go test -v && go vet && golint"))
        (define-key go-mode-map (kbd "C-c C-c") 'compile)))
      

      【讨论】:

      • 啊,迷失在愚蠢的括号里。对不起,如果我错过了。
      • 我得到了一个奇怪的“错误的参数类型:commandp,编译”我正在寻找我是否有一个作为 commandp 的命令的拼写错误,但我认为这是它正在寻找的变量的名称。
      • 也许这会有所帮助。 stackoverflow.com/questions/1250846/…
      • compile 是一个内置命令。您可能应该将新命令命名为 go-compile 或其他名称。但实际上你需要做的就是设置compile-command 变量,查看它的文档。另外,我使用包multi-compile来设置基于主模式的编译命令。
      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2013-09-10
      • 2011-11-27
      相关资源
      最近更新 更多