This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
relative_number_test-vim / relative_number.vim
| 1d0310d8 » | tsukkee | 2008-07-01 | 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() | ||||







