dotfiles/.vim/pack/plugins/start/vim-fzf-cscope/plugin/fzf_csope.vim

119 lines
5.2 KiB
VimL
Executable File

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CSCOPE settings for vim using popup and preview window
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" This file contains fzf shortcut for vim's cscope interface,
" with keyboard mappings.
" Prerequiites
" USAGE:
" -- vim 6: Stick this file in your ~/.vim/plugin directory (or in a
" 'plugin' directory in some other directory that is in your
" 'runtimepath'.
"
" NOTE:
" These key maps use multiple keystrokes (2 or 3 keys). If you find that vim
" keeps timing you out before you can complete them, try changing your timeout
" settings, as explained below.
"
" Happy cscoping,
"
" Nabendu Maiti nbmaiti83@gmail.com 2021/3/14
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! Cscope(option, query, fullscreen)
let color = '{ x = $1; $1 = ""; z = $3; $3 = ""; p = $2; $2 = ""; printf "\033[35m%s\033[0m:\033[32m%s\033[0m:\033[33;1m%s\033[0m:\033[34m%s\033[0m\n", x,z,p,$0;}'
let command_fmt = "cscope -dL -%s %s %s %s '"
let initial_command = printf(command_fmt, a:option, shellescape(a:query)," | awk '", color)
let reload_command = printf(command_fmt, a:option, '{q}', " | awk '", color)
let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]}
call fzf#vim#grep(initial_command, 0, fzf#vim#with_preview(spec), a:fullscreen)
endfunction
function! CscopeQuery(option)
call inputsave()
if a:option == '0'
let query = input('C Symbol: ')
elseif a:option == '1'
let query = input('Definition: ')
elseif a:option == '2'
let query = input('Functions calling: ')
elseif a:option == '3'
let query = input('Functions called by: ')
elseif a:option == '4'
let query = input('Text: ')
elseif a:option == '6'
let query = input('Egrep: ')
elseif a:option == '7'
let query = input('File: ')
elseif a:option == '8'
let query = input('Files #including: ')
elseif a:option == '9'
let query = input('Assignments to: ')
else
echo "Invalid option!"
return
endif
call inputrestore()
if query != ""
call Cscope(a:option, query , 0)
else
echom "Cancelled Search!"
endif
endfunction
if mapcheck('<C-\>g') == ""
"'s' symbol: find all references to the token under cursor
"'g' global: find global definition(s) of the token under cursor
"'c' calls: find all calls to the function name under cursor
"'t' text: find all instances of the text under cursor
"'e' egrep: egrep search for the word under cursor
"'f' file: open the filename under cursor
"'i' includes: find files that include the filename under cursor
"'d' called: find functions that function under cursor calls
"'a' Assigned: Assigned to this symbol
nnoremap <C-\>s :call Cscope('0', expand('<cword>'), 0)<CR>
nnoremap <C-\>g :call Cscope('1', expand('<cword>'), 0)<CR>
nnoremap <C-\>d :call Cscope('2', expand('<cword>'), 0)<CR>
nnoremap <C-\>c :call Cscope('3', expand('<cword>'), 0)<CR>
nnoremap <C-\>t :call Cscope('4', expand('<cword>'), 0)<CR>
nnoremap <C-\>e :call Cscope('6', expand('<cword>'), 0)<CR>
nnoremap <C-\>f :call Cscope('7', expand('<cfile>'), 0)<CR>
nnoremap <C-\>i :call Cscope('8', expand('<cfile>'), 0)<CR>
nnoremap <C-\>a :call Cscope('9', expand('<cword>'), 0)<CR>
nnoremap <C-\><C-\>s :call CscopeQuery('0')<CR>
nnoremap <C-\><C-\>g :call CscopeQuery('1')<CR>
nnoremap <C-\><C-\>d :call CscopeQuery('2')<CR>
nnoremap <C-\><C-\>c :call CscopeQuery('3')<CR>
nnoremap <C-\><C-\>t :call CscopeQuery('4')<CR>
nnoremap <C-\><C-\>e :call CscopeQuery('6')<CR>
nnoremap <C-\><C-\>f :call CscopeQuery('7')<CR>
nnoremap <C-\><C-\>i :call CscopeQuery('8')<CR>
nnoremap <C-\><C-\>a :call CscopeQuery('9')<CR>
endif
" default and permanent key apping
nnoremap <silent> <Leader>ks :call Cscope('0', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>kg :call Cscope('1', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>kd :call Cscope('2', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>kc :call Cscope('3', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>kt :call Cscope('4', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>ke :call Cscope('6', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>kf :call Cscope('7', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>ki :call Cscope('8', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader>ka :call Cscope('9', expand('<cword>'), 0)<CR>
nnoremap <silent> <Leader><Leader>ks :call CscopeQuery('0')<CR>
nnoremap <silent> <Leader><Leader>kg :call CscopeQuery('1')<CR>
nnoremap <silent> <Leader><Leader>kd :call CscopeQuery('2')<CR>
nnoremap <silent> <Leader><Leader>kc :call CscopeQuery('3')<CR>
nnoremap <silent> <Leader><Leader>kt :call CscopeQuery('4')<CR>
nnoremap <silent> <Leader><Leader>ke :call CscopeQuery('6')<CR>
nnoremap <silent> <Leader><Leader>kf :call CscopeQuery('7')<CR>
nnoremap <silent> <Leader><Leader>ki :call CscopeQuery('8')<CR>
nnoremap <silent> <Leader><Leader>ka :call CscopeQuery('9')<CR>