我现在是比较习惯 Emacs 的快捷键,而且最近使用的键盘按方向键不太方便,所以很希望所使用的软件都能用 Emacs 的快捷键来操作。
一开始,我使用 XKeymacs (日本人开发的一款小工具),它能把 Windows 下所有应用程序的快捷键都转换成 Emacs 的。不过这个软件不太稳定,和 mitty 等软件配合得也不好;可配置性也不强,只能选择是否启用某些快捷键。
后来我想到 AutoHotKey,它算是一门脚本语言,可以用脚本模拟鼠标、键盘操作,控制 Windows 窗口等,最主要的是可以给任何操作绑定热键。就定义快捷键而言,它绝对是无可匹敌了,我仔细研究了一下它的文档,发现它只能用来组合现有功能,而且不具备操作文本的能力。
简单地说,我用 AutoHotKey 能做到的地步就是将 Windows 记事本一些现有的快捷键切换成和 Emacs 一样,比如用 Ctrl-D 代替 Delete、用 Ctrl-A 代替 Home 等。可是,诸如 Emacs 中 Meta-a 可以移动到句子的开头这种功能,因为记事本本身没提供,因此 AHK 也无能为力了。
所以,我在想有没有另一种语言,来设定一些全局的编辑功能?无论光标在哪个编辑窗口里,按 M-f 都能往前移动一个 word、按 M-v 往后移动一个 page,等等。本来,Emacs-Lisp 是很不错的,可惜它只能用来定制 Emacs,没办法去增强其他程序的功能。而 AHK 可以通过组合来增强现有程序的能力,却没办法编辑文本。如果能有一种结合两者的优点的软件就好了。
即 Emacs 的配置是对整个操作系统有效,或者是操作系统里所有牵涉到编辑的地方都能自动调用 Emacs 来编辑。
想象一下:有一个工具(或者一门编程语言)能从系统级别上做全局的“光标”控制,无论当前光标处在哪个编辑窗口中(记事本、Word、Outlook 的邮件正文等等),它发送一个类似 forward-char 的命令都能令光标向前移动一个字符,发送 backward-sentence 就后退一句话。如果有这样的工具,再配合 AHK 将这些命令绑定成快捷键,就能在所有文本输入的地方使用相同的编辑功能!
总的来说,我认为“文本编辑”功能是系统级的功能,因为它无处不在,可惜每个软件都不得不实现自己的“编辑器”,快捷键各自为政。我认为这是GUI至今没有赶上CLI的功能就是readline,readline能为CLI提供统一的编辑体验:无论什么时候、无论在哪儿,你都可以使用统一的快捷键(emacs风格或vi风格)做编辑操作。
后记
从网友的评论来看,他们都没有理解我的观点。首先,我并不是想要一款能完成所有任务的万能的软件,而抛弃所有其他应用软件。比如现在看 pdf 已经有很多优秀的软件了(比如 SumatraPDF),如果就是为了我个人使用的话,我实在想不出任何理由再开发一款 Emacs 的插件专门看 pdf(虽然这看起来的确很酷)。
我主要是看到现在的软件都各自为政,拥有自己一套操作方式。比如删除整一行在 Vim 里是 dd,在 Eclipse 里是 Ctrl-D,而到了 Emacs 里是 C-a C-k。我真正想要的是一种能从系统的角度配置一套符合自己习惯的统一操作的方法。
我相信大家也会有类似的经历:拿到了一个代理 ip 地址和端口,兴冲冲地配置了 ie。要下载?还要配置迅雷等下载工具。要聊天?那 QQ 什么的也要配。悲剧的是有些工具还是弱到不能设置代理!或者有些屁大的软件也很崩溃地自带一个设置代理功能(也不管用不用得上)。但如果有一个软件,在要在其中配置了代理信息,然后所有其他应用程序的网络通信都由它接管(就像拨号连接一样),不用再挨个去设置了,软件开发人员也可以省下不少精力去开发原本就与软件本身无关的功能了。而且这个软件本身的功能也更容易提高,比如增加 filter 功能什么的。
如前文所述,普通的操作已经可以通过配置 AHK 来统一了。于是我想更进一步统一配置所有的文本编辑操作(不一定绑定得和 Emacs 一摸一样,但关键是能像 Emacs 这样可配置)。
如果你也是程序员,也了解过“面向方面编程”,相信你已经看出来,我是希望操作系统提供自定义“文本编辑”的AOP。