Как найти это глобальное определение с помощью cscope, когда есть две функции с одинаковым именем в разных файлах?

Я читаю код Redis с помощью vim и создаю базу данных следующим образом:

find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files
cscope -bq -i cscope.files -f cscope.out

и ключи карты в vim:

nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>

Когда я читаю src/dict.c и хочу найти определение функции _dictInit, оно должно найти определение в src/dict.c, но на самом деле оно находится в определении в deps/hiredis/dict.c, которое имеет то же имя определения функции

Итак, как мне решить проблему?


person solomon_wzs    schedule 16.05.2013    source источник


Ответы (1)


Это вхождение _dictInit в deps/hiredis/dict.c является первой записью в базе данных.

Поскольку есть две записи, вы должны получить такой список:

результат cscope

это позволяет вам выбрать, к какому определению перейти.

person romainl    schedule 16.05.2013
comment
Я установил vimrc следующим образом: nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>:copen<CR> он открывал окно быстрого исправления, как вы показываете, но автоматически выбирал 1-й файл для поиска. - person solomon_wzs; 16.05.2013
comment
Это не окно быстрого исправления: это обычный вывод запроса cscope с несколькими результатами, который отображается в командной строке. К вашему сведению, снимок экрана был сделан с вашим сопоставлением с использованием базы данных, созданной с помощью ваших фрагментов, с последним исходным кодом Redis. - person romainl; 16.05.2013
comment
Я установил плагин cscope.vim и обнаружил, что set cscopequickfix=s-,g-,d-,c-,t-,e-,f-,i- после удаления g- все было в порядке. Спасибо. - person solomon_wzs; 16.05.2013