-
Notifications
You must be signed in to change notification settings - Fork 47
/
numbers.vim
144 lines (122 loc) · 3.22 KB
/
numbers.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" File: numbers.vim
" Maintainer: Mahdi Yusuf yusuf.mahdi@gmail.com
" Version: 0.6.1
" Description: vim global plugin for better line numbers.
" Last Change: 15 September, 2013
" License: MIT License
" Location: plugin/numbers.vim
" Website: https://github.com/myusuf3/numbers.vim
"
" See numbers.txt for help. This can be accessed by doing:
"
" :helptags ~/.vim/doc
" :help numbers
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let s:numbers_version = '0.5.0'
if exists("g:loaded_numbers") && g:loaded_numbers
finish
endif
let g:loaded_numbers = 1
if (!exists('g:enable_numbers'))
let g:enable_numbers = 1
endif
if (!exists('g:numbers_exclude'))
let g:numbers_exclude = ['unite', 'tagbar', 'startify', 'gundo', 'vimshell', 'w3m', 'nerdtree']
endif
if v:version < 703 || &cp
echomsg "numbers.vim: you need at least Vim 7.3 and 'nocp' set"
echomsg "Failed loading numbers.vim"
finish
endif
"Allow use of line continuation
let s:save_cpo = &cpo
set cpo&vim
let s:mode=0
let s:center=1
function! NumbersRelativeOff()
if v:version > 703 || (v:version == 703 && has('patch1115'))
set norelativenumber
else
set number
endif
endfunction
function! SetNumbers()
let s:mode = 1
call ResetNumbers()
endfunc
function! SetRelative()
let s:mode = 0
call ResetNumbers()
endfunc
function! NumbersToggle()
if (s:mode == 1)
let s:mode = 0
set relativenumber
else
let s:mode = 1
call NumbersRelativeOff()
endif
endfunc
function! ResetNumbers()
if(s:center == 0)
call NumbersRelativeOff()
elseif(s:mode == 0)
set relativenumber
else
call NumbersRelativeOff()
end
if index(g:numbers_exclude, &ft) >= 0
setlocal norelativenumber
setlocal nonumber
endif
endfunc
function! Center()
let s:center = 1
call ResetNumbers()
endfunc
function! Uncenter()
let s:center = 0
call ResetNumbers()
endfunc
function! NumbersEnable()
let g:enable_numbers = 1
:set relativenumber
augroup enable
au!
autocmd InsertEnter * :call SetNumbers()
autocmd InsertLeave * :call SetRelative()
autocmd BufNewFile * :call ResetNumbers()
autocmd BufReadPost * :call ResetNumbers()
autocmd FocusLost * :call Uncenter()
autocmd FocusGained * :call Center()
autocmd WinEnter * :call SetRelative()
autocmd WinLeave * :call SetNumbers()
augroup END
endfunc
function! NumbersDisable()
let g:enable_numbers = 0
:set nu
:set nu!
augroup disable
au!
au! enable
augroup END
endfunc
function! NumbersOnOff()
if (g:enable_numbers == 1)
call NumbersDisable()
else
call NumbersEnable()
endif
endfunc
" Commands
command! -nargs=0 NumbersToggle call NumbersToggle()
command! -nargs=0 NumbersEnable call NumbersEnable()
command! -nargs=0 NumbersDisable call NumbersDisable()
command! -nargs=0 NumbersOnOff call NumbersOnOff()
" reset &cpo back to users setting
let &cpo = s:save_cpo
if (g:enable_numbers)
call NumbersEnable()
endif