Могут ли ctags различать разные символы с одинаковыми именами?
Я пытаюсь использовать 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;
}
2 ответа
Да, ctags справляется с этим, помещая все альтернативы в файл тегов; Вы можете открыть tags
файл, чтобы проверить это.
Ваша проблема вызвана поведением <C-]>
команда; от :help CTRL-]
:
Когда есть несколько совпадающих тегов для {идент.}, Переходите к тегу [count]. Когда [количество] не указано, к первому переходят. Смотрите | tag-matchlist | для перехода к другим подходящим тегам.
Вы можете либо поставить [count]
перед командой (первый прыжок обратно в исходное положение после неверного перехода тега через <C-t>
) или используйте :tselect
вместо этого команда, которая перечисляет все альтернативы тегов и запрашивает, к какому из них перейти.
Когда присутствуют несколько символов с одним и тем же именем (что вы ищете!), Он отобразит все возможности на вашем экране и возможность перейти туда. см. пример ниже (это из моего кода!)
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){
он будет отображаться так, что вы можете перейти к любой строке, нажав соответствующий номер строки!