git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@133 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
257 lines
8.2 KiB
VimL
257 lines
8.2 KiB
VimL
" File: cscope_quickfix.vim
|
|
" Author: kino
|
|
" Version: 0.1
|
|
" Last Modified: Dec. 30, 2003
|
|
"
|
|
" Overview
|
|
" ------------
|
|
" This script enables to use cscope with quickfix.
|
|
"
|
|
" Preparation
|
|
" ------------
|
|
" You must prepare cscope and cscope database (cscope.out file).
|
|
" cscope is a tag tool like ctags, but unlike ctags, it is a cross referencing
|
|
" tool.
|
|
" If you don't know about cscope, see:
|
|
" :help cscope
|
|
" http://cscope.sourceforge.net/
|
|
"
|
|
" Feature 1
|
|
" ------------
|
|
" This script adds a command ":Cscope", which is very similar to ":cscope find"
|
|
" command. But, this ":Cscope" command can be used with quickfix, and isn't
|
|
" needed cscope connection. So, you don't have to install vim with
|
|
" --enable-cscope.
|
|
"
|
|
" Feature 2
|
|
" ------------
|
|
" This script adds keymap macro as follows:
|
|
" <C-\> s: Find this C symbol
|
|
" <C-\> g: Find this definition
|
|
" <C-\> d: Find functions called by this function
|
|
" <C-\> c: Find functions calling this function
|
|
" <C-\> t: Find this text string
|
|
" <C-\> e: Find this egrep pattern
|
|
" <C-\> f: Find this file
|
|
" <C-\> i: Find files #including this file
|
|
" "this" means <cword> or <cfile> on the cursor.
|
|
"
|
|
" Feature 3
|
|
" --------------
|
|
" This script adds Tools and Popup menu as follows:
|
|
" "Symbols": Find this C symbol
|
|
" "Defines": Find this definition
|
|
" "Calls": Find functions called by this function
|
|
" "Globals": Find functions calling this function
|
|
" "Texts": Find this text string
|
|
" "Egrep": Find this egrep pattern
|
|
" "File": Find this file
|
|
" "Includes": Find files #including this file
|
|
" "Update cscope.out"
|
|
|
|
"
|
|
" Function
|
|
" --------------
|
|
" RunCscope({type}, {pattern} [,{file}])
|
|
"
|
|
" Command
|
|
" --------------
|
|
" Cscope {type} {pattern} [{file}]
|
|
"
|
|
" Variables
|
|
" --------------
|
|
" g:Cscope_OpenQuickfixWindow
|
|
" g:Cscope_JumpError
|
|
" g:Cscope_Keymap
|
|
" g:Cscope_PopupMenu
|
|
" g:Cscope_ToolMenu
|
|
"
|
|
" Install
|
|
" -------------
|
|
" Copy cscope_quickfix.vim file to plugin directory.
|
|
" If you don't want to open quickfix window after :Cscope command, put a line
|
|
" in .vimrc like:
|
|
" let Cscope_OpenQuickfixWindow = 0
|
|
" If you don't want to jump first item after :Cscope command, put a line
|
|
" in .vimrc like:
|
|
" let Cscope_JumpError = 0
|
|
" If you don't want to use keymap for :Cscope command, put a line in .vimrc
|
|
" like:
|
|
" let Cscope_Keymap = 0
|
|
" If you want to use Popup menu for :Cscope command, put a line in .vimrc
|
|
" like:
|
|
" let Cscope_PopupMenu = 1
|
|
" If you don't want to use Tools menu for :Cscope command, put a line in .vimrc
|
|
" like:
|
|
" let Cscope_ToolsMenu = 0
|
|
"
|
|
if !exists("Cscope_OpenQuickfixWindow")
|
|
let Cscope_OpenQuickfixWindow = 1
|
|
endif
|
|
|
|
if !exists("Cscope_JumpError")
|
|
let Cscope_JumpError = 1
|
|
endif
|
|
|
|
if !exists("Cscope_Keymap")
|
|
let Cscope_Keymap = 1
|
|
endif
|
|
|
|
if !exists("Cscope_PopupMenu")
|
|
let Cscope_PopupMenu = 0
|
|
endif
|
|
|
|
if !exists("Cscope_ToolMenu")
|
|
let Cscope_ToolMenu = 1
|
|
endif
|
|
|
|
" RunCscope()
|
|
" Run the cscope command using the supplied option and pattern
|
|
function! s:RunCscope(...)
|
|
let usage = "Usage: Cscope {type} {pattern} [{file}]."
|
|
let usage = usage . " {type} is [sgdctefi01234678]."
|
|
if !exists("a:1") || !exists("a:2")
|
|
echohl WarningMsg | echomsg usage | echohl None
|
|
return
|
|
endif
|
|
let cscope_opt = a:1
|
|
let pattern = a:2
|
|
let openwin = g:Cscope_OpenQuickfixWindow
|
|
let jumperr = g:Cscope_JumpError
|
|
if cscope_opt == '0' || cscope_opt == 's'
|
|
let cmd = "cscope -L -0 " . pattern
|
|
elseif cscope_opt == '1' || cscope_opt == 'g'
|
|
let cmd = "cscope -L -1 " . pattern
|
|
elseif cscope_opt == '2' || cscope_opt == 'd'
|
|
let cmd = "cscope -L -2 " . pattern
|
|
elseif cscope_opt == '3' || cscope_opt == 'c'
|
|
let cmd = "cscope -L -3 " . pattern
|
|
elseif cscope_opt == '4' || cscope_opt == 't'
|
|
let cmd = "cscope -L -4 " . pattern
|
|
elseif cscope_opt == '6' || cscope_opt == 'e'
|
|
let cmd = "cscope -L -6 " . pattern
|
|
elseif cscope_opt == '7' || cscope_opt == 'f'
|
|
let cmd = "cscope -L -7 " . pattern
|
|
let openwin = 0
|
|
let jumperr = 1
|
|
elseif cscope_opt == '8' || cscope_opt == 'i'
|
|
let cmd = "cscope -L -8 " . pattern
|
|
else
|
|
echohl WarningMsg | echomsg usage | echohl None
|
|
return
|
|
endif
|
|
if exists("a:3")
|
|
let cmd = cmd . " " . a:3
|
|
endif
|
|
let cmd_output = system(cmd)
|
|
|
|
if cmd_output == ""
|
|
echohl WarningMsg |
|
|
\ echomsg "Error: Pattern " . pattern . " not found" |
|
|
\ echohl None
|
|
return
|
|
endif
|
|
|
|
let tmpfile = tempname()
|
|
let curfile = expand("%")
|
|
|
|
if &modified && (!&autowrite || curfile == "")
|
|
let jumperr = 0
|
|
endif
|
|
|
|
exe "redir! > " . tmpfile
|
|
if curfile != ""
|
|
silent echon curfile . " dummy " . line(".") . " " . getline(".") . "\n"
|
|
silent let ccn = 2
|
|
else
|
|
silent let ccn = 1
|
|
endif
|
|
silent echon cmd_output
|
|
redir END
|
|
|
|
" If one item is matched, window will not be opened.
|
|
" let cmd = "wc -l < " . tmpfile
|
|
" let cmd_output = system(cmd)
|
|
" exe "let lines =" . cmd_output
|
|
" if lines == 2
|
|
" let openwin = 0
|
|
" endif
|
|
|
|
let old_efm = &efm
|
|
set efm=%f\ %*[^\ ]\ %l\ %m
|
|
|
|
exe "silent! cfile " . tmpfile
|
|
let &efm = old_efm
|
|
|
|
" Open the cscope output window
|
|
if openwin == 1
|
|
botright copen
|
|
endif
|
|
|
|
" Jump to the first error
|
|
if jumperr == 1
|
|
exe "cc " . ccn
|
|
endif
|
|
|
|
call delete(tmpfile)
|
|
endfunction
|
|
|
|
" Define the set of Cscope commands
|
|
command! -nargs=* Cscope call s:RunCscope(<f-args>)
|
|
|
|
if g:Cscope_Keymap == 1
|
|
nmap <C-\>s :Cscope s <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-\>g :Cscope g <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-\>d :Cscope d <C-R>=expand("<cword>")<CR> <C-R>=expand("%")<CR><CR>
|
|
nmap <C-\>c :Cscope c <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-\>t :Cscope t <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-\>e :Cscope e <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-\>f :Cscope f <C-R>=expand("<cfile>")<CR><CR>
|
|
nmap <C-\>i :Cscope i ^<C-R>=expand("<cfile>")<CR>$<CR>
|
|
|
|
nmap <C-@>s :split<CR>:Cscope s <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@>g :split<CR>:Cscope g <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@>d :split<CR>:Cscope d <C-R>=expand("<cword>")<CR> <C-R>=expand("%")<CR><CR>
|
|
nmap <C-@>c :split<CR>:Cscope c <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@>t :split<CR>:Cscope t <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@>e :split<CR>:Cscope e <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@>f :split<CR>:Cscope f <C-R>=expand("<cfile>")<CR><CR>
|
|
nmap <C-@>i :split<CR>:Cscope i ^<C-R>=expand("<cfile>")<CR>$<CR>
|
|
|
|
nmap <C-@><C-@>s :vert split<CR>:Cscope s <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@><C-@>g :vert split<CR>:Cscope g <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@><C-@>d :vert split<CR>:Cscope d <C-R>=expand("<cword>")<CR> <C-R>=expand("%")<CR><CR>
|
|
nmap <C-@><C-@>c :vert split<CR>:Cscope c <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@><C-@>t :vert split<CR>:Cscope t <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@><C-@>e :vert split<CR>:Cscope e <C-R>=expand("<cword>")<CR><CR>
|
|
nmap <C-@><C-@>f :vert split<CR>:Cscope f <C-R>=expand("<cfile>")<CR><CR>
|
|
nmap <C-@><C-@>i :vert split<CR>:Cscope i ^<C-R>=expand("<cfile>")<CR>$<CR>
|
|
endif
|
|
if has('gui_running') && g:Cscope_PopupMenu == 1
|
|
nmenu PopUp.-SEP3- <Nop>
|
|
nmenu PopUp.&Cscope.&Symbols :Cscope s <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu PopUp.&Cscope.&Defines :Cscope g <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu PopUp.&Cscope.&Calls :Cscope d <C-R>=expand("<cword>")<CR> <C-R>=expand("%")<CR><CR>
|
|
nmenu PopUp.&Cscope.&Globals :Cscope c <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu PopUp.&Cscope.&Texts :Cscope t <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu PopUp.&Cscope.&Egrep :Cscope e <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu PopUp.&Cscope.&File :Cscope f <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu PopUp.&Cscope.&Includes :Cscope i ^<C-R>=expand("<cword>")<CR>$<CR>
|
|
nmenu PopUp.&Cscope.-SEP1- <Nop>
|
|
nmenu PopUp.&Cscope.&Update\ cscope\.out :!cscope -b -R<CR>
|
|
endif
|
|
if has('gui_running') && g:Cscope_ToolMenu == 1
|
|
nmenu &Tools.-SEP3- <Nop>
|
|
nmenu &Tools.&Cscope.&Symbols :Cscope s <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu &Tools.&Cscope.&Defines :Cscope g <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu &Tools.&Cscope.&Calls :Cscope d <C-R>=expand("<cword>")<CR> <C-R>=expand("%")<CR><CR>
|
|
nmenu &Tools.&Cscope.&Globals :Cscope c <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu &Tools.&Cscope.&Texts :Cscope t <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu &Tools.&Cscope.&Egrep :Cscope e <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu &Tools.&Cscope.&File :Cscope f <C-R>=expand("<cword>")<CR><CR>
|
|
nmenu &Tools.&Cscope.&Includes :Cscope i ^<C-R>=expand("<cword>")<CR>$<CR>
|
|
nmenu &Tools.&Cscope.-SEP1- <Nop>
|
|
nmenu &Tools.&Cscope.&Update\ cscope\.out :!cscope -b -R<CR>
|
|
endif
|
|
" vim:set ts=4 sw=4 filetype=vim:
|