我正在尝试将vim与ctags和/或cscope一起使用,并且它工作得很好但我有一些问题,其中ctags跳转到错误的符号。例如,在下面的代码中,如果我将光标放在符号" a"在main()中点击 Ctrl + ] 转到定义我将被定向到" char a"在我的"虚拟结构"但我希望被引导到我的" int a"在主要。 ctags或cscope可以处理这个或符号是否需要唯一的名称?
struct dummy
{
char a;
};
int main ()
{
int a = 1;
a = a + 2;
return a;
}
答案 0 :(得分:2)
是的,ctags通过将所有替代品放入标签文件来处理这个问题;您可以打开tags
文件进行验证。
您的问题是由<C-]>
命令的行为引起的;来自:help CTRL-]
:
当{ident}有多个匹配的标签时,跳转 到[count]一个。没有[计数]的时候 第一个跳到了。见| tag-matchlist |对于 跳转到其他匹配的标签。
您可以在命令之前提供[count]
(在通过<C-t>
错误标记跳转后首先跳回原始位置),或者使用:tselect
命令代替,所有标签替代品和查询哪一个跳转到。
答案 1 :(得分:0)
当多个符号出现时,它们具有相同的名称(您要搜索的内容!),它将显示您屏幕上的所有可能性,以及选项。请参阅下面的示例(来自我的代码!)
1 mcasttx.c 4 #include <sys/socket.h>
2 mcasttx.c 11 int socket_id,nbytes,newsocket_id;
3 mcasttx.c 22 socket_id=socket(AF_INET, SOCK_STREAM, 0);
4 mcasttx.c 23 if(socket_id == -1){
5 mcasttx.c 24 printf("Failed to Create a socket\n");
6 mcasttx.c 32 if(bind(socket_id,(struct sockaddr *)&sockaddr, sizeof(sockaddr))<0){
7 mcasttx.c 37 if( listen(socket_id, 5) < 0){
它将显示为这样你可以通过按相应的行号去任何一行!