さて今日の elisp は insert-index。コードを書いていて変数に連番を入れたい時に重宝します。
例えば、
data[0]
data[1]
data[2]
...
data[9]
めんどうくさいし、間違ったら面倒。そういう時に、data[] をコピーして縦に必要数ペーストした後、先頭(最後)のカッコの中でマーク(C-SPC)して、最後(先頭)のカッコの中にカーソルを移動(ポイント)。その後に M-x insert-index を呼び出すだけ。若い行の方から 0 を初期値としてインクリメントした数値を埋めて行きます。その他、初期値を変更したり、フォーマットをオプションで変えられる関数も作ってみたけど、結局シンプルな今の関数に落ち着きました。
コードはいかに示す通り(二つの関数で構成されてます)。別ファイルにしてもいいのだけど、短いので .emacs に入れてしまってもいいかも。また、キーバインドに余裕があれば、お好きなキーにアサインして下さい。
※とりあえず以下を全部 .emacs にコピーペーストすれば関数が C-t で起動するようになります。
;; キーバインドの例 (任意)
(global-set-key "\C-t" 'insert-index)
;; insert-index 関数本体 insert-index-calc も必要です
(defun insert-index (beg end)
(interactive "r")
(let ((num 0)
(istart 0)
(istep 1))
(setq num (1- (* istep (count-lines beg end))))
(goto-char beg)
(insert-index-calc istart num istep)))
(defun insert-index-calc (index end step)
(if (> index end)
nil
(progn
(let ((str ""))
(setq str (format "%d" index))
(insert str)
(forward-char (- (length str)))
(next-line 1)
(insert-index-calc (+ index step) end step)))))
0 件のコメント:
コメントを投稿