パーソナルツール

catn.vim

作者: 小見 拓 最終変更 2012年01月08日 12時13分

 1 " 1度スクリプトを読み込んだら、2度目は読み込まない
 2 :if &cp || exists("loaded_catn")
 3     :finish
 4 :endif
 5 :let loaded_catn = 1
 6
 7 " ユーザの初期設定を逃がす
 8 :let s:save_cpo = &cpo
 9 :set cpo&vim
10
11 " 引数の数で処理を分岐する。
12 :function! s:Catn(...) range
13     :if len(a:000) == 0
14         :call s:CatnFormat("%d ", 1, a:firstline, a:lastline)
15     :elseif len(a:000) == 1
16         :call s:CatnFormat("%d ", a:1, a:firstline, a:lastline)
17     :else
18         :call s:CatnFormat(a:1, a:2, a:firstline, a:lastline)
19     :endif
20 :endfunction
21
22 " 指定範囲の先頭に、指定フォーマットの連番を挿入する。
23 :function! s:CatnFormat(format, start_no, start, end)
24     " 順番に行を置き換えていく
25     :let l:i = 0
26     :while (a:start + l:i) <= a:end
27         " 連番の作成
28         :let l:no_fmt = printf(a:format, a:start_no + l:i)
29         " 行の置き換え
30         :let l:line_fmt = printf("%s%s", l:no_fmt, getline(a:start + l:i))
31         :call setline(a:start + l:i, l:line_fmt)
32         :let l:i += 1
33     :endwhile
34 :endfunction
35
36 " 引数可変のコマンドの定義。
37 :command! -narg=* -range Catn :<line1>,<line2>call s:Catn(<f-args>)
38
39 " 退避していたユーザのデータをリカバリ
40 :let &cpo = s:save_cpo
41 " スクリプトはここまで
42 :finish
43
44 ==============================================================================
45 スクリプトの説明
46
47 選択した範囲の先頭に連番を挿入する。Unixの"cat -n"
48
49 :'<,'>Catn {フォーマット} {開始値}
50 :'<,'>Catn [{開始値}]
51
52 :'<,'>Catn
53 :'<,'>Catn 1000
54 :'<,'>Catn %08d\  500
55
56 ==============================================================================
57 見るべきところ
58
59 ・書式文字列の使い方
60 ・行の文字列の置き換え方
61 ・コマンドのパラメータの数で呼び出す処理を分岐
62
63 ==============================================================================
64
65 " vim: set ff=unix et ft=vim nowrap :
ドキュメントアクション
コメント
blog comments powered by Disqus