2011-05-31 8 views
12

Estoy usando cscope para un proyecto grande con vim, pero sin las asignaciones de vim (congelaron vim por alguna razón extraña). Estoy usando comandos de cscope desde vim, y quiero poder encontrar usos de los miembros de la estructura en todo el código.¿Cómo encontrar los miembros de la estructura utiliza con cscope e ignora las variables locales?

Supongamos que tengo algo como esto:

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 } 

Si emite el comando 'cs f s x' se volverá tanto variable miembro de S y la principal variable local. ¿Hay alguna manera de que solo pueda encontrar las ocurrencias de la variable miembro de S?

+0

¿No puede simplemente hacer una búsqueda de texto para ".x"? –

Respuesta

4

No creo que haya ninguna forma de hacer que cscope diferencie entre la variable local x y la variable miembro de la estructura.

La forma en que resolvemos este problema en mi empresa es utilizar un esquema de nombres únicos para las variables miembro que ayuda a diferenciarlos:

typedef struct _s{  
    int s_x; 
} S; 

Es un poco incómodo al principio, pero una vez que se acostumbre a lo hace, hace que sea más fácil navegar por el código. Por lo general, el uniquifier es solo unos pocos caracteres relevantes para la estructura, y no satura demasiado las cosas.

+0

Gracias por la respuesta. Esto no funcionará en mi caso porque acabo de heredar una gran base de código donde no siguen esta pauta. Sin embargo, lo tendré en cuenta. Lo pregunté porque muchos IDEs como Eclipse y VS pueden hacer esto. Obviamente, vim no es un IDE, pero me pregunté si podría llegar a esa funcionalidad. –

+0

Eso es desafortunado. Si encuentras una manera de hacer esto, ¡me encantaría escucharlo! –

0

En lugar de buscar x, puede colocar el cursor en la variable de estructura "my_s" y luego presionar la combinación de teclas "gd". Esto lo ubicará en la definición de my_s y luego usará cscope para encontrar la definición de S.

+0

Me temo que la pregunta dice '... el miembro de struct usa ...', ¿no hay definiciones? – sehe

+1

Sí, estaba tratando de obtener todos los usos de la variable miembro 'x' en todo el código, no en el lugar en que se definió. –

Cuestiones relacionadas