对我来说,运行一段我对保存在磁盘上并不特别感兴趣的一次性代码是很常见的,因此我经常在 emacs 中的缓冲区中工作,而缓冲区不附加到系统中的任何文件。
当与解释的(我有点不愿意使用这个术语)Python、Scheme 或 Lua 等语言,每种主要模式(常见模式)都提供了在编辑器内运行 REPL/解释器并直接执行缓冲区内容的方法。 (通常有一个名为 的函数send-buffer
或类似的函数)。
然而,当使用 C 语言时,我找不到类似的功能。我发现自己被迫将文件保存到磁盘,以便给出gcc
文件名作为参数。
有没有办法将 emacs 缓冲区的内容发送到 gcc,而不将文件写入磁盘?
答案1
使用C-x h
( mark-whole-buffer
),然后使用'M-|
( shell-command-on-region
),然后使用上面 @Kotte 的建议来运行gcc -x c -o tmp_prog - && tmp_prog
或者这是一个执行此操作的 elisp 函数:
(defun compile-and-run-buffer()
"Compiles the code in the buffer using gcc, run the exe and remove it."
(interactive)
(shell-command-on-region
(point-min)
(point-max)
"gcc -x c -o emacs_tmp - && ./emacs_tmp && rm emacs_tmp"))