这就是我想要做的事情:当按下C-c C-l时,如果没有终端窗口,则启动一个新的终端窗口,然后,在该终端中,使用一些标志和当前缓冲区的文件调用gcc。我该怎么做?
答案 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上编写了许多软件包。查看SmartCompile,CompileCommand和类别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,那么你可以
循环缓冲区并自己找到它。