コメントかつコピー
スクリプトを作ったりしてるときによくあるのが、ちょっと変更するけどオリジナルは取っておくという操作。大抵は変えたい部分を複製して、オリジナルをコメントアウトすることになる。Emacsで愚直にやると、わざわざ該当部分をマークしてコピー(M-w)、もう一回マークし直してコメントアウト(C-;)、張りたいところに移動してペースト(C-y)することになる。これだとそもそも面倒だし、なにより変えたい部分が大きいようなときにさらに面倒くさい。マークするために一番上から一番下に移動してコピーをするわけなんだけど、このとき選択してたリージョンが解除されるので、もう一回コメントアウトのためにマークするために上に戻らなけりゃならない。その上、コメントアウトしたあとのカーソルは最後にあった場所にとどまるから、すぐ下にペーストしたいようなときは結局また一番下に移動する必要がある。
というわけで選択部分をコピーしてかつコメントアウト、コメントアウトしたところの次の行あたりにカーソルが残るようなコマンドをElispで書いた。
(defun comment-and-copy () (interactive) (if (region-active-p) (let ((rb (region-beginning)) (re (region-end))) (progn (goto-char (1+ re)) (goto-char (line-beginning-position)) (kill-ring-save rb re) (comment-region rb re))))) (global-set-key (kbd "M-'") 'comment-and-copy)
M-'('はUSキーボードで;のとなり)で動く。人生が明るくなる。