Emacs是什么?它是个文本编辑器,emacs和windows自带记事本一样都是文本编辑器,就像我和奥巴马都是人类一样。我为什么选择emacs而不是vim?理由有三:

  • emacs是gnu计划的第一个项目,可以说它和理查德·斯托曼的大胡子一样有着图腾般的宗教性象征意义,这是vim没有的
  • emacs的根基是用c写的一个lisp解释器,其他部分全是用lisp写的。你不觉得这个构想非常酷么?《社交网络》里马克伯格就是用emacs
    和perl黑掉了哈佛(是哈佛么?)所有的网站。你不觉得emacs本身就很酷么?有点“专业黑客就要用emacs”的感觉么?
  • 也是最重要的一点,emacs的扩展语言是Lisp,反正早晚都要学Lisp的,而vim的扩展语言是一个特有的普通脚本语言,学了只是浪费宝贵的时间,反正我是这么认为。

今天基本搞定了emacs,指的是搞定了这货作为一个编辑器的基本功能,接下来的路还长的很。我的环境是32位linux mint13 xfce,emacs23.3 从源安装。

首先是个人配置文件,就是和.vimrc一样的玩意儿,安装vim后,会默认建立这么一个东西,并往里写入一些脚本,就像.bashrc一样。但是emacs默认是没有这个文件的。根据gnu网站的说法,这货叫做init file,程序会默认到家目录下寻找.emacs,如果没有的话,到.emacs.d/下寻找init.el,但是默认是全没有的。有.emacs.d目录,但是下面只有auto-save-list。自己手动建立一个(在家目录下),emacs .emacs.

内容是:

(global-unset-key (kbd "C-SPC"))
(set-default-font "DejaVu Sans Mono-14")
(set-fontset-font (frame-parameter nil 'font)
'han'("WenQuanYi Micro Hei"))
(defun toggle-fullscreen()
(interactive)
(x-send-client-message
nil 0 nil "_NET_WM_STATE" 32
'(2 "_NET_WM_STATE_FULLSCREEN" 0))
)
(run-with-idle-timer 0.1 nil 'toggle-fullscreen)

基本都是google来的,以前也不会lisp,凭着一点点编程基础,勉强能看懂不到 一半。

(global-unset-key (kbd “C-SPC”)) 指的是解除ctrl+空格的键位绑定,因为和系统的切换输入法冲突。

(set-default-font “DejaVu Sans Mono-14″)
(set-fontset-font (frame-parameter nil ‘font)
‘han’(“WenQuanYi Micro Hei”))

指的是切换默认字体,默认字体难看而且太小。主要意思呢大概就是说设置DejaVu Sans Mono为默认情况下的字体,字号为14号。然后再设置一个字符集,设置字符集字体为WenQuanYi Micro Hei(文泉驿微米黑),当编码为非拉丁字母时,系统自动会在/etc/fonts/conf.avail中寻找编码,比如汉字,就对应han,泰文就对应thai,等等。当系统找到编码之后呢,就搜索编码后面的字体了,如果成功找到了,便显示出来,找不到就报错。

(defun toggle-fullscreen()
(interactive)
(x-send-client-message
nil 0 nil "_NET_WM_STATE" 32
'(2 "_NET_WM_STATE_FULLSCREEN" 0))
)
(run-with-idle-timer 0.1 nil 'toggle-fullscreen)

指的是打开emacs时自动全屏,因为我的屏幕太小,这是在ubuntu论坛找到的,意思是啥不明白。这样打开emacs时就会自动放大字体然后全屏了,但是依然ctrl+空格无法切换输入法,emacs显示键位未绑定,但是中断到这里被拦截了,没有继续向下传。我是修改了ibus的快捷键,从c+空格换成shit+空格。

但是切换为拼音输入法也无法输入中文,输入不进去,google之后sudo emacs /etc/environment,添加

LC_CTYPE="zh_CN.UFT-8"

修改完毕以后,重启生效。可能因为我安装的是英文系统,这样改过后显示依然是英文。emacs就可以输入中文了,再加上一行

(run-with-idle-timer 0.1 nil 'delete-other-windows)

本来打开后会有一个额外的开始界面,这样就去掉了。这和打开后手动按C-x 1 效果是一样的。

我对emacs的理解

emacs的底部是一个用c书写的lisp解释器,这只上所有都是用lisp书写的,也就是说一切都是lisp。你在buffer里打字时实际上是一个单纯的文本编辑器。所有的Ctrl-,alt- 组合键运行的都是绑定的命令,这在帮助里可以看到。比如C-x 1运行了delete-other-windows这个Lisp函数。一切都是lisp函数在起作用,你也可以写自己的lisp函数来定制emacs,可以把简单的函数写在。emacs文件里,也可以写在el文件中然后在.emacs里载入,使用时可以绑定在相应键位上,也可以M-x来执行。总之,emacs的功能全来自那些复杂的lisp函数,离开这些代码,emacs就只是一个单纯的记事本而已。