public
Description: This is just a test vim plugin that generate relative number.
Homepage:
Clone URL: git://github.com/tsukkee/relative_number_test-vim.git
tsukkee (author)
Tue Jul 01 10:58:05 -0700 2008
relative_number_test-vim / relative_number.vim
1d0310d8 » tsukkee 2008-07-01 first commit 1 " include guard
2 if exists('loaded_mark_vim')
3 finish
4 endif
5 let loaded_mark_vim = 1
6
7 " options
8 if !exists('g:relative_range')
9 let g:relative_range = 20
10 endif
11
12 " generate sign id
13 let s:base_number = 500
14 function! s:id(num)
15 return s:base_number + a:num + 1
16 endfunction
17
18 " generate sign line
19 function! s:line(num)
20 return a:num - g:relative_range + line('.')
21 endfunction
22
23 " generate sign text
24 function! s:number(num)
25 let temp = a:num - g:relative_range
26 return (temp > 0) ? temp : - temp
27 endfunction
28
29 " add signs
30 function! s:AddMarks()
31 for num in range(0, g:relative_range * 2)
32 exe "sign place " . s:id(num) . " line=" . s:line(num) . " name=" . s:prefix . num . " buffer=" . winbufnr(0)
33 endfor
34 exe "sign place " . s:base_number . " line=1 name=" . s:prefix . "00 buffer=" . winbufnr(0)
35 endfunction
36
37 " remove signs
38 function! s:RemoveMarks()
39 for num in range(0, g:relative_range * 2)
40 exe "sign unplace " . s:id(num)
41 endfor
42 endfunction
43
44 " auto add relative number
45 let s:last_line = 1
46 let s:enabled = 1
47 function! s:AutoAddRemove()
48 if s:last_line != line('.') && s:enabled
49 let lazy = &lazyredraw
50 let &lazyredraw = 1
51 call s:RemoveMarks()
52 call s:AddMarks()
53
54 if !lazy
55 let &lazyredraw = 0
56 endif
57 endif
58
59 let s:last_line = line('.')
60 endfun
61
62 " initialize
63 let s:prefix = "RelativeNumber_"
64 let s:marks = []
65 for num in range(0, g:relative_range * 2)
66 call add(s:marks, s:prefix . num)
67 exe "sign define " . s:prefix . num . " text=" . s:number(num)
68 endfor
69 exe "sign define " . s:prefix . "00 text=00"
70
71 " define commands
72 command! RelativeNumberEnable let s:enabled = 1
73 command! RelativeNumberDisable let s:enabled = 0
74
75 " for debug
76 " command! RelativeNumberAuto call s:AutoAddRemove()
77
78
79 " define autocmd
80 autocmd CursorMoved,CursorMovedI * call s:AutoAddRemove()