GNU EmacsのTips...
vi風〈カットアンドペースト〉
(2000.09.12)
(ポイント、マーク、リージョン、キルリング)

概要

 vi風の、行単位のカット(dd)、コピー(yy)のコマンドを作る。ついで に行の複製もやっつける。

適用範囲

GNU Emacs 19.34 (Mule 2.3)
GNU Emacs 20.5.1

解説

 対話型操作、 WYSIWYGも好きですが(なんといってもマッキントッシュ 育ち)、vi風の操作も捨て難い。特にプログラムなどを書いている時は。

 そこで、そんなコマンドを作ってみました。

コード

  1: (defun copy-lines (n)
  2:  "copy N lines from current position."
  3:  (interactive "p")
  4:  (save-excursion
  5:   (beginning-of-line)
  6:   (set-mark (point))
  7:   (forward-line n)
  8:   (kill-ring-save (region-beginning) (region-end))
  9:   (message (format "%d line(s) copied." n))
 10:   ))
 11: 
 12: (defun dup-lines (n)
 13:  "duplicate current line."
 14:  (interactive "p")
 15:  (save-excursion
 16:   (beginning-of-line)
 17:   (set-mark (point))
 18:   (forward-line n)
 19:   (kill-ring-save (region-beginning) (region-end))
 20:   (yank)
 21:   (message (format "%d line(s) duplicated." n))
 22:   ))
 23: 
 24: (defun cut-lines (n)
 25:  "delete N lines from current posotion."
 26:  (interactive "p")
 27:  (save-excursion
 28:   (beginning-of-line)
 29:   (set-mark (point))
 30:   (forward-line n)
 31:   (kill-region (region-beginning) (region-end))
 32:   (message (format "%d line(s) cut." n))
 33:   ))

補足

 エラーや例外の処理は考えに入れてません。

 初めは save-excursion なんかしていませんでした。自分で書いて自 分使うんだからかまわない。不具合があってもすぐに直せるし。

 でもあるとき「やっぱり save-excursion してみるか」と思って、 save-excursion してみました。この方がいいな、とも思うのだけど、 ポイント(カーソル)が動かないのは不便な気もする。コマンドが実行 されたかどうか判らない。そこで、メッセージを表示するようにしまし た。

 これでもちょっと気持の悪いところがあるんですが、ま、いいでしょ う(いいのか?)。

 なお、前置引数により vi ばりに N 行に適用できるようにしたけど、 実際には殆ど使いませんね(笑)。

(2000.09.12)

GNU EmacsのTipsへ
参考図書へ
コンピューター言語研究所へ
トップページへ
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.