538 lines
18 KiB
Text
538 lines
18 KiB
Text
|
*CCTree.txt* Plugin for C Call-Tree Explorer *CCTree*
|
||
|
|
||
|
Author: Hari Rangarajan (First.Last AT gmail DOT com)
|
||
|
Last Change: 20 May 2011
|
||
|
|
||
|
CCTree version 1.51
|
||
|
|
||
|
For Vim version 7.0 and above
|
||
|
|
||
|
==============================================================================
|
||
|
|
||
|
1. Overview |CCTree-overview|
|
||
|
2. Downloads |CCTree-download|
|
||
|
3. Installation |CCTree-installation|
|
||
|
4. Configuration |CCTree-configuration|
|
||
|
5. Features |CCTree-features|
|
||
|
6. Limitations |CCTree-limitations|
|
||
|
7. FAQ & TIPS |CCTree-faq|
|
||
|
8. History |CCTree-history|
|
||
|
9. Thanks |CCTree-thanks|
|
||
|
|
||
|
==============================================================================
|
||
|
1. Overview~
|
||
|
*CCTree-overview*
|
||
|
|
||
|
Plugin generates dependency-trees for symbols using a cscope database in Vim.
|
||
|
Basic cross-referencing includes functions and macros. Enhanced symbol
|
||
|
processing covers macros, typedefs, enums, and global variables.
|
||
|
|
||
|
Requires Cscope and works best with C code.
|
||
|
|
||
|
==============================================================================
|
||
|
2. Downloads~
|
||
|
*CCTree-download*
|
||
|
|
||
|
You can download the latest release of the script from this url :
|
||
|
http://www.vim.org/scripts/script.php?script_id=2368
|
||
|
|
||
|
|
||
|
Cscope packages can be found here:
|
||
|
http://cscope.sourceforge.net/
|
||
|
http://code.google.com/p/cscope-win32/
|
||
|
|
||
|
|
||
|
==============================================================================
|
||
|
3. Installation~
|
||
|
*CCTree-installation*
|
||
|
|
||
|
Copy this file to ~/.vim/plugins/ or to /vimfiles/plugins/ (on Win32
|
||
|
platforms)
|
||
|
|
||
|
It should also be possible to load it as a filetype plugin ~/.vim/ftplugin/c/
|
||
|
Need to set :filetype plugin on
|
||
|
|
||
|
|
||
|
==============================================================================
|
||
|
CONFIGURATION *CCTree-configuration*
|
||
|
4. Options~
|
||
|
|
||
|
You can customize behavior by changing the following variable settings
|
||
|
|
||
|
4.1.1 Cscope Symbol Database~
|
||
|
*CCTreeCscopeDb*
|
||
|
|
||
|
Cscope database file, g:CCTreeCscopeDb = "cscope.out"
|
||
|
|
||
|
4.1.2 Call-tree Depth~
|
||
|
*CCTreeRecursiveDepth*
|
||
|
Maximum call levels, g:CCTreeRecursiveDepth = 3
|
||
|
|
||
|
4.1.3 Call-tree Minimum Visible Depth~
|
||
|
*CCTreeMinVisibleDepth*
|
||
|
Maximum visible(unfolded) level, g:CCTreeMinVisibleDepth = 3
|
||
|
|
||
|
4.1.4 Call-tree window display~
|
||
|
|
||
|
4.4.1 Orientation~
|
||
|
*CCTreeOrientation*
|
||
|
Orientation of window, g:CCTreeOrientation = "leftabove"
|
||
|
(standard vim options for split: [right|left][above|below])
|
||
|
|
||
|
4.5 Direction~
|
||
|
*CCTreeWindowVertical*
|
||
|
Use Vertical window, g:CCTreeWindowVertical = 1
|
||
|
|
||
|
4.5.1 Dimensions~
|
||
|
|
||
|
These settings determine the layout of the CCTree preview window.
|
||
|
|
||
|
4.5.2 Horizontal Window Settings~
|
||
|
*CCTreeWindowHeight*
|
||
|
Horizontal window, g:CCTreeWindowHeight, default is -1.
|
||
|
|
||
|
4.5.2 Vertical Window Settings~
|
||
|
*CCTreeWindowMinWidth*
|
||
|
*CCTreeWindowWidth*
|
||
|
Minimum width for window, g:CCTreeWindowMinWidth = 40.
|
||
|
g:CCTreeWindowWidth = -1, auto-select best width to fit.
|
||
|
|
||
|
|
||
|
4.6 Call-tree display format~
|
||
|
*CCTreeDisplayMode*
|
||
|
Display format, g:CCTreeDisplayMode, default: 1
|
||
|
|
||
|
Values: 1 -- Ultra-compact (takes minimum screen width)
|
||
|
2 -- Compact (Takes little more space)
|
||
|
3 -- Wide (Takes copious amounts of space)
|
||
|
|
||
|
For vertical splits, 1 and 2 are good, while 3 is good for horizontal
|
||
|
displays.
|
||
|
|
||
|
4.7. Dynamic Call-tree highlighting~
|
||
|
*CCTreeHilightCallTree*
|
||
|
|
||
|
Enable/disable dynamic call-tree highlighting, default: 1
|
||
|
|
||
|
|
||
|
4.7.1 Syntax items~
|
||
|
*CCTreeSymbol* *CCTreeHiSymbol*
|
||
|
CCTreeSymbol is the symbol name.
|
||
|
CCTreeHiSymbol is the highlighted call tree functions.
|
||
|
|
||
|
*CCTreeMarkers* *CCTreeHiMarkers*
|
||
|
CCTreeMarkers include "|","+--->".
|
||
|
CCTreeHiMarkers is the same as CCTreeMarkers except these denote the
|
||
|
highlighted call-tree.
|
||
|
|
||
|
|
||
|
|
||
|
==============================================================================
|
||
|
COMMAND LIST *CCTree-commands-list*
|
||
|
|
||
|
Database Management~
|
||
|
CCTreeLoadDB <dbname>
|
||
|
CCTreeAppendDB <dbname>
|
||
|
CCTreeUnLoadDB
|
||
|
CCTreeShowLoadedDBs
|
||
|
Refer to |CCTree-usage|
|
||
|
|
||
|
Native Xref Database~
|
||
|
CCTreeLoadXRefDB <dbname>
|
||
|
CCTreeSaveXRefDB <dbname>
|
||
|
|
||
|
Refer to |CCTree-fast-loading|
|
||
|
|
||
|
Symbol tracing~
|
||
|
CCTreeTraceForward <symbolname>
|
||
|
CCTreeTraceReverse <symbolname>
|
||
|
CCTreeRecurseDepthPlus
|
||
|
CCTreeRecurseDepthMinus
|
||
|
Refer to |CCTree-explore-source|
|
||
|
Trace Management~
|
||
|
CCTreeWindowSaveCopy
|
||
|
CCTreeWindowHiCallTree
|
||
|
Refer to |CCTree-preview-window|
|
||
|
|
||
|
Dynamic configuration~
|
||
|
CCTreeOptsEnable <option> (<tab> for auto-complete)
|
||
|
CCTreeOptsDisable <option> (<tab> for auto-complete)
|
||
|
CCTreeOptsToggle <option> (<tab> for auto-complete)
|
||
|
Options~
|
||
|
DynamicTreeHiLights: Control dynamic tree highlighting
|
||
|
UseUnicodeSymbols: Use of UTF-8 special characters for tree
|
||
|
UseConceal: Use (+Conceal) feature instead of 'ignore'
|
||
|
syntax highlighting. Allows CCTree window
|
||
|
to be exported in HTML without syntax markup
|
||
|
characters. (Vim 7.3+ only)
|
||
|
*CCTree-Enhanced-Symbol-Processing*
|
||
|
EnhancedSymbolProcessing: Cross-reference enums, macros,
|
||
|
global variables, typedefs (WARNING: Database
|
||
|
processing speeds will be slow).
|
||
|
|
||
|
SHORTCUT KEYS *CCTree-Key-Map*
|
||
|
Default Mappings~
|
||
|
*CCTree-Default-Key-Map*
|
||
|
Get reverse call tree for symbol <C-\><
|
||
|
Get forward call tree for symbol <C-\>>
|
||
|
Increase depth of tree and update <C-\>=
|
||
|
Decrease depth of tree and update <C-\>-
|
||
|
|
||
|
Open symbol in other window <CR>
|
||
|
Preview symbol in other window <Ctrl-P>
|
||
|
|
||
|
Save copy of preview window <C-\>y
|
||
|
Highlight current call-tree flow <C-l>
|
||
|
Compress(Fold) call tree view zs
|
||
|
(This is useful for viewing long
|
||
|
call trees which span across
|
||
|
multiple pages)
|
||
|
|
||
|
Custom user-mappings
|
||
|
*CCTree-Custom-Key-Map*
|
||
|
Users can custom-map the short-cut keys by
|
||
|
overriding the following variables in their
|
||
|
Vim start-up configuration
|
||
|
>
|
||
|
let g:CCTreeKeyTraceForwardTree = '<C-\>>'
|
||
|
let g:CCTreeKeyTraceReverseTree = '<C-\><'
|
||
|
let g:CCTreeKeyHilightTree = '<C-l>' " Static highlighting
|
||
|
let g:CCTreeKeySaveWindow = '<C-\>y'
|
||
|
let g:CCTreeKeyToggleWindow = '<C-\>w'
|
||
|
let g:CCTreeKeyCompressTree = 'zs' " Compress call-tree
|
||
|
let g:CCTreeKeyDepthPlus = '<C-\>='
|
||
|
let g:CCTreeKeyDepthMinus = '<C-\>-'
|
||
|
<
|
||
|
|
||
|
==============================================================================
|
||
|
FEATURES *CCTree-features*
|
||
|
|
||
|
5.1. Symbol database~
|
||
|
*CCTree-usage*
|
||
|
Build cscope database, for example:
|
||
|
> cscope -b -i cscope.files
|
||
|
[Tip: add -c option to build uncompressed databases for faster
|
||
|
load speeds]
|
||
|
|
||
|
Load database~
|
||
|
>
|
||
|
:CCTreeLoadDB
|
||
|
<
|
||
|
(Please note that it might take a while depending on the
|
||
|
database size)
|
||
|
|
||
|
A database name, i.e., my_cscope.out, can be specified with the command. If
|
||
|
not provided, a prompt will ask for the filename; default is cscope.out.
|
||
|
|
||
|
Unload database ~
|
||
|
>
|
||
|
:CCTreeUnLoadDB
|
||
|
<
|
||
|
Append database~
|
||
|
>
|
||
|
:CCTreeAppendDB
|
||
|
<
|
||
|
Allows multiple cscope files to be loaded and cross-referenced
|
||
|
Illustration: >
|
||
|
:CCTreeAppendDB ./cscope.out
|
||
|
:CCTreeAppendDB ./dir1/cscope.out
|
||
|
:CCTreeAppendDB ./dir2/cscope.out
|
||
|
<
|
||
|
A database name, i.e., my_cscope.out, can be specified with
|
||
|
the command. If not provided, a prompt will ask for the
|
||
|
filename; default is cscope.out.
|
||
|
|
||
|
FASTER DATABASE LOADING *CCTree-fast-loading*
|
||
|
|
||
|
Save native Xref Db~
|
||
|
>
|
||
|
:CCTreeSaveXRefDb cctree.out
|
||
|
<
|
||
|
This command will save the cross-referenced symbols currently loaded into
|
||
|
memory into a serialized format for faster loading.
|
||
|
|
||
|
Load native XRef Db~
|
||
|
>
|
||
|
:CCTreeLoadXRefDb cctree.out
|
||
|
<
|
||
|
This command will load cross-referenced symbols from the previously saved
|
||
|
native format database.
|
||
|
|
||
|
ccglue~
|
||
|
*CCTree-ccglue*
|
||
|
|
||
|
Check out the ccglue project at http://ccglue.sourceforge.net for an external
|
||
|
tool that can build cctree-compatible xref databases.
|
||
|
|
||
|
|
||
|
5.2. Exploring source-code~
|
||
|
*CCTree-explore-source*
|
||
|
|
||
|
Get reverse call tree for symbol <C-\><
|
||
|
>
|
||
|
:CCTreeTraceReverse <symbolname>
|
||
|
<
|
||
|
|
||
|
Get forward call tree for symbol <C-\>>
|
||
|
>
|
||
|
:CCTreeTraceForward <symbolname>
|
||
|
<
|
||
|
Increase depth of tree and update <C-\>=
|
||
|
>
|
||
|
:CCTreeRecurseDepthPlus
|
||
|
<
|
||
|
Decrease depth of tree and update <C-\>-
|
||
|
>
|
||
|
:CCTreeRecurseDepthMinus
|
||
|
<
|
||
|
5.3. Preview Window~
|
||
|
*CCTree-preview-window*
|
||
|
Open symbol in other window <CR>
|
||
|
Preview symbol in other window <Ctrl-P>
|
||
|
|
||
|
5.4. Syntax Coloring~
|
||
|
*CCTree-Syntax*
|
||
|
CCTreeHiXXXX allows dynamic highlighting of the call-tree. To observe the
|
||
|
effect, move the cursor to the function to highlight the current call-tree.
|
||
|
This option can be turned off using the setting, *CCTreeHilightCallTree* .
|
||
|
|
||
|
For faster highlighting, the value of 'updatetime' can be changed.
|
||
|
|
||
|
5.5 Support for large database files~
|
||
|
*CCTree-LargeDatabase* *CCTree-LargeFile*
|
||
|
Vimscript does not have an API for reading files line-by-line. This
|
||
|
becomes a problem when parsing large databases. CCTree can overcome
|
||
|
the limitation using an external utility (i.e., GNU coreutils: split)
|
||
|
or VimScript's perl interpreter interface (:version must indicate +perl)
|
||
|
|
||
|
5.5.1 Using GNU Coreutils (split/cat)~
|
||
|
*CCTree-Tools-split* *CCTree-Tools-cat*
|
||
|
The following settings are tailored to suit GNU coreutils split; the
|
||
|
default settings should work with no changes on typical linux/unix distros.
|
||
|
Monopoly OSes will require installation of unixutils or equivalent.
|
||
|
|
||
|
External command is setup with the following parameters~
|
||
|
>
|
||
|
let g:CCTreeSplitProgCmd =
|
||
|
'PROG_SPLIT SPLIT_OPT SPLIT_SIZE IN_FILE OUT_FILE_PREFIX'
|
||
|
<
|
||
|
|
||
|
Break-down of individual parameters~
|
||
|
The split utility is assumed to be on the path; otherwise, specify full path
|
||
|
g:CCTreeSplitProg = 'split'
|
||
|
|
||
|
Option for splitting files (-C or -l)~
|
||
|
>
|
||
|
let g:CCTreeSplitProgOption = '-C'
|
||
|
<
|
||
|
If split program does not support -C, then this parameter must be set to
|
||
|
the number of lines in the split files
|
||
|
>
|
||
|
let g:CCTreeDbFileSplitLines = -1
|
||
|
<
|
||
|
Largest filesize Vimscript can handle; file sizes greater than this will
|
||
|
be temporarily split
|
||
|
>
|
||
|
let g:CCTreeDbFileMaxSize = 40000000 (40 Mbytes)
|
||
|
<
|
||
|
Sample system command~
|
||
|
Typical:
|
||
|
>
|
||
|
split -C 40000000 inputFile outputFilePrefix
|
||
|
<
|
||
|
When g:CCTreeDbFileSplitLines is set to 10000 (-C options will be ignored)
|
||
|
>
|
||
|
split -l 10000 inputFile outputFilePrefix
|
||
|
<
|
||
|
*CCTree-Tools-Perl*
|
||
|
*CCTree-Tools-Perl-LargeFile*
|
||
|
Enabling perl interface~
|
||
|
|
||
|
By default, perl usage is disabled. Set
|
||
|
>
|
||
|
let g:CCTreeUsePerl = 1
|
||
|
< to enable the perl interface.
|
||
|
|
||
|
Perl interface is typically faster than native Vimscript.
|
||
|
This option can be used independent of the file size
|
||
|
|
||
|
For more info on setting up perl interface
|
||
|
:help |perl-using| or :help |perl-dynamic|
|
||
|
|
||
|
5.6. Miscellaneous *CCTree-Miscellaneous*
|
||
|
|
||
|
UTF-8 usage *CCTree-UTF8-Symbols*
|
||
|
UTF-8 symbols should work fine on the majority of
|
||
|
X11 systems; however, some terminals might cause problems.
|
||
|
|
||
|
To use symbols for drawing the tree, this option can be enabled.
|
||
|
>
|
||
|
let g:CCTreeUseUTF8Symbols = 1
|
||
|
<
|
||
|
The options interface (CCTreeOptsxxx) can be used to
|
||
|
modify options on-the-fly.
|
||
|
|
||
|
==============================================================================
|
||
|
6. Limitations~
|
||
|
*CCTree-limitations*
|
||
|
|
||
|
The following are known limitations:
|
||
|
|
||
|
Basic Symbol Processing:
|
||
|
(1) The accuracy of the call-tree will only be as good as the cscope database
|
||
|
generation. (NOTE: Different flavors of Cscope have some known limitations
|
||
|
due to the lexical analysis engine. This results in incorrectly identified
|
||
|
function blocks, etc.)
|
||
|
|
||
|
Enhanced Symbol Processing:
|
||
|
(1) Cscope does not mark-up nameless enums correctly; hence,
|
||
|
CCTree cannot recognize nameless enum symbols.
|
||
|
|
||
|
|
||
|
==============================================================================
|
||
|
7. FAQ~
|
||
|
*CCTree-faq*
|
||
|
|
||
|
+ I see strange characters "!#@" on my screen when dynamic highlighting is
|
||
|
enabled. Why do I see them?
|
||
|
|
||
|
Check :hi ignore. You will see something like
|
||
|
hi ignore ctermfg=white guifg=bg
|
||
|
|
||
|
For console, white must be your background color; for GUI, guifg must be set
|
||
|
to bg.
|
||
|
|
||
|
==============================================================================
|
||
|
8. History~
|
||
|
*CCTree-history*
|
||
|
Version 1.51: May 18, 2011
|
||
|
1. Robust error reporting when external (split/cat) utils fail
|
||
|
|
||
|
Version 1.50: May 6, 2011
|
||
|
1. Support cross-referencing of global variables, macros,
|
||
|
enums, and typedefs.
|
||
|
|
||
|
Version 1.40: April 22, 2011
|
||
|
1. Maintain order of functions called during forward tracing
|
||
|
|
||
|
Version 1.39: April 18, 2011
|
||
|
1. Use +Conceal feature for highlighting (only Vim 7.3)
|
||
|
|
||
|
Version 1.33: April 5, 2011
|
||
|
1. Load and trace CCTree native XRefDb directly from disk
|
||
|
2. Fix AppendDB command when 'ignorecase' is set
|
||
|
|
||
|
Version 1.26: March 28, 2011
|
||
|
1. Fix macro cross-referencing limitation
|
||
|
2. Correct native xref file format
|
||
|
|
||
|
Version 1.21: March 21, 2011
|
||
|
1. Support serialization of loaded
|
||
|
cscope databases (for faster loading)
|
||
|
|
||
|
Version 1.07: March 09, 2011
|
||
|
1. Fix new keymaps incorrectly applied to buffer
|
||
|
2. CCTreeOptsToggle command for toggling options
|
||
|
|
||
|
Version 1.04: March 06, 2011
|
||
|
1. Customization for key mappings
|
||
|
2. Dynamic configuration of UI variables
|
||
|
3. Folding long call-trees to show current path dynamically
|
||
|
|
||
|
Version 1.01: March 04, 2011
|
||
|
1. Make UTF-8 symbols for tree optional
|
||
|
|
||
|
Version 1.00: March 02, 2011
|
||
|
1. Staging release for upcoming features
|
||
|
- Complete refactoring of code to take
|
||
|
advantage of VimScript's OO features
|
||
|
2. Faster decompression of symbols
|
||
|
3. Display related changes
|
||
|
- Use of unicode symbols for tree
|
||
|
4. Bugfixes related to multi-database loading
|
||
|
|
||
|
Version 0.90: February 18, 2011
|
||
|
1. Support for large databases using external split utility or perl
|
||
|
interface
|
||
|
|
||
|
Version 0.85: February 9, 2011
|
||
|
1. Significant increase in database loading and decompression speeds
|
||
|
|
||
|
Version 0.80: February 4, 2011
|
||
|
1. Reduce memory usage by removing unused xref symbols
|
||
|
|
||
|
Version 0.75: June 23, 2010
|
||
|
1. Support for saving CCTree preview window; multiple
|
||
|
CCTree windows can now be open
|
||
|
|
||
|
ersion 0.71: May 11, 2010
|
||
|
1. Fix script bug
|
||
|
|
||
|
Version 0.70: May 8, 2010
|
||
|
1. Functionality to load multiple cscope databases
|
||
|
|
||
|
Version 0.65: July 12, 2009
|
||
|
1. Toggle preview window
|
||
|
|
||
|
Version 0.61: December 24, 2008
|
||
|
1. Fixed bug when processing include files
|
||
|
2. Remove 'set ruler' option
|
||
|
|
||
|
Version 0.60: November 26, 2008
|
||
|
1. Added support for source-file dependency tree
|
||
|
|
||
|
Version 0.50: October 17, 2008
|
||
|
1. Optimizations for compact memory foot-print and
|
||
|
improved compressed-database load speeds
|
||
|
|
||
|
Version 0.41: October 6, 2008
|
||
|
1. Minor fix: Compressed cscope databases will load
|
||
|
incorrectly if encoding is not 8-bit
|
||
|
|
||
|
Version 0.4: September 28, 2008
|
||
|
1. Rewrite of display-related code
|
||
|
2. New syntax hightlighting
|
||
|
3. Dynamic highlighting for call-trees
|
||
|
4. Support for new window modes (vertical, horizontal)
|
||
|
5. New display format option for compact or wide call-trees
|
||
|
6. Preview window fix
|
||
|
|
||
|
Version 0.3: September 21, 2008
|
||
|
1. Support compressed cscope databases
|
||
|
2. Display window related bugs fixed
|
||
|
3. More intuitive display and folding capabilities
|
||
|
|
||
|
Version 0.2: September 12, 2008
|
||
|
(Patches from Yegappan Lakshmanan, thanks!)
|
||
|
1. Support for using the plugin in Vi-compatible mode
|
||
|
2. Filtering out unwanted lines before processing the db
|
||
|
3. Command-line completion for the commands
|
||
|
4. Using the cscope db from any directory
|
||
|
|
||
|
Version 0.1: August 31,2008
|
||
|
1. Cross-referencing support for only functions and macros
|
||
|
(Note: Functions inside macro definitions will be incorrectly
|
||
|
attributed to the top level calling function)
|
||
|
|
||
|
|
||
|
==============================================================================
|
||
|
9. Thanks~
|
||
|
*CCTree-thanks*
|
||
|
|
||
|
|
||
|
Qaiser Durrani (ver 1.51 -- Reporting issues with SunOS)
|
||
|
Ben Fritz (ver 1.39 -- Suggestion/Testing for
|
||
|
conceal feature)
|
||
|
Ben Fritz (ver 1.26 -- Bug report)
|
||
|
Frank Chang (ver 1.0x -- testing/UI enhancement
|
||
|
ideas/bug fixes)
|
||
|
Arun Chaganty/Timo Tiefel (Ver 0.60 -- bug report)
|
||
|
Michael Wookey (Ver 0.40 -- Testing/bug report/patches)
|
||
|
Yegappan Lakshmanan (Ver 0.20 -- Patches)
|
||
|
|
||
|
The Vim Community, ofcourse :)
|
||
|
|
||
|
|
||
|
vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
|
||
|
|