Navegar proyectos de código sin usar comandos externos


9

Estoy tratando de reunir una caja de herramientas de comandos / consultas de Vim, en modo comando o búsqueda, para navegar por una base de código sin usar Ctags u otras herramientas externas. Los Ctags son geniales, pero el soporte puede variar según el entorno de desarrollo en el que esté atascado. Me gustaría confiar en el conocimiento de Vim.


44
Tal vez deberías decir "herramientas externas" en lugar de "ctags", porque mi primera sugerencia sería cscope.
muru

1
Una cosa que uso es el comando gd. Esto lleva el cursor a la declaración local de la variable debajo del cursor.
nitishch

@muru No quiero usar ninguna herramienta externa. Lo que estoy tratando de aprender son técnicas para navegar eficientemente una base de código simplemente usando los comandos de Vim. Sé que se puede hacer, pero obviamente requiere un conocimiento Vim más profundo que el que tengo. Posiblemente no sea una buena pregunta de SE ya que es muy abierta pero no sé dónde buscar.
user1332148

Respuestas:


11

"Incluir búsqueda" es una de esas herramientas:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Relacionado con "incluir búsqueda", "búsqueda de definición" también es interesante:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Ambas herramientas dependen de una variedad de opciones que los complementos de tipo de archivo pueden establecer o no.

Ver :help include-search.


También puede usar gdy gDcomo versiones livianas de [Dy ]D.

Ver :help gd.


En el búfer actual, el siguiente comando enumerará cada definición de función y su número de línea:

:g/func/#

Ver :help :g.


:grepy :vimgreptambién son útiles, aunque sólo sea porque su resultado se introduce en la lista quickfix que se puede navegar con :cn, :cp... y se muestran en la ventana quickfix muy práctico.

Ver :help :grep, :help :vimgrepy :help quickfix.


Hablando de la lista quickfix / ventana, escribí esta función (basado en el trabajo de otros) para mostrar los resultados de [I, ]I, :ilist, [D, ]Dy :dlisten la lista quickfix / ventana. YMMV por supuesto.


Aunque no es estrictamente una herramienta de navegación, la ventana de vista previa me parece muy útil para echar un vistazo a la firma de la función con la que estoy trabajando.

Ver :help preview-window.


Dicho eso ...

Vim no sabe nada sobre su código más allá de unos pocos patrones de expresiones regulares que pueden o no ajustarse a su estilo de codificación o lo que sea. Esto significa que la navegación de código se realiza mejor con la ayuda de herramientas externas como ctags, cscope o GNU GLOBAL.


5

Hay muchas formas de navegar a través del código (incluido en Vim y externo), todavía las descubro. Lo que uso en el trabajo diario es:

  • Codificar el texto en los archivos del proyecto y navegar a través de la ventana de corrección rápida (utilizo el buscador plateado para codificar).
  • Utilizando complementos relacionados con el lenguaje, sé que hay algunos para javascript, ruby, go, que permiten saltar entre los módulos del programa (en el complemento de javascript está gf-command
  • Ctrl+O, Ctrl+I- retroceder o avanzar en el "historial" de la navegación
  • g; - saltar al último lugar editado en el archivo
  • Uso de marcas para colocar "marcadores" en los lugares particulares. Puede colocar la marca con el '[some_letter]comando, si la letra es mayúscula, obtendrá una marca a la que se podrá acceder desde cualquier archivo (búfer).
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.