使用Emacs这么多年,越用功能越多,开发C++,Java,HTML,JavaScript,访问MySQL,CMake编辑。上新闻组,收Gmail,Emacs Lisp语言是其中的灵魂。
自己开发或者修改emacs的扩展模块就需要掌握ELisp,而且Lisp既然是人工智能语言,学会它会让自己的思维上一个层次。有这么多好处,还等什么呢?立刻行动起来吧。
从最简单的如何在Emacs上执行加法开始:
输入M-x:shell进入shell终端,然后输入
(+ 2 3)
将光标放在最后一个括号后面,按下C-x C-e ,可以看到Mini-buffer上面显示结果5。函数实际上是这个
M-x:
eval-last-sexp
如果有多个元素的话,写法可以换行,写成如下形式:
'(rose violet daisy buttercup)
注意前面的' 符号是告诉Emacs不要执行这个list,仅仅是原样输出'符号后面的list,因此C-x C-e的结果就是
(rose violet daisy buttercup)
(eval-buffer "add.el" (get-buffer-create "output"))
(defun add2 (x) (+ 2 x)) (print (add2 8))
eval-buffer is an interactive built-in function in `C source code'. (eval-buffer &optional BUFFER PRINTFLAG FILENAME UNIBYTE DO-ALLOW-PRINT) Execute the current buffer as Lisp code. When called from a Lisp program (i.e., not interactively), this function accepts up to five optional arguments: BUFFER is the buffer to evaluate (nil means use current buffer). PRINTFLAG controls printing of output: A value of nil means discard it; anything else is stream for print. FILENAME specifies the file name to use for `load-history'. UNIBYTE, if non-nil, specifies `load-convert-to-unibyte' for this invocation. DO-ALLOW-PRINT, if non-nil, specifies that `print' and related functions should work normally even if PRINTFLAG is nil. This function preserves the position of point. [back] [forward]
;; elisp (defun eval-buffer2 () (interactive) (eval-buffer nil (get-buffer-create "output")))
如何像执行shell脚本一样运行el文件呢?
这是一个很实用的功能,实际上也是我的一个主要目的,这么强大的语言,用好了,比shell脚本方便多了,而且性能也搞。甚至可以代替Java编写程序。
现在我的test.el文件内容如下:
(defun add2 (x) (+ 2 x)) (print (add2 8))
emacs --no-site-file --script /home/chenshu/test.el
注意上面的命令在服务器上运行没有问题,
在Ubuntu Desktop上需要安装并使用emacs24-nox
apt-get install emacs24-nox