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 :
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 :
Recent Comments
ありがとうございます!
http://nanasi.jp/articles/howto/editing/visualcursor-endtoend.html · 8 years ago
知りませんでした。有難うございました。
http://nanasi.jp/articles/howto/file/open-with-format.html · 9 years ago
<c-f>1ページ分、下にスクロールする<c-b>1ページ分、上にスクロールする
どっちも逆です。
http://nanasi.jp/articles/howto/user-manual/user-manual-motion.html · 10 years ago
set 使用時に : で閉じるのを忘れて右往左往してました。
http://nanasi.jp/articles/howto/file/modeline.html · 11 years ago
やっぱり日本語の方が早いっす。
http://nanasi.jp/articles/howto/help/help_ja.html · 12 years ago