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
那個函數留著不換也就是了。這個世界並不是非白即黑的。生活有很多種色彩。