emacs keybinding编译C文件

时间:2010-08-28 20:20:49

标签: c emacs

这就是我想要做的事情:当按下C-c C-l时,如果没有终端窗口,则启动一个新的终端窗口,然后,在该终端中,使用一些标志和当前缓冲区的文件调用gcc。我该怎么做?

2 个答案:

答案 0 :(得分:11)

尝试内置:

M-x compile gcc ...

compile默认情况下不绑定任何键,但您可以执行以下操作:

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

人们在Emacs Wiki上编写了许多软件包。查看SmartCompileCompileCommand和类别Programmer Utils

使用M-x compile ...而不是仅仅在“终端”中运行它的好处是你得到 Cx` (又名next-error),它会将你跳转到文件中导致错误命令的行。还有命令 M-x recompile 可以满足你的期望。当然,与所有Emacs命令一样,compile命令保留编译调用的历史记录,您可以使用 Mp Mn 查看历史记录。

答案 1 :(得分:0)

我这样做是为了在附近的eshell运行我的perl单元测试:http://github.com/jrockway/elisp/blob/master/_local/cperl-extras.el#L15

代码的一般形状是:

(defun run-in-eshell (cmd use-hidden-eshell-p)
  (with-current-buffer (eproject-eshell-cd-here use-hidden-eshell-p)
    (eshell-preinput-scroll-to-bottom)
    (goto-char (point-max))
    (insert cmd)
    (eshell-send-input nil t)
    (goto-char (point-max))
    (ignore-errors
      (set-window-point (get-buffer-window) (point-max)))))

eproject-eshell-cd-here实际上是找到了eshell缓冲区。 如果您不想安装 eproject,那么你可以 循环缓冲区并自己找到它。