Vim Tips Wiki
(adjust Template:ScriptComments to remove id as no longer needed; minor tweaks)
(Change <tt> to <code>, perhaps also minor tweak.)
 
(2 intermediate revisions by one other user not shown)
Line 21: Line 21:
   
 
Dotan, January 27, 2011
 
Dotan, January 27, 2011
  +
  +
===Auto Update Database===
  +
  +
<pre>
  +
" If you set this to 1, it will auto update your cscope/gtags database and
  +
" reset the cscope connection when you save a file.
  +
if !exists("g:autocscope_auto_update")
  +
let g:autocscope_auto_update = 1
  +
endif
  +
  +
  +
function s:Update_csdb()
  +
if g:autocscope_auto_update != 1
  +
return
  +
endif
  +
  +
if exists("b:csdbpath")
  +
if cscope_connection(3, g:autocscope_tagfile_name, b:csdbpath)
  +
if g:autocscope_use_gtags == 1
  +
"exe "silent !cd " . b:csdbpath . " && global -u &"
  +
exe "silent !cd " . b:csdbpath . " && global -u"
  +
else
  +
"exe "silent !cd " . b:csdbpath . " && cscope -Rbq &"
  +
exe "silent !cd " . b:csdbpath . " && cscope -Rbq"
  +
endif
  +
  +
set nocsverb
  +
exe "cs reset"
  +
set csverb
  +
endif
  +
endif
  +
endfunc
  +
  +
  +
" auto toggle the menu
  +
augroup autoload_cscope
  +
au!
  +
au BufEnter *.[chly] call <SID>Cycle_csdb() | call <SID>Cycle_macros_menus()
  +
au BufEnter *.cc call <SID>Cycle_csdb() | call <SID>Cycle_macros_menus()
  +
au BufWritePost *.[chly] call <SID>Update_csdb() | call <SID>Cycle_macros_menus()
  +
au BufWritePost *.cc call <SID>Update_csdb() | call <SID>Cycle_macros_menus()
  +
au BufUnload *.[chly] call <SID>Unload_csdb() | call <SID>Cycle_macros_menus()
  +
au BufUnload *.cc call <SID>Unload_csdb() | call <SID>Cycle_macros_menus()
  +
augroup END
  +
  +
</pre>
  +
  +
Flynn December 10, 2011
  +
  +
===Support for GNU GLOBAL===
  +
  +
<pre>
  +
" If you set this to 1, it will use gtags-cscope instead of cscope which is
  +
" faster than cscope.
  +
if !exists("g:autocscope_use_gtags")
  +
let g:autocscope_use_gtags = 1
  +
endif
  +
  +
  +
if g:autocscope_use_gtags == 1
  +
let g:autocscope_tagfile_name = "GTAGS"
  +
set cscopeprg=gtags-cscope
  +
else
  +
let g:autocscope_tagfile_name = "cscope.out"
  +
set cscopeprg=cscope
  +
endif
  +
  +
</pre>
  +
  +
In function Cycle_csdb:
  +
When use gtags-cscope, should change to the directory that contains the dbs first.
  +
  +
Change:
  +
<pre>
  +
exe "cs add " . b:csdbpath . "/cscope.out " . b:csdbpath
  +
</pre>
  +
to:
  +
<pre>
  +
exe "cd " . b:csdbpath
  +
exe "cs add " . b:csdbpath . "/" . g:autocscope_tagfile_name . " " . b:csdbpath
  +
</pre>
  +
  +
Then replace "out", "cscope.out" with g:autocscope_tagfile_name at other places. --Flynn December 10, 2011

Latest revision as of 09:41, 14 July 2012

Use this page to discuss script 157 autoload_cscope: search for and load cscope.out databases automatically

  • Add constructive comments, bug reports, or discuss improvements (see the guideline).
  • Do not document the script here (the author should do that on vim.org).
  • This page may be out of date: check the script's vim.org page above, and its release notes.

Comments[]

Usage under MS Windows[]

I changed the windowdir function to:

" windowdir
"  Gets the directory for the file in the current window
"  Or the current working dir if there isn't one for the window.
"  Use tr to allow that other OS paths, too
function s:windowdir()
  if winbufnr(0) == -1
    let unislash = getcwd()
  else
    let unislash = fnamemodify(bufname(winbufnr(0)), ':p:h')
  endif
  return tr(unislash, '\', '/')
endfunc

Dotan, January 27, 2011

Auto Update Database[]

" If you set this to 1, it will auto update your cscope/gtags database and
" reset the cscope connection when you save a file.
if !exists("g:autocscope_auto_update")
  let g:autocscope_auto_update = 1
endif


function s:Update_csdb()
    if g:autocscope_auto_update != 1
      return
    endif

    if exists("b:csdbpath")
      if cscope_connection(3, g:autocscope_tagfile_name, b:csdbpath)
          if g:autocscope_use_gtags == 1
              "exe "silent !cd " . b:csdbpath . " && global -u &"
              exe "silent !cd " . b:csdbpath . " && global -u"
          else
              "exe "silent !cd " . b:csdbpath . " && cscope -Rbq &"
              exe "silent !cd " . b:csdbpath . " && cscope -Rbq"
          endif

          set nocsverb
          exe "cs reset"
          set csverb
      endif
  endif
endfunc


" auto toggle the menu
augroup autoload_cscope
 au!
 au BufEnter *.[chly]       call <SID>Cycle_csdb() | call <SID>Cycle_macros_menus()
 au BufEnter *.cc           call <SID>Cycle_csdb() | call <SID>Cycle_macros_menus()
 au BufWritePost *.[chly]   call <SID>Update_csdb() | call <SID>Cycle_macros_menus()
 au BufWritePost *.cc       call <SID>Update_csdb() | call <SID>Cycle_macros_menus()
 au BufUnload *.[chly]      call <SID>Unload_csdb() | call <SID>Cycle_macros_menus()
 au BufUnload *.cc          call <SID>Unload_csdb() | call <SID>Cycle_macros_menus()
augroup END

Flynn December 10, 2011

Support for GNU GLOBAL[]

" If you set this to 1, it will use gtags-cscope instead of cscope which is
" faster than cscope.
if !exists("g:autocscope_use_gtags")
  let g:autocscope_use_gtags = 1
endif


if g:autocscope_use_gtags == 1
    let g:autocscope_tagfile_name = "GTAGS"
    set cscopeprg=gtags-cscope
else
    let g:autocscope_tagfile_name = "cscope.out"
    set cscopeprg=cscope
endif

In function Cycle_csdb: When use gtags-cscope, should change to the directory that contains the dbs first.

Change:

    exe "cs add " . b:csdbpath . "/cscope.out " . b:csdbpath

to:

    exe "cd " . b:csdbpath
    exe "cs add " . b:csdbpath . "/" . g:autocscope_tagfile_name . " " . b:csdbpath

Then replace "out", "cscope.out" with g:autocscope_tagfile_name at other places. --Flynn December 10, 2011