-
Notifications
You must be signed in to change notification settings - Fork 1
/
cscope_maps.vim
153 lines (120 loc) · 3.55 KB
/
cscope_maps.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
145
146
147
148
149
150
151
152
153
" cscope helpers for vim
"
" Stick this file in your ~/.vim/plugin directory
"
" if (diff mode)
" "jump between diff changes"
" else if (quickfix mode)
" "jump between quickfix entries"
" else
" "jump between paragraphs"
"
function! cscope_maps#Prev()
if &diff
execute "normal [c"
else
try
execute "cp"
catch /^Vim\%((\a\+)\)\=:E42:/
execute "normal {"
catch /^Vim\%((\a\+)\)\=:E\(553\|42\):/
endtry
endif
endfunction
function! cscope_maps#Next()
if &diff
execute "normal ]c"
else
try
execute "cn"
catch /^Vim\%((\a\+)\)\=:E42:/
execute "normal }"
catch /^Vim\%((\a\+)\)\=:E\(553\|42\):/
endtry
endif
endfunction
nmap <C-Up> :call cscope_maps#Prev()<CR>
nmap <C-Down> :call cscope_maps#Next()<CR>
if !has("cscope")
" time to recompile vim with the option '--enable-cscope' ...
finish
endif
" use both cscope and ctag for 'ctrl-]', ':ta', and 'vim -t'
set cscopetag
" check cscope for definition of a symbol before checking ctags: set to 1
" if you want the reverse search order.
set csto=0
" add any cscope database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add the database pointed to by environment variable
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
" show msg when any other cscope db added
set cscopeverbose
" use <C-g>^ as a "replacement" for the classical <C-g>
" clear and close quickfix
function! cscope_maps#CloseQF()
call setqflist([])
execute "cclose"
endfunction
nmap <C-g><C-x> :call cscope_maps#CloseQF()<CR>
nmap <C-g>x :call cscope_maps#CloseQF()<CR>
" rebuild and [R]eload cscope db
function! cscope_maps#ReloadMaps()
execute "cscope kill -1"
execute "!cscope -v -R -b -q -k"
execute "cscope add ."
call cscope_maps#CloseQF()
endfunction
nmap <C-g><C-r> :call cscope_maps#ReloadMaps()<CR>
nmap <C-g>r :call cscope_maps#ReloadMaps()<CR>
" find [U]sages
function! cscope_maps#FindUsages()
let str = expand("<cword>")
call cscope_maps#CloseQF()
execute "cscope find c " . str
execute "cw"
call matchadd('Search', '\<' . str . '\>')
endfunction
nmap <C-g><C-u> :call cscope_maps#FindUsages()<CR>
nmap <C-g>u :call cscope_maps#FindUsages()<CR>
" goto global [D]efinition
function! cscope_maps#GotoDef()
execute "cscope find g " . expand("<cword>")
call cscope_maps#CloseQF()
endfunction
nmap <C-g><C-d> :call cscope_maps#GotoDef()<CR>
nmap <C-g>d :call cscope_maps#GotoDef()<CR>
nmap g<C-d> :call cscope_maps#GotoDef()<CR>
" find all refs to the token [G] (Definition + Usages)
function! cscope_maps#FindToken()
let str = expand("<cword>")
call cscope_maps#CloseQF()
execute "cscope find s " . str
execute "cw"
call matchadd('Search', '\<' . str . '\>')
endfunction
nmap <C-g><C-g> :call cscope_maps#FindToken()<CR>
nmap <C-g>g :call cscope_maps#FindToken()<CR>
" find all instances of the [T]ext
function! cscope_maps#FindText()
let str = expand("<cword>")
call cscope_maps#CloseQF()
execute "cscope find t " . str
execute "cw"
call matchadd('Search', str)
endfunction
nmap <C-g><C-t> :call cscope_maps#FindText()<CR>
nmap <C-g>t :call cscope_maps#FindText()<CR>
" open [F]ile
function! cscope_maps#FindFiles()
call cscope_maps#CloseQF()
let str = input("find files: ", "")
execute "cscope find f " . str
execute "cw"
call matchadd('Search', str)
endfunction
nmap <C-g><C-f> :call cscope_maps#FindFiles()<CR>
nmap <C-g>f :call cscope_maps#FindFiles()<CR>