#c #vim #cscope
#c #vim #cscope
Вопрос:
Я использую cscope для большого проекта с vim, но без сопоставлений vim (они заморозили vim по какой-то странной причине). Я использую команды cscope из vim, и я хочу иметь возможность находить использование элементов структуры по всему коду.
Предположим, у меня есть что-то вроде этого:
1 typedef struct _s{
2
3 int x;
4 } S;
5
6 int main(){
7
8 int x = 1;
9
10 S my_s;
11
12 my_s.x = 5;
13
14 return my_s.x;
15 }
Если я введу команду ‘cs f s x’, она вернет как переменную-член S, так и локальную основную переменную. Есть ли способ, которым я могу найти только вхождения переменной-члена S?
Комментарии:
1. Не могли бы вы просто выполнить текстовый поиск по «.x» ?
2. @ChrisLutz Могут быть другие, не связанные структуры, в которых также есть вызываемый элемент
x
.
Ответ №1:
Я не думаю, что есть какой-либо способ заставить cscope различать локальную переменную x и переменную-член структуры.
Способ, которым мы решаем эту проблему в моей компании, заключается в использовании уникальной схемы именования для переменных-членов, которая помогает их дифференцировать:
typedef struct _s{
int s_x;
} S;
Поначалу это немного неудобно, но как только вы к этому привыкнете, вам станет легче ориентироваться в коде. Обычно uniquifier — это всего лишь несколько символов, относящихся к структуре, и это не слишком сильно все загромождает.
Комментарии:
1. Спасибо за ответ. В моем случае это не сработает, потому что я только что унаследовал большую базу кода, где они не следуют этому руководству. Однако я буду иметь это в виду. Я спросил, потому что многие IDE, такие как Eclipse и VS, могут это делать. Очевидно, что vim не является IDE, но я подумал, может ли он немного расширить эту функциональность.
2. Это прискорбно. Если вы найдете способ сделать это, я был бы рад это услышать!
Ответ №2:
Вместо поиска x вы можете поместить курсор на структурную переменную «my_s», а затем нажать комбинацию клавиш «gd». Это поможет вам найти определение my_s, а затем использовать cscope для поиска определения S.
Комментарии:
1. Я боюсь, что вопрос гласит
...struct member uses...
, а не определения?2. Да, я пытался получить все варианты использования переменной-члена ‘x’ по всему коду, а не там, где она была определена.