Reputation: 13716
I'm using Exuberant ctags to index Erlang files.
The "tags" file contains functions, but they do not have module qualifiers; so I can't search for "module:function", only "function", which may give several results.
Do you know a way to get ctags to include module qualifiers in the tags file?
Thanks.
Upvotes: 6
Views: 1402
Reputation: 1571
Like lht wrote, Exuberant Ctags 5.8 already stores the module of the function in the tags file. At least with recent versions of Vim (7.4) this information can be accessed. It is then possible to look up "module:function" using a custom "tag" function, e.g.:
function! ErlangTag()
let isk_orig = &isk
set isk+=:
let keyword = expand('<cword>')
let &isk = isk_orig
let parts = split(keyword, ':')
if len(parts) == 1
execute 'tag' parts[0]
elseif len(parts) == 2
let [mod, fun] = parts
let i = 1
let fun_taglist = taglist('^' . fun . '$')
for item in fun_taglist
if item.kind == 'f' && item.module == mod
silent execute i . 'tag' fnameescape(item.name)
break
endif
let i += 1
endfor
endif
endfunction
nnoremap <buffer> <c-]> :call ErlangTag()<cr>
Upvotes: 5
Reputation: 73
i'm a sublime 2 text user and find ctags works correctly in my computer. and i use ctags plugin
for sublime 2.
->ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Jul 24 2012, 11:45:55
Addresses: <[email protected]>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
Upvotes: 0
Reputation: 378
Exuberant ctags already supports tag field "module" for Erlang.
$ /usr/bin/ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Aug 17 2010, 17:33:33
Addresses: <[email protected]>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
$ /usr/bin/ctags xref_parser.erl
A typical tag line with a tag field named "module" looks like:
yeccgoto_const xref_parser.erl /^yeccgoto_const(24=_S, Cat, Ss, Stack, T, Ts, Tzr) ->$/;" f module:xref_parser
Actually, it is VIM which doesn't support this tag field as for now. From VIM doc:
{field} .. A list of optional fields. Each field has the form:
<Tab>{fieldname}:{value}
The {fieldname} identifies the field, and can only contain
alphabetical characters [a-zA-Z].
The {value} is any string, but cannot contain a <Tab>.
There is one field that doesn't have a ':'. This is the kind
of the tag. It is handled like it was preceded with "kind:".
See the documentation of ctags for the kinds it produces.
The only other field currently recognized by Vim is "file:"
(with an empty value). It is used for a static tag.
That's it. Only "kind" and "file" are supported tag field names.
Upvotes: 4
Reputation: 9486
It sounds like you are not using the Erlang etags module: Generate Emacs TAGS file from Erlang source files.
Upvotes: 1