以前、kill-region-or-backward-kill-wordというのを紹介したが、たとえばcua-modeではkill-regionに割り当てられたキーに上位互換のコマンド(cua-cut-region等)を割り当て直す、といったことをしているので、割り当ては変更せずにkill-regionの挙動を変えてしまう方が都合がいい。
というわけで、adviceを使って書き換えるとこうなる。

(defadvice kill-region
  (around kill-region-or-backward-kill-word (beg end) activate)
  (if (and (called-interactively-p 'any) (not mark-active))
      (backward-kill-word (prefix-numeric-value current-prefix-arg))
    ad-do-it))

おまけで、選択モードでないときにM-wが現在行をコピーするようにするのがこれ。(プレフィックスにも対応)

(defadvice kill-ring-save
  (around kill-ring-save-or-copy-line-as-kill (beg end) activate)
  (interactive (list (point) (mark)))
  (if (and (called-interactively-p 'any) (not mark-active))
      (copy-region-as-kill (point-at-bol 1) (point-at-eol 2))
    ad-do-it))

Emacsでイラつくことのひとつが行単位のコピー(viならY)の面倒さだが、こういう工夫で乗り越えよう。

Tags :
Categories : Tech