search – Búsqueda rápida, limitada a una función de C ++

Pregunta:

Trabajo en un proyecto de C ++ bastante grande. Uno de los aspectos más frustrantes de su organización son las funciones muy grandes ubicadas dentro de archivos ridículamente grandes.

A menudo quiero buscar cualquier instancia de una variable global particular o llamada de función, restringida a la función actual. ¿Existe una fórmula razonablemente simple para lograr esto?

(Tengo ctags instalados y uso Tagbar … lo que podría ser útil para esto)

Respuesta:

Así es como lo haría yo. Agregue esto a su .vimrc

vnoremap if [[O][

Explicación: vnoremap significa mapear el lado izquierdo if al lado derecho [[mO][ mientras está en modo visual. if significa En función , aunque puede cambiar el nombre de esto si lo desea. [[ salta al comienzo de la función. O mueve al otro extremo del texto seleccionado visualmente y luego ][ mueve al final de la función.

Entonces, si desea buscar en una función, ahora ingresa al modo visual con v , y selecciona toda la función con if . Ahora salga del modo visual con <esc> y busque con /\%V \%V restringe su búsqueda al texto previamente seleccionado. Si no desea tener que presionar <esc>/\%V , también puede agregar esto a su .vimrc :

vnoremap / <esc>/\%V

Entonces, su secuencia de pulsaciones de teclas se vería así:

vif/foo<enter>

y esto encontrará todas las apariciones de foo en la función actual.


La única desventaja de este método es que espera que las llaves de apertura y cierre tengan 0 sangría. Si trabaja habitualmente con un código que no lo tiene, p. Ej.

int foo() {
    bar()
}

entonces esta versión un poco más complicada funcionará:

vnoremap if ][ma%O'a

Esto solo espera que la llave de cierre tenga 0 sangría. Si la riostra de apertura tiene sangrías, aún funciona, aunque tiene una marca. Si usa regularmente la marca 'a', puede mover esto, por ejemplo

vnoremap if ][mb%O'b
vnoremap if ][mc%O'c
...

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım