2011年7月21日星期四

cygwin 与 emacs

讨论emacs和cygwin的关系,当然是在Windows下。emacs分支很多,这里具体指的是Gnu Emacs,并不是使用cygwin中附带的emacs。

(1)
在没有cygwin之前,emacs中 M-x ediff 之类命令不能使用的,因为emacs找不到相应的程序。安装cygwin之后,只要把cygwin加入到PATH中,就可以使用啦。

(2)
再谈另外一个问题。
emacs中要使用cygwin提供的类unix路径表示,需要插件cygwin-mount.el,可以到emacswiki去下载。

(3)
关于使用cygwin的终端,这里是我的一点小经验。

但可能也需要在emacs中使用shell,这不是一个简单的问题。通常有三种方法,在emacs中使用shell。一种是M-x term, 使用终端模拟器;一种是M-x shell,使用 shell mode;还有一种是M-x eshell,使用 eshell mode。

M-x term 在 windows下不能运行,所以忽略不计。在linux下,配合multi-term插件,term是个很不错的选择。

shell mode 可以运行,在没有其他任何设置情况下,用的是windows自带的cmd.exe。你可能想到把它替换成cygwin带的bash.exe。是的,网上也很多这样的设置。这样设置后,在我这里,它表现的很糟糕。首先一个问题是乱码,并不是满屏乱码,而是在 ls 后总会带一些类似"~<$g["的一行很讨厌的尾巴,让人极其抓狂。第二个问题是shell mode 是个文本,所以你要用终端的那种方式去操作,刚开始会感觉到很不适应。第三个问题是中文的支持。中文显示是可以的,但是对于目录名或者文件名中有中文时,不能正确补全,甚至于都不能执行。比如 "cd 目录",就会说找不到"目录"这个路径。
或者你想不换成bash,还是用cmd。那第一个问题就不是问题,乱码在cmd下是不存在的。第二个问题是习惯问题,可以慢慢去适应。第三个问题仍然存在,很闹心。

看起来eshell是个唯一的选择,至少在windowsx下是如此。eshell是emacs自带的用elisp写的一个模式,所以它的传说中的缺点是比较慢,可能经不起大量的操作(是的,我也不知道我在说什么)。eshell也不是尽善尽美,对中文支持还是有些问题(打开有文件名有中文的文件时,中文会乱码,提示找不到该文件),但还是处在可以忍受的地步,至少"cd 目录"可以执行,以及补全也做的不错。