ディスクに保存することに特に興味のないワンタイムコードを実行するのが一般的であるため、システム上のどのファイルにも添付されていない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"))