非程序员的GNU Emacs使用心得......Shell Mode 第13集 把我的 kill-ring 还给我

kill-ring 在 Emacs 里面绝对是个非常精彩的设计。很多时候我都恨不能把 X Window 的 clipboard也加上一个 kill-ring。但是,很多时候当我输入 M-y 组合键回朔 kill-ring 的时候,总是会有很多很无聊的东西呆在里头。那些东西我可能永远也不会把他们贴出来,因为那根本就不是什么完整东西,很多都是一些残破的片段而已。

但是 Emacs 最初的设计显然是要把所有的东西都存在 kill-ring 里面。所以他写了那么多装进 kill-ring 的函数,常用的命令里面貌似只有一个 delete-region 是可以不进 kill-ring 的。

为了方便管理和访问这些 kill-ring 里面的大量内容,某些牛人还专门写了一个 browse-kill-ring 的扩展。我也安装了这个东西。但是我还是希望我的 kill-ring 能够更干净一些。只把那些我认为值得放的东西放到里面去。

方 法其实也不复杂。自己写扩展呗。把 Emacs 那些缺省的编辑命令替换掉就是了。在 kill-ring 里面最不希望放进去的内容就是一些写错了的内容。快速的清除和改正实际上是 Emacs 的一个巨大优势。我曾经在很多地方和很多人开过这个 telecommunication 的玩笑。因为很多人真的是在敲错了这个词的时候,会不厌其烦的敲 18 次 Backspace 键然后再把 telecommunication 这个词重敲一遍。在 Emacs 里面我们当然都知道这个错误应该怎样改正,对吧?我们有 M-DEL ,呵呵,是吧?就算是 vim,你要想输入 db 快捷键不还得先切换到命令模式么,或者说呢,切换到命令模式也就切了,起码比 18次 Backspace 要便宜多了,问题是 db 完了之后你还得再切回来不是吗?

好了,不说那么远了。这里其实就已经点到了问题的所在。 M-DEL 是我们最常用的对付手指抽筋的一个利器。但是,那些写错了的东西要占着我的 kill-ring 这个事情就很不爽了。这个事情一定是不能忍的。不能忍怎么办?那就用自己的函数把 Emacs 默认的 M-DEL 替换掉,让这些乱七八糟的东西不再进入可爱的 kill-ring 的小屋了。

代码其实很简单。而且既然写一回了,就顺手把 M-d 的定义也改了吧,这个虽然不是改错用的吧,但是对我来说,单独搞一个 word 放到 kill-ring 里去的需求实在是很罕见了。为什么这么说呢?你可以看这一篇 彻底超越拷贝和粘贴 ,因为我通常是这样做的。

闲话不说了,直接上代码了。不能不再抱怨一句,CU 这个地方不能贴 lisp 实在是太不爽了,只好还是继续贴图了。。。




然后就把这两个函数分别绑定到 M-DEL 和 M-d 的组合键上,从此之后,kill-ring 就清净了。

看 到这里,有人要说,如果我真的就是要把一个 word 删到 kill-ring 里又该怎么办呢?当然了,选中那个 word 然后 C-w 这种事情。。。哈,是吧?我就不说了。OK,如果你真的需要一个 kill word,那就把 M-d 那个函数留着不换也就是了。这个世界并不是非白即黑的。生活有很多种色彩。


posted on 2010-08-16 12:37  David Young 杨博华  阅读(1089)  评论(0编辑  收藏  举报

导航