JohnBeckett (talk | contribs) (move new comment into tip) |
|||
(6 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{TipNew |
||
− | {{TipProposed |
||
− | |id= |
+ | |id=1668 |
− | |previous= |
+ | |previous=1667 |
− | |next= |
+ | |next=1669 |
|created=February 11, 2011 |
|created=February 11, 2011 |
||
|complexity=basic |
|complexity=basic |
||
Line 11: | Line 11: | ||
|category2= |
|category2= |
||
}} |
}} |
||
− | By default, Cscope [http://cscope.sourceforge.net/cscope_maps.vim script] adds < |
+ | By default, Cscope [http://cscope.sourceforge.net/cscope_maps.vim script] adds <code>cscope.out</code> from Vim's current directory and from <code>$CSCOPE_DB</code>. However, if you start Vim from say <code>~/proj/src/a/b/c/</code>, while <code>cscope.out</code> is at <code>~/proj/src/</code>, that <code>cscope.out</code> won't be loaded automatically. |
− | For ctags, there is a nice trick: with the command |
+ | For ctags, there is a nice trick: with the command <code>:set tags=tags;/</code> Vim will look for tags file everywhere starting from the current directory up to the root. |
This tip provides the same "autoloading" functionality for Cscope. Just add the following to your [[vimrc]]: |
This tip provides the same "autoloading" functionality for Cscope. Just add the following to your [[vimrc]]: |
||
Line 33: | Line 33: | ||
==Comments== |
==Comments== |
||
+ | If somebody use gVim in the windows(like me use Winxp), a modified script for the _vimrc script maybe helpful as follow: |
||
− | Thanks for the new comment. I put your text into the tip because the original seemed to be wrong (there were two changes: The original had <tt>nocsverbose</tt> and <tt>csverbose</tt>, but there is no such option. The correction changed these to <tt>nocscopeverbose</tt> and <tt>cscopeverbose</tt>. [[User:JohnBeckett|JohnBeckett]] 11:37, August 10, 2011 (UTC) |
||
+ | <pre> |
||
+ | function LoadCscope() |
||
+ | if (executable("cscope") && has("cscope")) |
||
+ | let UpperPath = findfile("cscope.out", ".;") |
||
+ | if (!empty(UpperPath)) |
||
+ | let path = strpart(UpperPath, 0, match(UpperPath, "cscope.out$") - 1) |
||
+ | if (!empty(path)) |
||
+ | let s:CurrentDir = getcwd() |
||
+ | let direct = strpart(s:CurrentDir, 0, 2) |
||
+ | let s:FullPath = direct . path |
||
+ | let s:AFullPath = globpath(s:FullPath, "cscope.out") |
||
+ | let s:CscopeAddString = "cs add " . s:AFullPath . " " . s:FullPath |
||
+ | execute s:CscopeAddString |
||
+ | endif |
||
+ | endif |
||
+ | endif |
||
+ | endfunction |
||
+ | command LoadCscope call LoadCscope() |
||
+ | |||
+ | </pre> |
||
+ | |||
+ | The last statement "Command LoadCscope call LoadCscope()" means that we can use command :LoadCscope to call the function LoadCscope for convinence. |
Revision as of 02:29, 15 July 2013
created February 11, 2011 · complexity basic · author Dorserg · version 7.0
By default, Cscope script adds cscope.out
from Vim's current directory and from $CSCOPE_DB
. However, if you start Vim from say ~/proj/src/a/b/c/
, while cscope.out
is at ~/proj/src/
, that cscope.out
won't be loaded automatically.
For ctags, there is a nice trick: with the command :set tags=tags;/
Vim will look for tags file everywhere starting from the current directory up to the root.
This tip provides the same "autoloading" functionality for Cscope. Just add the following to your vimrc:
function! LoadCscope() let db = findfile("cscope.out", ".;") if (!empty(db)) let path = strpart(db, 0, match(db, "/cscope.out$")) set nocscopeverbose " suppress 'duplicate connection' error exe "cs add " . db . " " . path set cscopeverbose endif endfunction au BufEnter /* call LoadCscope()
See also
Comments
If somebody use gVim in the windows(like me use Winxp), a modified script for the _vimrc script maybe helpful as follow:
function LoadCscope() if (executable("cscope") && has("cscope")) let UpperPath = findfile("cscope.out", ".;") if (!empty(UpperPath)) let path = strpart(UpperPath, 0, match(UpperPath, "cscope.out$") - 1) if (!empty(path)) let s:CurrentDir = getcwd() let direct = strpart(s:CurrentDir, 0, 2) let s:FullPath = direct . path let s:AFullPath = globpath(s:FullPath, "cscope.out") let s:CscopeAddString = "cs add " . s:AFullPath . " " . s:FullPath execute s:CscopeAddString endif endif endif endfunction command LoadCscope call LoadCscope()
The last statement "Command LoadCscope call LoadCscope()" means that we can use command :LoadCscope to call the function LoadCscope for convinence.