LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 955|回复: 8

如何为Emacs定义一个编译当前文件的命令

[复制链接]
发表于 2006-1-11 09:52:43 | 显示全部楼层 |阅读模式
每次调用M-x compile来调用太麻烦了,而且有时候要用make,有时侯是直接用gcc 编译当前是文件。
我想写一个函数,比如叫gcc,用M-x gcc来调用的时候,采用gcc -Wall (当前正在编辑的文件名)来编译,同时又要能想compile编译的时候那样把错误列出到一个*compilation*的缓冲区里面,而且可以点击错误信息定位到原来的文件。
我查了一下compile函数,好像可以传递给它参数。但是我不知道如何把两个字符串联接在一起(就是把"gcc -Wall "和(buffer-name)[最好是能得到file-name]连在一起作为一个字符串传递给compile。请问这个东西该怎么写?
我的大概框架是:

  1. (defun gcc ()
  2.   (interactive "")
  3.   (let ((old-command (compile-command)))
  4.     (compile (字符串联接 "gcc -Wall " (文件名)))
  5.     (setq compile-command old-command)
  6.     )
  7.   )
复制代码

中间不知道改如何填,还有不知道那个setq的用法是否正确,我是想保存原来的默认的compile的命令。
发表于 2006-1-11 10:21:20 | 显示全部楼层
这样做的结果未必比使用 M-x compile 方便。在第一次使用 M-x compile 以后,就可以使用 M-x recompile 来编译了。在第一次使用 M-x recompile 以后,就可以使用 C-x ESC ESC 来编译了。按下 C-x ESC ESC 会在 Mini-buffer 中出现最近执行过的命令的列表,通常就是 recompile。如果不是,可以按几次 M-p,或者用 M-r 来搜索。所以我想如果用 make 的话会更方便一些。

可以用 concat 函数来连接字符串。你可能还会需要下面的代码:
  1. (cd (file-name-directory buffer-file-name))
  2. (file-name-nondirectory buffer-file-name)
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 13:29:22 | 显示全部楼层
呵呵!我这样做的原因是有时侯要临时写一些试验性的小文件,临时编译一下,但是又不改变先前的默认命令。
还有就是ESC键按起来好像很不方便呢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 13:37:15 | 显示全部楼层
写好了!可以用了!呵呵!Emacs真是太强大了!
  1. ;; compile simple c file use gcc
  2. (defun gcc ()
  3.   "compile simple use gcc"
  4.   (interactive "")
  5.   (let ((old-command compile-command))
  6.     (cd (file-name-directory buffer-file-name))
  7.     (compile (concat "gcc -Wall " (file-name-nondirectory buffer-file-name)))
  8.     (setq compile-command old-command)
  9.     )
  10.   )
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-1-11 13:38:07 | 显示全部楼层
原来的当前目录是不是也要恢复一下?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 13:42:54 | 显示全部楼层
我发现Emacs好像我buffer到那个文件之后它自动cd到这个文件所在的目录呀。
如果我到了当前要编译的buffer,它不是自动cd到当前目录了吗?是不是根本不用cd命令呀?
回复 支持 反对

使用道具 举报

发表于 2006-1-11 14:09:22 | 显示全部楼层
好像是的,Sorry :p
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 16:01:44 | 显示全部楼层
唉唉!有时间一定要好好学习一下emacs的lisp。
回复 支持 反对

使用道具 举报

发表于 2006-1-11 16:48:40 | 显示全部楼层
C-h i memacs lisp introduction RET
C-h i melisp RET
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表