add taglist & vim-cscope
This commit is contained in:
parent
f58d67271a
commit
d6f8b51568
7 changed files with 6711 additions and 0 deletions
18
sources_non_forked/taglist/README
Normal file
18
sources_non_forked/taglist/README
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
This is a mirror of http://www.vim.org/scripts/script.php?script_id=273
|
||||||
|
|
||||||
|
The "Tag List" plugin is a source code browser plugin for Vim and
|
||||||
|
provides an overview of the structure of source code files and allows
|
||||||
|
you to efficiently browse through source code files for different
|
||||||
|
programming languages. You can visit the taglist plugin home page for
|
||||||
|
more information:
|
||||||
|
|
||||||
|
http://vim-taglist.sourceforge.net
|
||||||
|
|
||||||
|
You can subscribe to the taglist mailing list to post your questions
|
||||||
|
or suggestions for improvement or to report bugs. Visit the following
|
||||||
|
page for subscribing to the mailing list:
|
||||||
|
|
||||||
|
http://groups.yahoo.com/group/taglist/
|
||||||
|
|
||||||
|
For more information about using this plugin, after installing the
|
||||||
|
taglist plugin, use the ":help taglist" command.
|
1501
sources_non_forked/taglist/doc/taglist.txt
Normal file
1501
sources_non_forked/taglist/doc/taglist.txt
Normal file
File diff suppressed because it is too large
Load diff
4546
sources_non_forked/taglist/plugin/taglist.vim
Normal file
4546
sources_non_forked/taglist/plugin/taglist.vim
Normal file
File diff suppressed because it is too large
Load diff
54
sources_non_forked/vim-cscope/README.md
Normal file
54
sources_non_forked/vim-cscope/README.md
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# Introduction
|
||||||
|
Cscove(new name for this plugin, since cscope.vim is used too widely.) is a
|
||||||
|
smart cscope helper for vim.
|
||||||
|
|
||||||
|
It will try to find a proper cscope database for current file, then connect to
|
||||||
|
it. If there is no proper cscope database for current file, you are prompted to
|
||||||
|
specify a folder with a string like --
|
||||||
|
|
||||||
|
Can not find proper cscope db, please input a path to create cscope db for.
|
||||||
|
|
||||||
|
Then the plugin will create cscope database for you, connect to it, and find
|
||||||
|
what you want. The found result will be listed in a location list window. Next
|
||||||
|
time when you open the same file or other file that the cscope database can be
|
||||||
|
used for, the plugin will connect to the cscope database automatically. You
|
||||||
|
need not take care of anything about cscope database.
|
||||||
|
|
||||||
|
When you have a file edited/added in those folders for which cscope databases
|
||||||
|
have been created, cscove will automatically update the corresponding database.
|
||||||
|
|
||||||
|
Cscove frees you from creating/connecting/updating cscope database, let you
|
||||||
|
focus on code browsing.
|
||||||
|
|
||||||
|
# Example settings
|
||||||
|
The default key mappings has been removed from the plugin itself, since users
|
||||||
|
may prefer different choices.
|
||||||
|
So to use the plugin, you must define your own key mappings first.
|
||||||
|
|
||||||
|
Below is the minimum key mappings.
|
||||||
|
|
||||||
|
nnoremap <leader>fa :call CscopeFindInteractive(expand('<cword>'))<CR>
|
||||||
|
nnoremap <leader>l :call ToggleLocationList()<CR>
|
||||||
|
|
||||||
|
Some optional key mappings to search directly.
|
||||||
|
|
||||||
|
" s: Find this C symbol
|
||||||
|
nnoremap <leader>fs :call CscopeFind('s', expand('<cword>'))<CR>
|
||||||
|
" g: Find this definition
|
||||||
|
nnoremap <leader>fg :call CscopeFind('g', expand('<cword>'))<CR>
|
||||||
|
" d: Find functions called by this function
|
||||||
|
nnoremap <leader>fd :call CscopeFind('d', expand('<cword>'))<CR>
|
||||||
|
" c: Find functions calling this function
|
||||||
|
nnoremap <leader>fc :call CscopeFind('c', expand('<cword>'))<CR>
|
||||||
|
" t: Find this text string
|
||||||
|
nnoremap <leader>ft :call CscopeFind('t', expand('<cword>'))<CR>
|
||||||
|
" e: Find this egrep pattern
|
||||||
|
nnoremap <leader>fe :call CscopeFind('e', expand('<cword>'))<CR>
|
||||||
|
" f: Find this file
|
||||||
|
nnoremap <leader>ff :call CscopeFind('f', expand('<cword>'))<CR>
|
||||||
|
" i: Find files #including this file
|
||||||
|
nnoremap <leader>fi :call CscopeFind('i', expand('<cword>'))<CR>
|
||||||
|
|
||||||
|
# Screencast
|
||||||
|
Please note that line number changes in location list after file saved.
|
||||||
|
![cscove.vim](https://brookhong.github.io/assets/images/cscove.gif)
|
155
sources_non_forked/vim-cscope/doc/cscope.txt
Normal file
155
sources_non_forked/vim-cscope/doc/cscope.txt
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
*cscove.txt* cscove, a smart cscope helper for vim. *cscove*
|
||||||
|
|
||||||
|
1. About cscove |cscove-about|
|
||||||
|
2. Key Mappings |cscove-keymappings|
|
||||||
|
3. Functions |cscove-funtions|
|
||||||
|
4. Commands |cscove-commands|
|
||||||
|
5. Options |cscove-options|
|
||||||
|
|
||||||
|
=============================================================================
|
||||||
|
1. ABOUT cscove ~
|
||||||
|
*cscove-about*
|
||||||
|
|
||||||
|
Cscove(new name for this plugin, since cscope.vim is used too widely.) is a
|
||||||
|
smart cscope helper for vim.
|
||||||
|
|
||||||
|
It will try to find a proper cscope database for current file, then connect to
|
||||||
|
it. If there is no proper cscope database for current file, you are prompted to
|
||||||
|
specify a folder with a string like --
|
||||||
|
|
||||||
|
Can not find proper cscope db, please input a path to create cscope db for.
|
||||||
|
|
||||||
|
Then the plugin will create cscope database for you, connect to it, and find
|
||||||
|
what you want. The found result will be listed in a location list window. Next
|
||||||
|
time when you open the same file or other file that the cscope database can be
|
||||||
|
used for, the plugin will connect to the cscope database automatically. You
|
||||||
|
need not take care of anything about cscope database.
|
||||||
|
|
||||||
|
When you have a file edited/added in those folders for which cscope databases
|
||||||
|
have been created, cscove will automatically update the corresponding database.
|
||||||
|
|
||||||
|
Cscove frees you from creating/connecting/updating cscope database, let you
|
||||||
|
focus on code browsing.
|
||||||
|
|
||||||
|
=============================================================================
|
||||||
|
2. KEY MAPPINGS ~
|
||||||
|
*cscove-keymappings*
|
||||||
|
The default key mappings has been removed from the plugin itself, since users
|
||||||
|
may prefer different choices.
|
||||||
|
So to use the plugin, you must define your own key mappings first.
|
||||||
|
|
||||||
|
Below is the minimum key mappings.
|
||||||
|
|
||||||
|
nnoremap <leader>fa :call CscopeFindInteractive(expand('<cword>'))<CR>
|
||||||
|
nnoremap <leader>l :call ToggleLocationList()<CR>
|
||||||
|
|
||||||
|
Some optional key mappings to search directly.
|
||||||
|
|
||||||
|
" s: Find this C symbol
|
||||||
|
nnoremap <leader>fs :call CscopeFind('s', expand('<cword>'))<CR>
|
||||||
|
" g: Find this definition
|
||||||
|
nnoremap <leader>fg :call CscopeFind('g', expand('<cword>'))<CR>
|
||||||
|
" d: Find functions called by this function
|
||||||
|
nnoremap <leader>fd :call CscopeFind('d', expand('<cword>'))<CR>
|
||||||
|
" c: Find functions calling this function
|
||||||
|
nnoremap <leader>fc :call CscopeFind('c', expand('<cword>'))<CR>
|
||||||
|
" t: Find this text string
|
||||||
|
nnoremap <leader>ft :call CscopeFind('t', expand('<cword>'))<CR>
|
||||||
|
" e: Find this egrep pattern
|
||||||
|
nnoremap <leader>fe :call CscopeFind('e', expand('<cword>'))<CR>
|
||||||
|
" f: Find this file
|
||||||
|
nnoremap <leader>ff :call CscopeFind('f', expand('<cword>'))<CR>
|
||||||
|
" i: Find files #including this file
|
||||||
|
nnoremap <leader>fi :call CscopeFind('i', expand('<cword>'))<CR>
|
||||||
|
|
||||||
|
=============================================================================
|
||||||
|
3. FUNCTIONS ~
|
||||||
|
*cscove-functions*
|
||||||
|
|
||||||
|
The plugin provides three public functions.
|
||||||
|
|
||||||
|
CscopeFind({querytype}, {pattern})
|
||||||
|
search your {pattern} with {querytype} in the database suitable
|
||||||
|
for current file.
|
||||||
|
|
||||||
|
CscopeFindInteractive({pattern})
|
||||||
|
provide an interactive interface for finding what you want.
|
||||||
|
|
||||||
|
CscopeUpdateDB()
|
||||||
|
update all existing cscope databases in case that you disable cscope
|
||||||
|
database auto update.
|
||||||
|
|
||||||
|
ToggleLocationList()
|
||||||
|
toggle the location list for found results.
|
||||||
|
|
||||||
|
=============================================================================
|
||||||
|
4. Commands ~
|
||||||
|
*cscove-commands*
|
||||||
|
You may need these commands sometimes.
|
||||||
|
*CscopeList*
|
||||||
|
|
||||||
|
List all existing cscope databases that cscove has created for you.
|
||||||
|
|
||||||
|
:CscopeList
|
||||||
|
|
||||||
|
Here is example output from |:CscopeList|
|
||||||
|
|
||||||
|
ID LOADTIMES PATH
|
||||||
|
*1337668712 3 /works/vim/src
|
||||||
|
|
||||||
|
'*' means the db has been connected.
|
||||||
|
ID id of the db.
|
||||||
|
LOADTIMES how many times this db has ever been used.
|
||||||
|
PATH which folder the db is for.
|
||||||
|
*CscopeClear*
|
||||||
|
|
||||||
|
Remove the database for specified folder or all existing cscope databases that
|
||||||
|
cscove has created for you if no folder provided.
|
||||||
|
You can use <Tab> for completion.
|
||||||
|
|
||||||
|
:CscopeClear <full_path>
|
||||||
|
|
||||||
|
:CscopeClear
|
||||||
|
|
||||||
|
=============================================================================
|
||||||
|
5. OPTIONS ~
|
||||||
|
*cscove-options*
|
||||||
|
|
||||||
|
*'g:cscope_open_location'*
|
||||||
|
Use this option to stop opening location list after searching
|
||||||
|
let g:cscope_open_location = 0
|
||||||
|
*'g:cscope_auto_update'*
|
||||||
|
Use this option to disable cscope database auto update.
|
||||||
|
let g:cscope_auto_update = 0
|
||||||
|
|
||||||
|
Then you can update your cscope databases manually by:
|
||||||
|
call CscopeUpdateDB()
|
||||||
|
*'g:cscope_silent'*
|
||||||
|
Use this option to toggle messages for database updated.
|
||||||
|
let g:cscope_silent = 1
|
||||||
|
|
||||||
|
*'g:cscope_cmd'*
|
||||||
|
Use the option to specify the path to cscope excutalbe, if it is not in PATH.
|
||||||
|
let g:cscope_cmd = '/home/brook/bin/cscope'
|
||||||
|
|
||||||
|
*'g:cscope_split_threshold'*
|
||||||
|
Specify a number. If total files found for a directory exceeds it, then a
|
||||||
|
separated cscope database will be created for modified/added files to avoid
|
||||||
|
long time for updating cscope database.
|
||||||
|
let g:cscope_split_threshold = 9999
|
||||||
|
|
||||||
|
*'g:cscope_interested_files'*
|
||||||
|
Specify the extentions you want to include when building cscope database, the
|
||||||
|
default extentions are listed in interested.txt.
|
||||||
|
let g:cscope_interested_files = '\.c$\|\.cpp$\|\.h$\|\.hpp'
|
||||||
|
|
||||||
|
*'g:cscope_ignored_dir'*
|
||||||
|
Specify the sub directories you want to exclude when building cscope database, for
|
||||||
|
example:
|
||||||
|
let g:cscope_ignored_dir = 'node_modules$\|dist$'
|
||||||
|
|
||||||
|
*'g:cscope_preload_path'*
|
||||||
|
Preload path settings help you to load some common libraries by default. For example,
|
||||||
|
let g:cscope_preload_path="/usr/include/c++/;/works/phplib/trunk/php"
|
||||||
|
|
||||||
|
" vim: set expandtab sts=2 ts=2 sw=2 tw=78 ft=help norl:
|
375
sources_non_forked/vim-cscope/plugin/cscope.vim
Executable file
375
sources_non_forked/vim-cscope/plugin/cscope.vim
Executable file
|
@ -0,0 +1,375 @@
|
||||||
|
" vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab foldmethod=marker
|
||||||
|
" Copyright: Copyright (C) 2012-2015 Brook Hong
|
||||||
|
" License: The MIT License
|
||||||
|
"
|
||||||
|
|
||||||
|
if !exists('g:cscope_silent')
|
||||||
|
let g:cscope_silent = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:cscope_auto_update')
|
||||||
|
let g:cscope_auto_update = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:cscope_open_location')
|
||||||
|
let g:cscope_open_location = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:cscope_split_threshold')
|
||||||
|
let g:cscope_split_threshold = 10000
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! s:echo(msg)
|
||||||
|
if g:cscope_silent == 0
|
||||||
|
echo a:msg
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ToggleLocationList()
|
||||||
|
let l:own = winnr()
|
||||||
|
lw
|
||||||
|
let l:cwn = winnr()
|
||||||
|
if(l:cwn == l:own)
|
||||||
|
if &buftype == 'quickfix'
|
||||||
|
lclose
|
||||||
|
elseif len(getloclist(winnr())) > 0
|
||||||
|
lclose
|
||||||
|
else
|
||||||
|
echohl WarningMsg | echo "No location list." | echohl None
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if !exists('g:cscope_cmd')
|
||||||
|
if executable('cscope')
|
||||||
|
let g:cscope_cmd = 'cscope'
|
||||||
|
else
|
||||||
|
call <SID>echo('cscope: command not found')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:cscope_interested_files')
|
||||||
|
let files = readfile(expand("<sfile>:p:h")."/interested.txt")
|
||||||
|
let g:cscope_interested_files = join(map(files, 'v:val."$"'), '\|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cscope_vim_dir = substitute($HOME,'\\','/','g')."/.cscope.vim"
|
||||||
|
let s:index_file = s:cscope_vim_dir.'/index'
|
||||||
|
|
||||||
|
function! s:GetBestPath(dir)
|
||||||
|
let f = substitute(a:dir,'\\','/','g')
|
||||||
|
let bestDir = ""
|
||||||
|
for d in keys(s:dbs)
|
||||||
|
if stridx(f, d) == 0 && len(d) > len(bestDir)
|
||||||
|
let bestDir = d
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return bestDir
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ListFiles(dir)
|
||||||
|
let d = []
|
||||||
|
let f = []
|
||||||
|
let cwd = a:dir
|
||||||
|
let sl = &l:stl
|
||||||
|
try
|
||||||
|
while cwd != ''
|
||||||
|
let a = split(globpath(cwd, "*"), "\n")
|
||||||
|
for fn in a
|
||||||
|
if getftype(fn) == 'dir'
|
||||||
|
if !exists('g:cscope_ignored_dir') || fn !~? g:cscope_ignored_dir
|
||||||
|
call add(d, fn)
|
||||||
|
endif
|
||||||
|
elseif getftype(fn) != 'file'
|
||||||
|
continue
|
||||||
|
elseif fn !~? g:cscope_interested_files
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
if stridx(fn, ' ') != -1
|
||||||
|
let fn = '"'.fn.'"'
|
||||||
|
endif
|
||||||
|
call add(f, fn)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let cwd = len(d) ? remove(d, 0) : ''
|
||||||
|
sleep 1m | let &l:stl = 'Found '.len(f).' files, finding in '.cwd | redrawstatus
|
||||||
|
endwhile
|
||||||
|
catch /^Vim:Interrupt$/
|
||||||
|
catch
|
||||||
|
echo "caught" v:exception
|
||||||
|
endtry
|
||||||
|
sleep 1m | let &l:stl = sl | redrawstatus
|
||||||
|
return f
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:RmDBfiles()
|
||||||
|
let odbs = split(globpath(s:cscope_vim_dir, "*"), "\n")
|
||||||
|
for f in odbs
|
||||||
|
call delete(f)
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:FlushIndex()
|
||||||
|
let lines = []
|
||||||
|
for d in keys(s:dbs)
|
||||||
|
call add(lines, d.'|'.s:dbs[d]['id'].'|'.s:dbs[d]['loadtimes'].'|'.s:dbs[d]['dirty'])
|
||||||
|
endfor
|
||||||
|
call writefile(lines, s:index_file)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:CheckNewFile(dir, newfile)
|
||||||
|
let id = s:dbs[a:dir]['id']
|
||||||
|
let cscope_files = s:cscope_vim_dir."/".id.".files"
|
||||||
|
let files = readfile(cscope_files)
|
||||||
|
if len(files) > g:cscope_split_threshold
|
||||||
|
let cscope_files = s:cscope_vim_dir."/".id."_inc.files"
|
||||||
|
if filereadable(cscope_files)
|
||||||
|
let files = readfile(cscope_files)
|
||||||
|
else
|
||||||
|
let files = []
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if count(files, a:newfile) == 0
|
||||||
|
call add(files, a:newfile)
|
||||||
|
call writefile(files, cscope_files)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:_CreateDB(dir, init)
|
||||||
|
let id = s:dbs[a:dir]['id']
|
||||||
|
let cscope_files = s:cscope_vim_dir."/".id."_inc.files"
|
||||||
|
let cscope_db = s:cscope_vim_dir.'/'.id.'_inc.db'
|
||||||
|
if ! filereadable(cscope_files) || a:init
|
||||||
|
let cscope_files = s:cscope_vim_dir."/".id.".files"
|
||||||
|
let cscope_db = s:cscope_vim_dir.'/'.id.'.db'
|
||||||
|
if ! filereadable(cscope_files)
|
||||||
|
let files = <SID>ListFiles(a:dir)
|
||||||
|
call writefile(files, cscope_files)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
exec 'cs kill '.cscope_db
|
||||||
|
redir @x
|
||||||
|
exec 'silent !'.g:cscope_cmd.' -b -i '.cscope_files.' -f'.cscope_db
|
||||||
|
redi END
|
||||||
|
if @x =~ "\nCommand terminated\n"
|
||||||
|
echohl WarningMsg | echo "Failed to create cscope database for ".a:dir.", please check if " | echohl None
|
||||||
|
else
|
||||||
|
let s:dbs[a:dir]['dirty'] = 0
|
||||||
|
exec 'cs add '.cscope_db
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:CheckAbsolutePath(dir, defaultPath)
|
||||||
|
let d = a:dir
|
||||||
|
while 1
|
||||||
|
if !isdirectory(d)
|
||||||
|
echohl WarningMsg | echo "Please input a valid path." | echohl None
|
||||||
|
let d = input("", a:defaultPath, 'dir')
|
||||||
|
elseif (len(d) < 2 || (d[0] != '/' && d[1] != ':'))
|
||||||
|
echohl WarningMsg | echo "Please input an absolute path." | echohl None
|
||||||
|
let d = input("", a:defaultPath, 'dir')
|
||||||
|
else
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
let d = substitute(d,'\\','/','g')
|
||||||
|
let d = substitute(d,'/\+$','','')
|
||||||
|
return d
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:InitDB(dir)
|
||||||
|
let id = localtime()
|
||||||
|
let s:dbs[a:dir] = {}
|
||||||
|
let s:dbs[a:dir]['id'] = id
|
||||||
|
let s:dbs[a:dir]['loadtimes'] = 0
|
||||||
|
let s:dbs[a:dir]['dirty'] = 0
|
||||||
|
call <SID>_CreateDB(a:dir, 1)
|
||||||
|
call <SID>FlushIndex()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:LoadDB(dir)
|
||||||
|
cs kill -1
|
||||||
|
exe 'cs add '.s:cscope_vim_dir.'/'.s:dbs[a:dir]['id'].'.db'
|
||||||
|
if filereadable(s:cscope_vim_dir.'/'.s:dbs[a:dir]['id'].'_inc.db')
|
||||||
|
exe 'cs add '.s:cscope_vim_dir.'/'.s:dbs[a:dir]['id'].'_inc.db'
|
||||||
|
endif
|
||||||
|
let s:dbs[a:dir]['loadtimes'] = s:dbs[a:dir]['loadtimes']+1
|
||||||
|
call <SID>FlushIndex()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" 0 -- loaded
|
||||||
|
" 1 -- cancelled
|
||||||
|
function! s:AutoloadDB(dir)
|
||||||
|
let ret = 0
|
||||||
|
let m_dir = <SID>GetBestPath(a:dir)
|
||||||
|
if m_dir == ""
|
||||||
|
echohl WarningMsg | echo "Can not find proper cscope db, please input a path to generate cscope db for." | echohl None
|
||||||
|
let m_dir = input("", a:dir, 'dir')
|
||||||
|
if m_dir != ''
|
||||||
|
let m_dir = <SID>CheckAbsolutePath(m_dir, a:dir)
|
||||||
|
call <SID>InitDB(m_dir)
|
||||||
|
call <SID>LoadDB(m_dir)
|
||||||
|
else
|
||||||
|
let ret = 1
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let id = s:dbs[m_dir]['id']
|
||||||
|
if cscope_connection(2, s:cscope_vim_dir.'/'.id.'.db') == 0
|
||||||
|
call <SID>LoadDB(m_dir)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return ret
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:updateDBs(dirs)
|
||||||
|
for d in a:dirs
|
||||||
|
call <SID>_CreateDB(d, 0)
|
||||||
|
endfor
|
||||||
|
call <SID>FlushIndex()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:clearDBs(dir)
|
||||||
|
cs kill -1
|
||||||
|
if a:dir == ""
|
||||||
|
let s:dbs = {}
|
||||||
|
call <SID>RmDBfiles()
|
||||||
|
else
|
||||||
|
let id = s:dbs[a:dir]['id']
|
||||||
|
call delete(s:cscope_vim_dir."/".id.".files")
|
||||||
|
call delete(s:cscope_vim_dir.'/'.id.'.db')
|
||||||
|
call delete(s:cscope_vim_dir."/".id."_inc.files")
|
||||||
|
call delete(s:cscope_vim_dir.'/'.id.'_inc.db')
|
||||||
|
unlet s:dbs[a:dir]
|
||||||
|
endif
|
||||||
|
call <SID>FlushIndex()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:listDBs()
|
||||||
|
let dirs = keys(s:dbs)
|
||||||
|
if len(dirs) == 0
|
||||||
|
echo "You have no cscope dbs now."
|
||||||
|
else
|
||||||
|
let s = [' ID LOADTIMES PATH']
|
||||||
|
for d in dirs
|
||||||
|
let id = s:dbs[d]['id']
|
||||||
|
if cscope_connection(2, s:cscope_vim_dir.'/'.id.'.db') == 1
|
||||||
|
let l = printf("*%d %10d %s", id, s:dbs[d]['loadtimes'], d)
|
||||||
|
else
|
||||||
|
let l = printf(" %d %10d %s", id, s:dbs[d]['loadtimes'], d)
|
||||||
|
endif
|
||||||
|
call add(s, l)
|
||||||
|
endfor
|
||||||
|
echo join(s, "\n")
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:loadIndex()
|
||||||
|
let s:dbs = {}
|
||||||
|
if ! isdirectory(s:cscope_vim_dir)
|
||||||
|
call mkdir(s:cscope_vim_dir)
|
||||||
|
elseif filereadable(s:index_file)
|
||||||
|
let idx = readfile(s:index_file)
|
||||||
|
for i in idx
|
||||||
|
let e = split(i, '|')
|
||||||
|
if len(e) == 0
|
||||||
|
call delete(s:index_file)
|
||||||
|
call <SID>RmDBfiles()
|
||||||
|
else
|
||||||
|
let db_file = s:cscope_vim_dir.'/'.e[1].'.db'
|
||||||
|
if filereadable(db_file)
|
||||||
|
if isdirectory(e[0])
|
||||||
|
let s:dbs[e[0]] = {}
|
||||||
|
let s:dbs[e[0]]['id'] = e[1]
|
||||||
|
let s:dbs[e[0]]['loadtimes'] = e[2]
|
||||||
|
let s:dbs[e[0]]['dirty'] = (len(e) > 3) ? e[3] :0
|
||||||
|
else
|
||||||
|
call delete(db_file)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
call <SID>RmDBfiles()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:preloadDB()
|
||||||
|
let dirs = split(g:cscope_preload_path, ';')
|
||||||
|
for m_dir in dirs
|
||||||
|
let m_dir = <SID>CheckAbsolutePath(m_dir, m_dir)
|
||||||
|
if ! has_key(s:dbs, m_dir)
|
||||||
|
call <SID>InitDB(m_dir)
|
||||||
|
endif
|
||||||
|
call <SID>LoadDB(m_dir)
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CscopeFind(action, word)
|
||||||
|
let dirtyDirs = []
|
||||||
|
for d in keys(s:dbs)
|
||||||
|
if s:dbs[d]['dirty'] == 1
|
||||||
|
call add(dirtyDirs, d)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if len(dirtyDirs) > 0
|
||||||
|
call <SID>updateDBs(dirtyDirs)
|
||||||
|
endif
|
||||||
|
let dbl = <SID>AutoloadDB(expand('%:p:h'))
|
||||||
|
if dbl == 0
|
||||||
|
try
|
||||||
|
exe ':lcs f '.a:action.' '.a:word
|
||||||
|
if g:cscope_open_location == 1
|
||||||
|
lw
|
||||||
|
endif
|
||||||
|
catch
|
||||||
|
echohl WarningMsg | echo 'Can not find '.a:word.' with querytype as '.a:action.'.' | echohl None
|
||||||
|
endtry
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CscopeFindInteractive(pat)
|
||||||
|
call inputsave()
|
||||||
|
let qt = input("\nChoose a querytype for '".a:pat."'(:help cscope-find)\n c: functions calling this function\n d: functions called by this function\n e: this egrep pattern\n f: this file\n g: this definition\n i: files #including this file\n s: this C symbol\n t: this text string\n\n or\n <querytype><pattern> to query `pattern` instead of '".a:pat."' as `querytype`, Ex. `smain` to query a C symbol named 'main'.\n> ")
|
||||||
|
call inputrestore()
|
||||||
|
if len(qt) > 1
|
||||||
|
call CscopeFind(qt[0], qt[1:])
|
||||||
|
elseif len(qt) > 0
|
||||||
|
call CscopeFind(qt, a:pat)
|
||||||
|
endif
|
||||||
|
call feedkeys("\<CR>")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:onChange()
|
||||||
|
if expand('%:t') =~? g:cscope_interested_files
|
||||||
|
let m_dir = <SID>GetBestPath(expand('%:p:h'))
|
||||||
|
if m_dir != ""
|
||||||
|
let s:dbs[m_dir]['dirty'] = 1
|
||||||
|
call <SID>FlushIndex()
|
||||||
|
call <SID>CheckNewFile(m_dir, expand('%:p'))
|
||||||
|
redraw
|
||||||
|
call <SID>echo('Your cscope db will be updated automatically, you can turn off this message by setting g:cscope_silent 1.')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CscopeUpdateDB()
|
||||||
|
call <SID>updateDBs(keys(s:dbs))
|
||||||
|
endfunction
|
||||||
|
if exists('g:cscope_preload_path')
|
||||||
|
call <SID>preloadDB()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:cscope_auto_update == 1
|
||||||
|
au BufWritePost * call <SID>onChange()
|
||||||
|
endif
|
||||||
|
|
||||||
|
set cscopequickfix=s-,g-,d-,c-,t-,e-,f-,i-
|
||||||
|
|
||||||
|
function! s:listDirs(A,L,P)
|
||||||
|
return keys(s:dbs)
|
||||||
|
endfunction
|
||||||
|
com! -nargs=? -complete=customlist,<SID>listDirs CscopeClear call <SID>clearDBs("<args>")
|
||||||
|
|
||||||
|
com! -nargs=0 CscopeList call <SID>listDBs()
|
||||||
|
call <SID>loadIndex()
|
62
sources_non_forked/vim-cscope/plugin/interested.txt
Normal file
62
sources_non_forked/vim-cscope/plugin/interested.txt
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
\.as
|
||||||
|
\.asm
|
||||||
|
\.au3
|
||||||
|
\.bat
|
||||||
|
\.c
|
||||||
|
\.c++
|
||||||
|
\.cc
|
||||||
|
\.cfg
|
||||||
|
\.clj
|
||||||
|
\.cmd
|
||||||
|
\.coffee
|
||||||
|
\.conf
|
||||||
|
\.config
|
||||||
|
\.cpp
|
||||||
|
\.cs
|
||||||
|
\.csv
|
||||||
|
\.cxx
|
||||||
|
\.dtd
|
||||||
|
\.go
|
||||||
|
\.h
|
||||||
|
\.h++
|
||||||
|
\.hh
|
||||||
|
\.hpp
|
||||||
|
\.hs
|
||||||
|
\.html
|
||||||
|
\.hxx
|
||||||
|
\.ini
|
||||||
|
\.java
|
||||||
|
\.js
|
||||||
|
\.json
|
||||||
|
\.jsp
|
||||||
|
\.l
|
||||||
|
\.m
|
||||||
|
\.mc
|
||||||
|
\.md
|
||||||
|
\.mhtml
|
||||||
|
\.mi
|
||||||
|
\.mysql
|
||||||
|
\.php
|
||||||
|
\.pl
|
||||||
|
\.pm
|
||||||
|
\.py
|
||||||
|
\.r
|
||||||
|
\.rb
|
||||||
|
\.rc
|
||||||
|
\.ru
|
||||||
|
\.sbt
|
||||||
|
\.scala
|
||||||
|
\.sh
|
||||||
|
\.sql
|
||||||
|
\.swift
|
||||||
|
\.tex
|
||||||
|
\.txt
|
||||||
|
\.vbs
|
||||||
|
\.vim
|
||||||
|
\.xml
|
||||||
|
\.xsd
|
||||||
|
\.y
|
||||||
|
\.yml
|
||||||
|
autohandler
|
||||||
|
config
|
||||||
|
dhandler
|
Loading…
Reference in a new issue