我是Emacs 的新手,我想在一个单独的窗口中使用eshell执行C程序(顶部带有C文件的窗口和带有eshell的底部窗口;用Cx来回切换o)。不幸的是,我必须在eshell中编写gcc program.c -o program
然后./program
。
在我的.zshrc中我有一个别名
c () {
gcc $1 && ./a.out
}
这意味着在普通终端我可以运行c program.c
,将两个步骤合二为一。但是,当然,eshell并没有阅读.zshrc。那么如何编写一个elisp文件来完成同样的事情呢?
答案 0 :(得分:3)
这是我多年来一直在努力的事情。添加Emacs标题行,如以下示例所示:
/* -*- mode: C++; compile-command: "gcc -s -O3 termcolor.c -o termcolor; ./termcolor" -*- */
#include <stdio.h>
int main (void) {
printf("[0;34;41mHello world![m\n");
printf("[5;34;41mHello world![m\n");
printf("[1;5;34;41mHello world![m\n");
return 0;
}
我让C-x c
别名来调用M-x compile
(至少在C ++模式下,我在这里也设置了,即使它在技术上是一个C文件),所以它会调用compile-command
这里指定的......包括执行。
所以几乎立刻就得到了
-*- mode: compilation; default-directory: "/tmp/" -*-
Compilation started at Sat Dec 24 13:22:23
gcc -s -O3 termcolor.c -o termcolor; ./termcolor
[0;34;41mHello world![m
[5;34;41mHello world![m
[1;5;34;41mHello world![m
Compilation finished at Sat Dec 24 13:22:24
编译缓冲区中的。对我来说效果很好。
答案 1 :(得分:0)
只需进入eshell并输入alias c 'gcc $1 && ./a.out'