Dos herramientas que son muy útiles cuando se navega grandes bases de código basado en C usando Vim son las ctags y cscope.

ctags permite fácilmente saltar a etiquetas – funciones, macro y definición de variables. El excelente plugin de taglist que usa Vim es para crear un listado como el de un IDE y todas estas tags en el buffer esta separadas en una mini-ventana. Esto también requiere que para la implementación de la omni-completado en Vim (como en intellisense).

cscope es también es mas versatíl. Adicionalmente a saltar a los tags, cscope permite el encontrar cuando una función fue llamada, donde las variables son asignadas, que función esta actualmente en una llamada, y un útil el símbolo general de estilo de C. En la navegación de mas de 300+KLOC código basado en CPython encontré que cscope se vuelve extremadamente funcional y útil en la relación entre la función y encontrar que llama a que.

Mientras se intenta que estas herramientas para código de Python, sin embargo, me encontré unos problemas, algunos los cuales no los pude resolver.

ctags para Python

Al principio con ctags parece funcionar muy bien con el código de Python, administrando y encontrando símbolos en ún gran cuerpo de código. Sin embargo, rápidamente uno empieza a notar algunas complicaciones: tags son creadas de las imports, no solo de las definiciones de funciones / clases. Supon que defines una clase llamada MyType en el archivo mytype.py. Otros archivos lo importa al correr:

from mytype import MyType

Ahora cuando el cursor de MyType esperarías saltar usando Ctrl+] y llegar a la definición, pero en vez te pregunta en cual de las diferentes tags quieres saltar aparte de la definición, hay una tag para cada import. Esto puede volverse muy molesto…

Afortunadamente, hay una forma de resolverlo, lo cual tomo mucha búsqueda el encontrarlo. Crear un archivo llamado ~/.ctags (si no lo tienes ya) y pon la siguiente linea ahí:

–python-kinds=-i

Inicia nuevamente las ctags. Esto le dice a las ctags el detenerse al marcar las etiquetas de importación. ctags permiten convenientemente configurar tales cosas, y puedes examinar estas configuraciones usando el atributo –list-kinds. Por ejemplo después de importar la linea de exclusión, obtengo:

src$ ctags –list-kinds=python
c classes
f functions
m class members
v variables
i imports [off]

cscope para Python

cscope es un problema mas grande. El proyecto fue hecho para C principalmente y su base de datos no esta tan documentada como para poderla estudiar lo cual lo hace un poco dificil de trabajar con otros lenguajes.

Al utilizar la versión mas actual de pycscope fue posible el poder usarlo sin embargo algunas cosas se le escaparán como los comentarios en python.

grep y EasyGrep

Esta es quizas la solución mas amigable para un programador — grep. Afortunadamente en Vim tiene un plugin llamado EasyGrep que encierra la funcionalidad de vim y provee simple formas para buscar el código fuente.

Un par de funcionalidades de EasyGrep son las siguientes:

  • Crear una tecla rápida para buscar los símbolos bajo el cursor actual.
  • Automáticamente configurar grep para buscar retroactivamente en ciertos tipos de archivos, dependiendo en el típos de archivos actuales. Esta funcionalidad es completamente configurable.

Algo más?

Cualquier otros plugins y herramientas que estés usando para hacer que el código Python en Vim sea mas placentero? Por favor házmelo saber.

3 votes, average: 4.67 out of 53 votes, average: 4.67 out of 53 votes, average: 4.67 out of 53 votes, average: 4.67 out of 53 votes, average: 4.67 out of 5 (3 votes, average: 4.67 out of 5)
You need to be a registered member to rate this.
(402 total tokens earned)
Loading...

Responses