vi風の、行単位のカット(dd)、コピー(yy)のコマンドを作る。ついで に行の複製もやっつける。
対話型操作、 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)
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.