Version 4.3

1. Added support for jumping to a tag/file in a new or existing tab
   from the taglist window (works only with Vim7 and above).
2. Added support for opening a tag in the previous window.
3. With the Tlist_File_Fold_Auto_Close variable set, when opening a
   file from the file explorer window, the folds in the taglist window
   are not closed correctly.  Fixed this problem.
This commit is contained in:
Yegappan Lakshmanan 2007-02-22 00:00:00 +00:00 committed by Able Scraper
parent 569d438e14
commit d6a611f70a
2 changed files with 289 additions and 132 deletions

View File

@ -2,7 +2,7 @@
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com) Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
For Vim version 6.0 and above For Vim version 6.0 and above
Last change: 2006 November 14 Last change: 2007 February 18
1. Overview |taglist-intro| 1. Overview |taglist-intro|
2. Taglist on the internet |taglist-internet| 2. Taglist on the internet |taglist-internet|
@ -14,7 +14,8 @@ Last change: 2006 November 14
8. Global functions |taglist-functions| 8. Global functions |taglist-functions|
9. Extending |taglist-extend| 9. Extending |taglist-extend|
10. FAQ |taglist-faq| 10. FAQ |taglist-faq|
11. Todo |taglist-todo| 11. License |taglist-license|
12. Todo |taglist-todo|
============================================================================== ==============================================================================
*taglist-intro* *taglist-intro*
@ -75,17 +76,20 @@ for subscribing to the mailing list:
*taglist-requirements* *taglist-requirements*
3. Requirements~ 3. Requirements~
The taglist plugin requires the following:
* Vim version 6.0 and above
* Exuberant ctags 5.0 and above
The taglist plugin will work on all the platforms where the exuberant ctags The taglist plugin will work on all the platforms where the exuberant ctags
utility and Vim are supported (this includes MS-Windows and Unix based utility and Vim are supported (this includes MS-Windows and Unix based
systems). systems).
The taglist plugin will work with Vim version 6.0 and above.
The taglist plugin relies on the exuberant ctags utility to dynamically The taglist plugin relies on the exuberant ctags utility to dynamically
generate the tag listing. The exuberant ctags utility must be installed in generate the tag listing. The exuberant ctags utility must be installed in
your system to use this plugin. You should use exuberant ctags version 5.0 and your system to use this plugin. The exuberant ctags utility is shipped with
above. The exuberant ctags utility is shipped with most of the Linux most of the Linux distributions. You can download the exuberant ctags utility
distributions. You can download the exuberant ctags utility from from
> >
http://ctags.sourceforge.net http://ctags.sourceforge.net
< <
@ -118,8 +122,8 @@ Vim without the system() function for security reasons.
plugin/taglist.vim - main taglist plugin file plugin/taglist.vim - main taglist plugin file
doc/taglist.txt - documentation (help) file doc/taglist.txt - documentation (help) file
Refer to the |add-plugin|, |add-global-plugin| and |'runtimepath'| Vim Refer to the |add-plugin|and |'runtimepath'| Vim help pages for more
help pages for more details about installing Vim plugins. details about installing Vim plugins.
2. Change to the $HOME/.vim/doc or $HOME/vimfiles/doc or $VIM/vimfiles/doc 2. Change to the $HOME/.vim/doc or $HOME/vimfiles/doc or $VIM/vimfiles/doc
directory, start Vim and run the ":helptags ." command to process the directory, start Vim and run the ":helptags ." command to process the
taglist help file. Without this step, you cannot jump to the taglist help taglist help file. Without this step, you cannot jump to the taglist help
@ -137,7 +141,7 @@ Vim without the system() function for security reasons.
about using the taglist plugin. about using the taglist plugin.
To uninstall the taglist plugin, remove the plugin/taglist.vim and To uninstall the taglist plugin, remove the plugin/taglist.vim and
doc/taglist.txt files. doc/taglist.txt files from the $HOME/.vim or $HOME/vimfiles directory.
============================================================================== ==============================================================================
*taglist-using* *taglist-using*
@ -145,13 +149,13 @@ doc/taglist.txt files.
The taglist plugin can be used in several different ways. The taglist plugin can be used in several different ways.
1. You can open the taglist window and keep it open. On opening the taglist 1. You can keep the taglist window open during the entire editing session. On
window, the tags defined in all the files in the Vim buffer list will be opening the taglist window, the tags defined in all the files in the Vim
displayed in the taglist window. As you edit files, the tags defined in buffer list will be displayed in the taglist window. As you edit files, the
them will be added to the taglist window. You can select a tag from the tags defined in them will be added to the taglist window. You can select a
taglist window and jump to it. The current tag will be highlighted in the tag from the taglist window and jump to it. The current tag will be
taglist window. You can close the taglist window when you no longer need highlighted in the taglist window. You can close the taglist window when
the window. you no longer need the window.
2. You can configure the taglist plugin to process the tags defined in all the 2. You can configure the taglist plugin to process the tags defined in all the
edited files always. In this configuration, even if the taglist window is edited files always. In this configuration, even if the taglist window is
closed and the taglist menu is not displayed, the taglist plugin will closed and the taglist menu is not displayed, the taglist plugin will
@ -161,12 +165,12 @@ The taglist plugin can be used in several different ways.
3. You can configure the taglist plugin to display only the tags defined in 3. You can configure the taglist plugin to display only the tags defined in
the current file in the taglist window. By default, the taglist plugin the current file in the taglist window. By default, the taglist plugin
displays the tags defined in all the files in the Vim buffer list. As you displays the tags defined in all the files in the Vim buffer list. As you
switch between files, the taglist window will be refreshed to display the switch between files, the taglist window will be refreshed to display only
tags defined only in the current file. the tags defined in the current file.
4. You can use the Tags pull-down and popup menu created by the taglist plugin 4. In GUI Vim, you can use the Tags pull-down and popup menu created by the
to display the tags defined in the current file and select a tag to jump to taglist plugin to display the tags defined in the current file and select a
it. You can use the menu without opening the taglist window. By default, tag to jump to it. You can use the menu without opening the taglist window.
the Tags menu is disabled. By default, the Tags menu is disabled.
5. You can configure the taglist plugin to display the name of the current tag 5. You can configure the taglist plugin to display the name of the current tag
in the Vim window status line or in the Vim window title bar. For this to in the Vim window status line or in the Vim window title bar. For this to
work without the taglist window or menu, you need to configure the taglist work without the taglist window or menu, you need to configure the taglist
@ -189,11 +193,13 @@ creates a normal mode mapping for the <F8> key to toggle the taglist window.
> >
nnoremap <silent> <F8> :TlistToggle<CR> nnoremap <silent> <F8> :TlistToggle<CR>
< <
Add the above mapping to your ~/.vimrc file. Add the above mapping to your ~/.vimrc or $HOME/_vimrc file.
To automatically open the taglist window on Vim startup, set the To automatically open the taglist window on Vim startup, set the
'Tlist_Auto_Open' variable to 1. You can also open the taglist window on 'Tlist_Auto_Open' variable to 1.
startup using the following command line:
You can also open the taglist window on startup using the following command
line:
> >
$ vim +TlistOpen $ vim +TlistOpen
< <
@ -211,12 +217,27 @@ taglist window is present, set the 'Tlist_Exit_OnlyWindow' variable to 1.
Jumping to a tag or a file~ Jumping to a tag or a file~
You can select a tag in the taglist window either by pressing the <Enter> key You can select a tag in the taglist window either by pressing the <Enter> key
or by double clicking the tag name using the mouse. To jump to a tag on a or by double clicking the tag name using the mouse. To jump to a tag on a
single mouse click set the 'Tlist_Use_SingleClick' variable to 1. To jump to single mouse click set the 'Tlist_Use_SingleClick' variable to 1.
the tag in a new window, press the 'o' key. You can press the 'p' key to jump
to the tag but still keep the cursor in the taglist window itself (preview).
You can open a file by pressing the <Enter> key or by double clicking the file If the selected file is already opened in a window, then the cursor is moved
name using the mouse. to that window. If the file is not currently opened in a window then the file
is opened in the window used by the taglist plugin to show the previously
selected file. If there are no usable windows, then the file is opened in a
new window. The file is not opened in special windows like the quickfix
window, preview window and windows containing buffer with the 'buftype' option
set.
To jump to the tag in a new window, press the 'o' key. To open the file in the
previous window (Ctrl-W_p) use the 'P' key. You can press the 'p' key to jump
to the tag but still keep the cursor in the taglist window (preview).
To open the selected file in a tab, use the 't' key. If the file is already
present in a tab then the cursor is moved to that tab otherwise the file is
opened in a new tab. To jump to a tag in a new tab press Ctrl-t. The taglist
window is automatically opened in the newly created tab.
Instead of jumping to a tag, you can open a file by pressing the <Enter> key
or by double clicking the file name using the mouse.
In the taglist window, you can use the [[ or <Backspace> key to jump to the In the taglist window, you can use the [[ or <Backspace> key to jump to the
beginning of the previous file. You can use the ]] or <Tab> key to jump to the beginning of the previous file. You can use the ]] or <Tab> key to jump to the
@ -289,8 +310,8 @@ Vim session. To again display the tags for the file, open the file in a Vim
window and then use the ":TlistUpdate" command or use ":TlistAddFiles" command window and then use the ":TlistUpdate" command or use ":TlistAddFiles" command
to add the file to the taglist. to add the file to the taglist.
When a buffer is removed from the Vim buffer list using the ":bdelete" or When a buffer is removed from the Vim buffer list using the ":bdelete" or the
the ":bwipe" command, the taglist is updated to remove the stored information ":bwipeout" command, the taglist is updated to remove the stored information
for this buffer. for this buffer.
Updating the tags displayed for a file~ Updating the tags displayed for a file~
@ -337,8 +358,9 @@ option is 4 seconds.
You can get the name and prototype of a tag without opening the taglist window You can get the name and prototype of a tag without opening the taglist window
and the taglist menu using the ":TlistShowTag" and the ":TlistShowPrototype" and the taglist menu using the ":TlistShowTag" and the ":TlistShowPrototype"
commands. To use these commands without the taglist window, set the commands. These commands will work only if the current file is already present
'Tlist_Process_File_Always' variable to 1. in the taglist. To use these commands without opening the taglist window, set
the 'Tlist_Process_File_Always' variable to 1.
You can use the ":TlistShowTag" command to display the name of the tag at or You can use the ":TlistShowTag" command to display the name of the tag at or
before the specified line number in the specified file. If the file name and before the specified line number in the specified file. If the file name and
@ -361,10 +383,11 @@ prototype is displayed in a balloon. This works only in GUI versions where
balloon evaluation is supported. balloon evaluation is supported.
Taglist window contents~ Taglist window contents~
The tag names are grouped by their type (variable, function, class, etc.). For The taglist window contains the tags defined in various files in the taglist
tags with scope information (like class members, structures inside structures, grouped by the filename and by the tag type (variable, function, class, etc.).
etc.), the scope information is displayed in square brackets "[]" after the tag For tags with scope information (like class members, structures inside
name. structures, etc.), the scope information is displayed in square brackets "[]"
after the tag name.
The contents of the taglist buffer/window are managed by the taglist plugin. The contents of the taglist buffer/window are managed by the taglist plugin.
The |'filetype'| for the taglist buffer is set to 'taglist'. The Vim The |'filetype'| for the taglist buffer is set to 'taglist'. The Vim
@ -465,11 +488,13 @@ various entities in the taglist window:
TagListFileName - Used for filenames TagListFileName - Used for filenames
By default, these highlight groups are linked to the standard Vim highlight By default, these highlight groups are linked to the standard Vim highlight
groups. If you want to change the colors used for these highlight groups, you groups. If you want to change the colors used for these highlight groups,
can define them in your .vimrc or .gvimrc files. For example, to change the prefix the highlight group name with 'My' and define it in your .vimrc or
highlighting used for tag names, you can use: .gvimrc file: MyTagListTagName, MyTagListTagScope, MyTagListTitle,
MyTagListComment and MyTagListFileName. For example, to change the colors
used for tag names, you can use the following command:
> >
:highlight TagListTagName guifg=DarkGreen ctermfg=DarkGreen :highlight MyTagListTagName guifg=blue ctermfg=blue
< <
Controlling the taglist window~ Controlling the taglist window~
To use a horizontally split taglist window, instead of a vertically split To use a horizontally split taglist window, instead of a vertically split
@ -510,8 +535,12 @@ in the taglist window.
defined. defined.
o Jump to the location where the tag under cursor is o Jump to the location where the tag under cursor is
defined in a new window. defined in a new window.
P Jump to the tag in the previous (Ctrl-W_p) window.
p Display the tag definition in the file window and p Display the tag definition in the file window and
keep the cursor in the taglist window itself. keep the cursor in the taglist window itself.
t Jump to the tag in a new tab. If the file is already
opened in a tab, move to that tab.
Ctrl-t Jump to the tag in a new tab.
<Space> Display the prototype of the tag under the cursor. <Space> Display the prototype of the tag under the cursor.
For file names, display the full path to the file, For file names, display the full path to the file,
file type and the number of tags. For tag types, display the file type and the number of tags. For tag types, display the
@ -548,7 +577,9 @@ When you switch between files/buffers, the taglist menu is automatically
updated to display the tags defined in the current file/buffer. updated to display the tags defined in the current file/buffer.
The tags are grouped by their type (variables, functions, classes, methods, The tags are grouped by their type (variables, functions, classes, methods,
etc.) and displayed as a separate sub-menu for each type. etc.) and displayed as a separate sub-menu for each type. If all the tags
defined in a file are of the same type (e.g. functions), then the sub-menu is
not used.
If the number of items in a tag type submenu exceeds the value specified by If the number of items in a tag type submenu exceeds the value specified by
the 'Tlist_Max_Submenu_Items' variable, then the submenu will be split into the 'Tlist_Max_Submenu_Items' variable, then the submenu will be split into
@ -655,14 +686,14 @@ description of these variables refer to the text below this table.
Tlist_Auto_Highlight_Tag~ Tlist_Auto_Highlight_Tag~
The taglist plugin will automatically highlight the current tag in the taglist The taglist plugin will automatically highlight the current tag in the taglist
window. If you want to disable this, then you can set the window. If you want to disable this, then you can set the
Tlist_Auto_Highlight_Tag variable to zero. Note that even though the current 'Tlist_Auto_Highlight_Tag' variable to zero. Note that even though the current
tag highlighting is disabled, the tags for a new file will still be added to tag highlighting is disabled, the tags for a new file will still be added to
the taglist window. the taglist window.
> >
let Tlist_Auto_Highlight_Tag = 0 let Tlist_Auto_Highlight_Tag = 0
< <
You can still use the ":TlistHighlightTag" command to highlight the current With the above variable set to 1, you can use the ":TlistHighlightTag" command
tag. to highlight the current tag.
*'Tlist_Auto_Open'* *'Tlist_Auto_Open'*
Tlist_Auto_Open~ Tlist_Auto_Open~
@ -685,12 +716,15 @@ to 1.
> >
let Tlist_Auto_Update = 0 let Tlist_Auto_Update = 0
< <
With the above variable set to 1, you can use the ":TlistUpdate" command to
add the tags defined in the current file to the taglist.
*'Tlist_Close_On_Select'* *'Tlist_Close_On_Select'*
Tlist_Close_On_Select~ Tlist_Close_On_Select~
If you want to close the taglist window when a file or tag is selected, then If you want to close the taglist window when a file or tag is selected, then
set the 'Tlist_Close_On_Select' variable to 1. By default, this variable is set the 'Tlist_Close_On_Select' variable to 1. By default, this variable is
set zero and when you select a tag or file from the taglist window, the window set zero and when you select a tag or file from the taglist window, the window
will not be closed. is not closed.
> >
let Tlist_Close_On_Select = 1 let Tlist_Close_On_Select = 1
< <
@ -721,7 +755,7 @@ the ctags utility in your system. Note that this variable should point to the
fully qualified exuberant ctags location and NOT to the directory in which fully qualified exuberant ctags location and NOT to the directory in which
exuberant ctags is installed. If the exuberant ctags tool is not found in exuberant ctags is installed. If the exuberant ctags tool is not found in
either PATH or in the specified location, then the taglist plugin will not be either PATH or in the specified location, then the taglist plugin will not be
loaded. loaded. Examples:
> >
let Tlist_Ctags_Cmd = 'd:\tools\ctags.exe' let Tlist_Ctags_Cmd = 'd:\tools\ctags.exe'
let Tlist_Ctags_Cmd = '/usr/local/bin/ctags' let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
@ -767,9 +801,9 @@ Tlist_File_Fold_Auto_Close~
By default, the tags tree displayed in the taglist window for all the files is By default, the tags tree displayed in the taglist window for all the files is
opened. You can close/fold the tags tree for the files manually. To opened. You can close/fold the tags tree for the files manually. To
automatically close the tags tree for inactive files, you can set the automatically close the tags tree for inactive files, you can set the
Tlist_File_Fold_Auto_Close variable to 1. When this variable is set to 1, the 'Tlist_File_Fold_Auto_Close' variable to 1. When this variable is set to 1,
tags tree for the current buffer is automatically opened and for all the the tags tree for the current buffer is automatically opened and for all the
buffers is closed. other buffers is closed.
> >
let Tlist_File_Fold_Auto_Close = 1 let Tlist_File_Fold_Auto_Close = 1
< <
@ -798,10 +832,10 @@ this variable is 1.
*'Tlist_Inc_Winwidth'* *'Tlist_Inc_Winwidth'*
Tlist_Inc_Winwidth~ Tlist_Inc_Winwidth~
By default, when the width of the window is less than 100 and a new taglist By default, when the width of the window is less than 100 and a new taglist
window is opened vertically, then the window width will be increased by the window is opened vertically, then the window width is increased by the value
value set in the 'Tlist_WinWidth' variable to accommodate the new window. The set in the 'Tlist_WinWidth' variable to accommodate the new window. The value
value of this variable is used only if you are using a vertically split of this variable is used only if you are using a vertically split taglist
taglist window. window.
If your terminal doesn't support changing the window width from Vim (older If your terminal doesn't support changing the window width from Vim (older
version of xterm running in a Unix system) or if you see any weird problems in version of xterm running in a Unix system) or if you see any weird problems in
@ -1166,52 +1200,64 @@ C++, C#, Cobol, Eiffel, Erlang, Fortran, HTML, Java, Javascript, Lisp, Lua,
Make, Pascal, Perl, PHP, Python, Rexx, Ruby, Scheme, Shell, Slang, SML, Sql, Make, Pascal, Perl, PHP, Python, Rexx, Ruby, Scheme, Shell, Slang, SML, Sql,
TCL, Verilog, Vim and Yacc. TCL, Verilog, Vim and Yacc.
You can modify the taglist plugin support for the above listed languages. You You can extend the taglist plugin to add support for new languages and also
can also extend the taglist plugin to add support for new languages. modify the support for the above listed languages.
If you want to add support for a new language to the taglist plugin, you need You should NOT make modifications to the taglist plugin script file to add
to first extend the exuberant ctags tool. For more information about extending support for new languages. You will lose these changes when you upgrade to the
exuberant ctags, visit http://ctags.sourceforge.net/EXTENDING.html next version of the taglist plugin. Instead you should follow the below
described instructions to extend the taglist plugin.
You can extend the taglist plugin to add support for new languages or modify You can extend the taglist plugin by setting variables in the .vimrc or _vimrc
the support for an already supported language by setting the following file. The name of these variables depends on the language name and is
variables in the .vimrc file. described below.
Modifying support for an existing language~
To modify the support for an already supported language, you have to set the To modify the support for an already supported language, you have to set the
tlist_xxx_settings variable. Replace xxx with the Vim filetype name. To tlist_xxx_settings variable in the ~/.vimrc or $HOME/_vimrc file. Replace xxx
determine the filetype name used by Vim for a file, use the following command with the Vim filetype name for the language file. For example, to modify the
in the buffer containing the file: > support for the perl language files, you have to set the tlist_perl_settings
variable. To modify the support for java files, you have to set the
tlist_java_settings variable.
To determine the filetype name used by Vim for a file, use the following
command in the buffer containing the file:
:set filetype :set filetype
<
For example, to modify the support for the perl language files, you have to The above command will display the Vim filetype for the current buffer.
set the tlist_perl_settings variable.
The format of the value set in the tlist_xxx_settings variable is The format of the value set in the tlist_xxx_settings variable is
>
<language_name>;flag1:name1;flag2:name2;flag3:name3 <language_name>;flag1:name1;flag2:name2;flag3:name3
<
The different fields in the value are separated by the ';' character. The different fields in the value are separated by the ';' character.
The first field 'language_name' is the name used by exuberant ctags to refer The first field 'language_name' is the name used by exuberant ctags to refer
to this language files. This name can be different from the file type name to this language file. This name can be different from the file type name used
used by Vim. For example, for C++, the language name used by ctags is 'c++' by Vim. For example, for C++, the language name used by ctags is 'c++' but the
but the filetype name used by Vim is 'cpp'. filetype name used by Vim is 'cpp'. To get the list of language names
supported by exuberant ctags, use the following command:
$ ctags --list-maps=all
The remaining fields follow the format "flag:name". The sub-field 'flag' is The remaining fields follow the format "flag:name". The sub-field 'flag' is
the language specific flag used by exuberant ctags to generate the the language specific flag used by exuberant ctags to generate the
corresponding tags. For example, for the C language, to list only the corresponding tags. For example, for the C language, to list only the
functions, the 'f' flag is used. For more information about the flags functions, the 'f' flag is used. To get the list of flags supported by
supported by exuberant ctags for a particular language, read the help text exuberant ctags for the various languages use the following command:
from the 'ctags --help' command. The sub-field 'name' specifies the title text
to use for displaying the tags of a particular type. For example, 'name' can $ ctags --list-kinds=all
be set to 'functions'. This field can be set to any text string name.
The sub-field 'name' specifies the title text to use for displaying the tags
of a particular type. For example, 'name' can be set to 'functions'. This
field can be set to any text string name.
For example, to list only the classes and functions defined in a C++ language
file, add the following line to your .vimrc file:
For example, to list only the classes and functions defined in a C++
language file, add the following lines to your .vimrc file
>
let tlist_cpp_settings = 'c++;c:class;f:function' let tlist_cpp_settings = 'c++;c:class;f:function'
<
In the above setting, 'cpp' is the Vim filetype name and 'c++' is the name In the above setting, 'cpp' is the Vim filetype name and 'c++' is the name
used by the exuberant ctags tool. 'c' and 'f' are the flags passed to used by the exuberant ctags tool. 'c' and 'f' are the flags passed to
exuberant ctags to list C++ classes and functions and 'class' is the title exuberant ctags to list C++ classes and functions and 'class' is the title
@ -1220,23 +1266,32 @@ in the taglist window.
For example, to display only functions defined in a C file and to use "My For example, to display only functions defined in a C file and to use "My
Functions" as the title for the function tags, use Functions" as the title for the function tags, use
>
let tlist_c_settings = 'c;f:My Functions' let tlist_c_settings = 'c;f:My Functions'
<
When you set the tlist_xxx_settings variable, you will override the default When you set the tlist_xxx_settings variable, you will override the default
setting used by the taglist plugin for the 'xxx' language. You cannot add to setting used by the taglist plugin for the 'xxx' language. You cannot add to
the default options used by the taglist plugin for a particular file type. the default options used by the taglist plugin for a particular file type. To
add to the options used by the taglist plugin for a language, copy the option
values from the taglist plugin file to your .vimrc file and modify it.
To add support for a new language, set the tlist_xxx_settings variable Adding support for a new language~
appropriately as described above. Replace 'xxx' in the variable name with the If you want to add support for a new language to the taglist plugin, you need
Vim filetype name for the new language. to first extend the exuberant ctags tool. For more information about extending
exuberant ctags, visit the following page:
http://ctags.sourceforge.net/EXTENDING.html
To add support for a new language, set the tlist_xxx_settings variable in the
~/.vimrc file appropriately as described above. Replace 'xxx' in the variable
name with the Vim filetype name for the new language.
For example, to extend the taglist plugin to support the latex language, you For example, to extend the taglist plugin to support the latex language, you
can use the following line (assuming, you have already extended exuberant can use the following line (assuming, you have already extended exuberant
ctags to support the latex language): > ctags to support the latex language):
let tlist_tex_settings='latex;b:bibitem;c:command;l:label' let tlist_tex_settings='latex;b:bibitem;c:command;l:label'
<
With the above line, when you edit files of filetype "tex" in Vim, the taglist With the above line, when you edit files of filetype "tex" in Vim, the taglist
plugin will invoke the exuberant ctags tool passing the "latex" filetype and plugin will invoke the exuberant ctags tool passing the "latex" filetype and
the flags b, c and l to generate the tags. The text heading 'bibitem', the flags b, c and l to generate the tags. The text heading 'bibitem',
@ -1262,6 +1317,16 @@ A. Are you using Vim version 6.0 and above? The taglist plugin relies on the
> >
$ ctags --version $ ctags --version
< <
Is exuberant ctags present in one of the directories in your PATH? If not,
you need to set the Tlist_Ctags_Cmd variable to point to the location of
exuberant ctags. Use the following Vim command to verify that this is setup
correctly:
>
:echo system(Tlist_Ctags_Cmd . ' --version')
<
The above command should display the version information for exuberant
ctags.
Did you turn on the Vim filetype detection? The taglist plugin relies on Did you turn on the Vim filetype detection? The taglist plugin relies on
the filetype detected by Vim and passes the filetype to the exuberant ctags the filetype detected by Vim and passes the filetype to the exuberant ctags
utility to parse the tags. Check the output of the following Vim command: utility to parse the tags. Check the output of the following Vim command:
@ -1399,9 +1464,19 @@ A. The taglist plugin uses the |CursorHold| autocmd to highlight the current
the current buffer. The workaround for this problem is to not set the the current buffer. The workaround for this problem is to not set the
|'updatetime'| option to a low value. |'updatetime'| option to a low value.
==============================================================================
*taglist-license*
11. License~
Permission is hereby granted to use and distribute the taglist plugin, with or
without modifications, provided that this copyright notice is copied with it.
Like anything else that's free, taglist.vim is provided *as is* and comes with
no warranty of any kind, either expressed or implied. In no event will the
copyright holder be liable for any damamges resulting from the use of this
software.
============================================================================== ==============================================================================
*taglist-todo* *taglist-todo*
11. Todo~ 12. Todo~
1. Group tags according to the scope and display them. For example, 1. Group tags according to the scope and display them. For example,
group all the tags belonging to a C++/Java class group all the tags belonging to a C++/Java class

View File

@ -1,7 +1,7 @@
" File: taglist.vim " File: taglist.vim
" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com) " Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
" Version: 4.2 " Version: 4.3
" Last Modified: November 14, 2006 " Last Modified: February 18, 2007
" Copyright: Copyright (C) 2002-2006 Yegappan Lakshmanan " Copyright: Copyright (C) 2002-2006 Yegappan Lakshmanan
" Permission is hereby granted to use and distribute this code, " Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright " with or without modifications, provided that this copyright
@ -41,7 +41,7 @@
" Refer to the 'add-plugin', 'add-global-plugin' and 'runtimepath' " Refer to the 'add-plugin', 'add-global-plugin' and 'runtimepath'
" Vim help pages for more details about installing Vim plugins. " Vim help pages for more details about installing Vim plugins.
" 2. Change to the $HOME/.vim/doc or $HOME/vimfiles/doc or " 2. Change to the $HOME/.vim/doc or $HOME/vimfiles/doc or
" $VIM/doc/vimfiles directory, start Vim and run the ":helptags ." " $VIM/vimfiles/doc directory, start Vim and run the ":helptags ."
" command to process the taglist help file. " command to process the taglist help file.
" 3. If the exuberant ctags utility is not present in your PATH, then set the " 3. If the exuberant ctags utility is not present in your PATH, then set the
" Tlist_Ctags_Cmd variable to point to the location of the exuberant ctags " Tlist_Ctags_Cmd variable to point to the location of the exuberant ctags
@ -638,13 +638,8 @@ function! s:Tlist_Debug_Disable(...)
endfunction endfunction
" Tlist_Debug_Show " Tlist_Debug_Show
" Display the taglist debug message in a new window " Display the taglist debug messages in a new window
function! s:Tlist_Debug_Show() function! s:Tlist_Debug_Show()
if s:tlist_debug == 0
call s:Tlist_Warning_Msg('Taglist: Debug is disabled')
return
endif
if s:tlist_msg == '' if s:tlist_msg == ''
call s:Tlist_Warning_Msg('Taglist: No debug messages') call s:Tlist_Warning_Msg('Taglist: No debug messages')
return return
@ -1551,10 +1546,22 @@ function! s:Tlist_Window_Init()
set cpoptions&vim set cpoptions&vim
" Create buffer local mappings for jumping to the tags and sorting the list " Create buffer local mappings for jumping to the tags and sorting the list
nnoremap <buffer> <silent> <CR> :call <SID>Tlist_Window_Jump_To_Tag(0)<CR> nnoremap <buffer> <silent> <CR>
nnoremap <buffer> <silent> o :call <SID>Tlist_Window_Jump_To_Tag(1)<CR> \ :call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
nnoremap <buffer> <silent> p :call <SID>Tlist_Window_Jump_To_Tag(2)<CR> nnoremap <buffer> <silent> o
nnoremap <buffer> <silent> <2-LeftMouse> :call <SID>Tlist_Window_Jump_To_Tag(0)<CR> \ :call <SID>Tlist_Window_Jump_To_Tag('newwin')<CR>
nnoremap <buffer> <silent> p
\ :call <SID>Tlist_Window_Jump_To_Tag('preview')<CR>
nnoremap <buffer> <silent> P
\ :call <SID>Tlist_Window_Jump_To_Tag('prevwin')<CR>
if v:version >= 700
nnoremap <buffer> <silent> t
\ :call <SID>Tlist_Window_Jump_To_Tag('checktab')<CR>
nnoremap <buffer> <silent> <C-t>
\ :call <SID>Tlist_Window_Jump_To_Tag('newtab')<CR>
endif
nnoremap <buffer> <silent> <2-LeftMouse>
\ :call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
nnoremap <buffer> <silent> s nnoremap <buffer> <silent> s
\ :call <SID>Tlist_Change_Sort('cmd', 'toggle', '')<CR> \ :call <SID>Tlist_Change_Sort('cmd', 'toggle', '')<CR>
nnoremap <buffer> <silent> + :silent! foldopen<CR> nnoremap <buffer> <silent> + :silent! foldopen<CR>
@ -1576,13 +1583,25 @@ function! s:Tlist_Window_Init()
nnoremap <buffer> <silent> q :close<CR> nnoremap <buffer> <silent> q :close<CR>
" Insert mode mappings " Insert mode mappings
inoremap <buffer> <silent> <CR> <C-o>:call <SID>Tlist_Window_Jump_To_Tag(0)<CR> inoremap <buffer> <silent> <CR>
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
" Windows needs return " Windows needs return
inoremap <buffer> <silent> <Return> <C-o>:call <SID>Tlist_Window_Jump_To_Tag(0)<CR> inoremap <buffer> <silent> <Return>
inoremap <buffer> <silent> o <C-o>:call <SID>Tlist_Window_Jump_To_Tag(1)<CR> \ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
inoremap <buffer> <silent> p <C-o>:call <SID>Tlist_Window_Jump_To_Tag(2)<CR> inoremap <buffer> <silent> o
inoremap <buffer> <silent> <2-LeftMouse> <C-o>:call \ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('newwin')<CR>
\ <SID>Tlist_Window_Jump_To_Tag(0)<CR> inoremap <buffer> <silent> p
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('preview')<CR>
inoremap <buffer> <silent> P
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('prevwin')<CR>
if v:version >= 700
inoremap <buffer> <silent> t
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('checktab')<CR>
inoremap <buffer> <silent> <C-t>
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('newtab')<CR>
endif
inoremap <buffer> <silent> <2-LeftMouse>
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
inoremap <buffer> <silent> s inoremap <buffer> <silent> s
\ <C-o>:call <SID>Tlist_Change_Sort('cmd', 'toggle', '')<CR> \ <C-o>:call <SID>Tlist_Change_Sort('cmd', 'toggle', '')<CR>
inoremap <buffer> <silent> + <C-o>:silent! foldopen<CR> inoremap <buffer> <silent> + <C-o>:silent! foldopen<CR>
@ -1613,7 +1632,8 @@ function! s:Tlist_Window_Init()
" not fire the <buffer> <leftmouse> when you use the mouse " not fire the <buffer> <leftmouse> when you use the mouse
" to enter a buffer. " to enter a buffer.
let clickmap = ':if bufname("%") =~ "__Tag_List__" <bar> ' . let clickmap = ':if bufname("%") =~ "__Tag_List__" <bar> ' .
\ 'call <SID>Tlist_Window_Jump_To_Tag(0) <bar> endif <CR>' \ 'call <SID>Tlist_Window_Jump_To_Tag("useopen") ' .
\ '<bar> endif <CR>'
if maparg('<leftmouse>', 'n') == '' if maparg('<leftmouse>', 'n') == ''
" no mapping for leftmouse " no mapping for leftmouse
exe ':nnoremap <silent> <leftmouse> <leftmouse>' . clickmap exe ':nnoremap <silent> <leftmouse> <leftmouse>' . clickmap
@ -1642,7 +1662,7 @@ function! s:Tlist_Window_Init()
" Close the fold for this buffer when leaving the buffer " Close the fold for this buffer when leaving the buffer
if g:Tlist_File_Fold_Auto_Close if g:Tlist_File_Fold_Auto_Close
autocmd BufEnter * silent autocmd BufEnter * silent
\ call s:Tlist_Window_Open_File_Fold(expand('<afile>:p')) \ call s:Tlist_Window_Open_File_Fold(expand('<afile>'))
endif endif
" Exit Vim itself if only the taglist window is present (optional) " Exit Vim itself if only the taglist window is present (optional)
if g:Tlist_Exit_OnlyWindow if g:Tlist_Exit_OnlyWindow
@ -3075,18 +3095,75 @@ endfunction
" Open the specified file in either a new window or an existing window " Open the specified file in either a new window or an existing window
" and place the cursor at the specified tag pattern " and place the cursor at the specified tag pattern
function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat) function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat)
call s:Tlist_Log_Msg('Tlist_Window_Open_File (' . a:filename . ')') call s:Tlist_Log_Msg('Tlist_Window_Open_File (' . a:filename . ',' .
\ a:win_ctrl . ')')
let prev_Tlist_Skip_Refresh = s:Tlist_Skip_Refresh let prev_Tlist_Skip_Refresh = s:Tlist_Skip_Refresh
let s:Tlist_Skip_Refresh = 1 let s:Tlist_Skip_Refresh = 1
if s:tlist_app_name == "winmanager" if s:tlist_app_name == "winmanager"
" Let the winmanager edit the file " Let the winmanager edit the file
call WinManagerFileEdit(a:filename, a:win_ctrl) call WinManagerFileEdit(a:filename, a:win_ctrl == 'newwin')
else else
if a:win_ctrl == 'newtab'
" Create a new tab
exe 'tabnew ' . escape(a:filename, ' ')
" Open the taglist window in the new tab
call s:Tlist_Window_Open()
endif
if a:win_ctrl == 'checktab'
" Check whether the file is present in any of the tabs.
" If the file is present in the current tab, then use the
" current tab.
if bufwinnr(a:filename) != -1
let file_present_in_tab = 1
let i = tabpagenr()
else
let i = 1
let bnum = bufnr(a:filename)
let file_present_in_tab = 0
while i <= tabpagenr('$')
if index(tabpagebuflist(i), bnum) != -1
let file_present_in_tab = 1
break
endif
let i += 1
endwhile
endif
if file_present_in_tab
" Goto the tab containing the file
exe 'tabnext ' . i
else
" Open a new tab
exe 'tabnew ' . escape(a:filename, ' ')
" Open the taglist window
call s:Tlist_Window_Open()
endif
endif
let winnum = -1
if a:win_ctrl == 'prevwin'
" Open the file in the previous window, if it is usable
let cur_win = winnr()
wincmd p
if &buftype == '' && !&previewwindow
exe "edit " . escape(a:filename, ' ')
let winnum = winnr()
else
" Previous window is not usable
exe cur_win . 'wincmd w'
endif
endif
" Goto the window containing the file. If the window is not there, open a " Goto the window containing the file. If the window is not there, open a
" new window " new window
if winnum == -1
let winnum = bufwinnr(a:filename) let winnum = bufwinnr(a:filename)
endif
if winnum == -1 if winnum == -1
" Locate the previously used window for opening a file " Locate the previously used window for opening a file
let fwin_num = 0 let fwin_num = 0
@ -3121,7 +3198,7 @@ function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat)
" If the user asked to jump to the tag in a new window, then split " If the user asked to jump to the tag in a new window, then split
" the existing window into two. " the existing window into two.
if a:win_ctrl == 1 if a:win_ctrl == 'newwin'
split split
endif endif
exe "edit " . escape(a:filename, ' ') exe "edit " . escape(a:filename, ' ')
@ -3173,7 +3250,7 @@ function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat)
" If the user asked to jump to the tag in a new window, then split the " If the user asked to jump to the tag in a new window, then split the
" existing window into two. " existing window into two.
if a:win_ctrl == 1 if a:win_ctrl == 'newwin'
split split
endif endif
endif endif
@ -3197,7 +3274,7 @@ function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat)
" If the user selects to preview the tag then jump back to the " If the user selects to preview the tag then jump back to the
" taglist window " taglist window
if a:win_ctrl == 2 if a:win_ctrl == 'preview'
" Go back to the taglist window " Go back to the taglist window
let winnum = bufwinnr(g:TagList_title) let winnum = bufwinnr(g:TagList_title)
exe winnum . 'wincmd w' exe winnum . 'wincmd w'
@ -3221,11 +3298,13 @@ endfunction
" Tlist_Window_Jump_To_Tag() " Tlist_Window_Jump_To_Tag()
" Jump to the location of the current tag " Jump to the location of the current tag
" win_ctrl == 0 - Reuse the existing file window " win_ctrl == useopen - Reuse the existing file window
" win_ctrl == 1 - Open a new window " win_ctrl == newwin - Open a new window
" win_ctrl == 2 - Preview the tag " win_ctrl == preview - Preview the tag
" win_ctrl == prevwin - Open in previous window
" win_ctrl == newtab - Open in new tab
function! s:Tlist_Window_Jump_To_Tag(win_ctrl) function! s:Tlist_Window_Jump_To_Tag(win_ctrl)
call s:Tlist_Log_Msg('Tlist_Window_Jump_To_Tag()') call s:Tlist_Log_Msg('Tlist_Window_Jump_To_Tag(' . a:win_ctrl . ')')
" Do not process comment lines and empty lines " Do not process comment lines and empty lines
let curline = getline('.') let curline = getline('.')
if curline =~ '^\s*$' || curline[0] == '"' if curline =~ '^\s*$' || curline[0] == '"'
@ -3933,8 +4012,8 @@ autocmd BufDelete * silent call s:Tlist_Buffer_Removed(expand('<afile>:p'))
" Tlist_Window_Open_File_Fold " Tlist_Window_Open_File_Fold
" Open the fold for the specified file and close the fold for all the " Open the fold for the specified file and close the fold for all the
" other files " other files
function! s:Tlist_Window_Open_File_Fold(filename) function! s:Tlist_Window_Open_File_Fold(acmd_file)
call s:Tlist_Log_Msg('Tlist_Window_Open_File_Fold (' . a:filename . ')') call s:Tlist_Log_Msg('Tlist_Window_Open_File_Fold (' . a:acmd_file . ')')
" Make sure the taglist window is present " Make sure the taglist window is present
let winnum = bufwinnr(g:TagList_title) let winnum = bufwinnr(g:TagList_title)
@ -3965,12 +4044,15 @@ function! s:Tlist_Window_Open_File_Fold(filename)
silent! %foldclose silent! %foldclose
" Get tag list index of the specified file " Get tag list index of the specified file
let fidx = s:Tlist_Get_File_Index(a:filename) let fname = fnamemodify(a:acmd_file, ":p")
if filereadable(fname)
let fidx = s:Tlist_Get_File_Index(fname)
if fidx != -1 if fidx != -1
" Open the fold for the file " Open the fold for the file
exe "silent! " . s:tlist_{fidx}_start . "," . exe "silent! " . s:tlist_{fidx}_start . "," .
\ s:tlist_{fidx}_end . "foldopen" \ s:tlist_{fidx}_end . "foldopen"
endif endif
endif
" Go back to the original window " Go back to the original window
if !in_taglist_window if !in_taglist_window