Vim
Intellisense - C++ Plug-in
User's
Guide
Introduction
The Vim
Intellisense - C++ plug-in brings in Intellisense details to the C++ developer
in VIM. The following keys pops up the Intellisense window,
Key
|
Lists…
|
.
|
List
the methods and variables of the class on whose object . is pressed
|
->
|
List
the methods and variables of the class on whose object -> is pressed
|
::
|
For
class:
List
the static members of the class.
|
For
namespace:
List types and functions defined under the namespace
|
For
global namespace:
List
functions and types of global namespace. Note:
only first 200 entries are listed. See TODO
|
(
|
List
the tool tips for the function or method on which ( is typed.
|
#include
<
|
List
all the header files from the all folders set in the system variable INCLUDE
|
The cppft.dll
is invoked from insen.exe to list the context specific contents. The input
parameter is specified in the %TEMP%/VimHelperParam.txt
The
cppft.dll uses perl and ctags to generate the listings for the object on which
insen was invoked.
Prerequisite
v
ActivePerl 5.8 and
above should have been installed on the system and perl.exe should be in path.
Active Perl can be freely downloaded from www.activestate.com.
v
INCLUDE system
variable should be set with the correct paths.
v
TEMP folder should
be defined with a temporary folder name.
Screen Shots
How does it work?
- The plug-in collects all the
included files (recursively) and generates a tag file using ctags.exe
(shipped along with insen). This is generated one time per session and per
file. The tag file is generated in %TEMP% folder as InsenVimAllTags.tag.
This file is cached for further usage. Also see caching.
- The include files list is
collected starting from #included files of the current file and then in
the files that are read using the #include. This continues until there are
no new #include files found while doing this recursive
parsing.
- For . and
-> it parses the current file and then the included files to find the
class of the object and lists the members of that class.
- For :: the symbol before :: is
taken as type and the static members of the type is listed.
- For ( the
tool tip of the method or function is listed.
Caching
The
InsenVimAllTags.tag is generated each time a session is changed. For e.g. if you open a VIM and started A.cpp. Now first time
insen is required the tags file is generated for the include files starting
root from the #included files of A.cpp.
From then
on as long as you are in A.cpp the same tag file is used to list the members.
Now if
you open another c++ file B.cpp (in the same Vim window or another window) and
invoked insen the cache is cleared and the InsenVimAllTags.tag file is
generated for the new set of include files.
You have
to remove the cache manually in the following cases,
- A new header file is
#included in the current file
- A new function/type is added
to one of #included file
- a new type is added to the
current file
To remove
the caching manually you have to invoke vim method IN_VisReload().
i.e. Type :call
IN_VimReload() from the command of VIM. Alternatively you can delete the InsenVimAllTags.tag
in the %TEMP% folder.
Include
files listing cache….
The
header files present in all the folders of the INCLUDE path. This is generated
for the first time you invoke this listing and cached in the file VimHelper.txt_CACHE
in the %TEMP% folder. So if are
adding a new path to INCLUDE you have to delete this file so that the header
files in the new path is added to the list.
Trouble Shooting
When the insen is not
listed you can use information in this section to trouble shoot yourself.
1. Check %TEMP% folder
for VimHelperParam.txt is generated. Check if the contents make sense to what
you have typed in C++ file.
2. Check if the
VimHelper.txt is generated and if the listing in that file is proper.
3. If this file is not
generated check the below things,
a. You have #included the
header file which contains the definition of the class for which you are
expecting the Intellisense.
b. You have added the
path of the include file to the INCLUDE path.
c. Perl.exe is in path
and it is the ActivePerl5.8 version.
d. Remove the cache and
try again.
4. Also check insen_cppft.log is generated in the %TEMP% folder. Check if there
are any error reports in this file.
5. To generate the trace
messages set a system variable INSENVIM_CPPFT_INFO_LOG to 1
and try again. Now the insen_cppft.log file will hold the trace message. Read
it and see if can fix the problem.
6.
Mail me madhan.ganesh AT siemens DOT com or
sravishankar AT gmail DOT com the problem
along with the log file. We will help you run insen with our best efforts.
TODO
v
Typedefs have to be understood
by insen plug-in.
v
COM components have to taken care.
v
CTRL-SPACE should complete the insen.
v
:: should list all the elements of global
namespace.
v
Insen should be made to work even in the middle of the line
v
Templates should be differentiated from classes.
v
Help of the types and methods should be brought.
Happy Vimming….
Madhan