Ben Fritz wrote:
On Tuesday, April 23, 2013 3:20:29 AM UTC-5, Jacek Czaja wrote:
And now my cursor is somewhere in main function and I want to jump to beta::b 
definition so I do:

:ta beta::b

and vim jumps to alpha::b ???


When I print possibilities:

:ts

it is something like:
beta::b
class:beta access:public
int b;

So :ts properly is showing the jump location but for some reason calling it via:

:ta beta::b


gives me wrong result.

All this problem happns only if I have two or more classes definition in the 
same file. If they are spread around diffrent files then it is all fine.

I generated tags from your file using the ctags command you gave, and I can 
reproduce the problem.

I also see the cause.

With the options you give, the tag file entries for alpha::b and beta::b both 
have the same search pattern. Here are their entries:

alpha::b        .\test.cpp      /^    int b;$/;"   m       class:alpha     
file:   access:private
beta::b .\test.cpp      /^    int b;$/;"   m       class:beta      file:   
access:public

I'm not sure whether this can be fixed.

I know the tagbar plugin ( http://www.vim.org/scripts/script.php?script_id=3465 
) can correctly jump to each tag, but I don't know how this is accomplished. 
You could look into the plugin or contact the author.

Certainly, you could also post-process your tags file to modify the search 
pattern. This may be how tagbar does it, I do not know.

If I manually edit the generated tags file to include a search for the class 
before a search for the tag itself, I can correctly jump to beta::b and 
alpha::b with the :tag command:

alpha::b        .\test.cpp      /class alpha/;/^    int b;$/;"     m       
class:alpha     file:   access:private
beta::b .\test.cpp      /class beta/;/^    int b;$/;"      m       class:beta   
   file:   access:public

Note my introduction of /class alpha/; and /class beta/; to perform a double 
search in each case.

This could certainly be automated, since the class name is right in the tag 
definition. I'll leave that to you.

Adding the "-n" flag will fix this, at the price that: if you insert a new line somewhere into your file, the line numbers will also change, thereby silently invalidating the tags file. I suggest putting comments on the two identical lines that differentiate them.

Regards,
C Campbell

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to