Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using tags in Vim

I know that Vim has sophisticated support for tags but I am struggling to get them to work with JavaScript and TCL.

I am using Vim 7.2.330 under Ubuntu Lucid, a standard Vim install and standard Exuberant CTags install.

I wish to keep my tags in a file called ~/.vimtags/tags

I have included the tags file in my vimrc file set tags+=$HOME."/vimtags/tags".

I have run the following command from the base code directory:

ctags-exuberant -f ~/.vimtags/tags -h ".js" --totals=yes --tag-relative=yes --fields=+akst -R

I also have the following in my .ctags file - I saw an article somewhere online that said you should add these to make it compatible with modern JavaScript.

--langdef=js
--langmap=js:.js
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\{/\1/,object/
--regex-js=/([A-Za-z0-9._$()]+)[ \t]*[:=][ \t]*function[ \t]*\(/\1/,function/
--regex-js=/function[ \t]+([A-Za-z0-9._$]+)[ \t]*\(([^)])\)/\1/,function/
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\[/\1/,array/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^"]'[^']*/\1/,string/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^']"[^"]*/\1/,string/

When I load up Vim, the tags file definitely gets loaded. A set tags? shows that the tag file has been included.

However, whenever I CTRL-] over a keyword, it always says that there are no tags.

Please could you share how you set up Vim tags with JavaScript, and also show how you use the tag system? It seems to be a great feature of Vim, if only I could get it working.

like image 980
mrwooster Avatar asked Jan 20 '11 11:01

mrwooster


People also ask

How do I use tags in Vim?

To use the tags file, you'll need to open Vim and tell it where it is. Still in the Vim source directory, I ran vim and then typed :set tags+=tags to tell it to use the ./tags file. At this point, Vim knows about the tags file — you don't need to tell it to load the file.

What is tag stack in Vim?

The tag stack is created by all your "jump to definition". Each time you do <C-]> , the tag you jump to is added to the tag stack and you are able to use <C-t> or :pop to jump back to the previous tag in the tag stack or :tag to go the other way.

What is the use of ctags?

The ctags command creates a tags file for use with the ex and vi editors from the specified C, Pascal, FORTRAN, yacc, lex, and LISP source files. The tags file consists of locators of programming language specific objects (such as functions and type definitions) within the source files.


2 Answers

However, whenever I CTRL-] over a keyword, it always says that there are no tags.

tags are not supposed to work on keywords, they work on symbols you have defined (functions, variables, constants, etc) in the indexed files. So if you are trying on a Javascript keyword it won't work. It won't work on a function from a library either, if you have not included the JS library to your tag file (using ctags -a for example).

If you want to be sure what has been indexed and what you have access to with <C-]>, you can simply open your "tag" file, and see what's in there.

:e ~/.vimtags/tags

You should see a header with information relative to the tag file format, followed by a tag list, which include the tag name followed by a file path, a line number, and a character identifying the type of tag.

If it has some content, it should work for the listed symbols.

Regarding your ctag setup, it looks fine in my opinion.

like image 50
Xavier T. Avatar answered Oct 16 '22 02:10

Xavier T.


There is a very neat and easy way to get JavaScript source-code browsing / tag-listing in Vim, using Mozilla's DoctorJS (formerly known as jsctags).

See my answer for this question for more info.

Enjoy. :)

like image 30
Ory Band Avatar answered Oct 16 '22 00:10

Ory Band