Emacs 中的 Ctrl+w 快捷键,默认的功能是剪切选中的文本(marked region);如果没有选中的文本,其结果令人琢磨不透,有时候向前删除一大段内容,有时候向后删除一大段内容(TODO)。

在我的 AndroidStudio 中,Ctrl+w 的配置为 如果有选中的文本,则剪切之;如果没有选中的文本,则删除此行。

作为一个处女座程序员,怎么可以容忍同一组快捷键在不同的 IDE 中行为不一致呢?
所以花了大概半个小时,研究出了这段 elisp 代码:

1
2
3
4
5
6
7
8
9
10
11
;; -------------------------
;; Kill region or kill line
;; -------------------------
(defun kill-region-or-kill-line()
"Kill marked region if marked or kill whole line if not marked."
(interactive (if (use-region-p)
(kill-region (region-beginning) (region-end))
(kill-whole-line))))
;; Bind shortcuts
(global-set-key (kbd "C-w") 'kill-region-or-kill-line)

说起来,使用 Emacs 已经好几年了,却没有深入下去,这算是一个好的开始。