function vim

function - Saltar a la definición de la función en vim



(10)

¿Cómo puedo ir a una definición de función usando vim? Por ejemplo, con Visual Assist, puedo escribir Alt + g debajo de una función y se abre un menú contextual que enumera los archivos con definiciones.

¿Cómo puedo hacer algo como esto en vim?


1- instalar ctags exuberantes. Si está usando osx, este artículo muestra un pequeño truco: http://www.runtime-era.com/2012/05/exuberant-ctags-in-osx-107.html

2- Si solo desea incluir las etiquetas de los archivos en su directorio solamente, ejecute este comando en su directorio:

ctags -R

Esto creará un archivo de "etiquetas" para usted.

3- Si estás usando Ruby y deseas incluir los ctags para tus gemas (esto ha sido realmente útil para mí con RubyMotion y las gemas locales que he desarrollado), haz lo siguiente:

ctags --exclude=.git --exclude=''*.log'' -R * `bundle show --paths`

crédito: https://coderwall.com/p/lv1qww (Tenga en cuenta que omití la opción -e que genera etiquetas para emacs en lugar de vim)

4- Agregue la siguiente línea a su ~ / .vimrc

set autochdir set tags+=./tags;

(Por qué el punto y coma: http://vim.wikia.com/wiki/Single_tags_file_for_a_source_tree )

5- Ve a la palabra que te gustaría seguir y presiona ctrl + ] ; si desea volver atrás, use ctrl+o (fuente: https://.com/a/53929/226255 )


Como Paul Tomblin mencionó, debes usar ctags . También podría considerar usar complementos para seleccionar el apropiado o para previsualizar la definición de la función debajo del cursor. Sin complementos, tendrás un dolor de cabeza tratando de seleccionar uno de los cientos de métodos ''doAction'' sobrecargados, ya que el soporte de ctags integrado no tiene en cuenta el contexto, solo un nombre.

También puede usar cscope y su función ''buscar símbolo global''. Pero tu vim tiene que compilarse con soporte de + cscope que no es una opción predeterminada de compilación.

Si sabe que la función está definida en el archivo actual, puede usar las teclas ''gD'' en un modo normal para pasar a la definición del símbolo debajo del cursor.

Aquí está el plugin más descargado para navegación
http://www.vim.org/scripts/script.php?script_id=273

Aquí hay uno que he escrito para seleccionar el contexto mientras saltas para etiquetar
http://www.vim.org/scripts/script.php?script_id=2507


Instala cscope . Funciona muy parecido a ctags pero es más poderoso. Para ir a la definición, en lugar de Ctrl + ] , haga Ctrl + / + g . Por supuesto, puede usar ambos al mismo tiempo. Pero con un gran proyecto (por ejemplo, kernel de Linux), cscope está muy avanzado.


Otra técnica común es colocar el nombre de la función en la primera columna. Esto permite que la definición se encuentre con una búsqueda simple.

int main(int argc, char *argv[]) { ... }

La función anterior podría encontrarse con /^main dentro del archivo o con :grep -r ''^main'' *.c en un directorio. Siempre que el código esté apropiadamente sangrado, la única vez que el identificador ocurrirá al comienzo de una línea es en la definición de la función.

Por supuesto, si no estás utilizando ctags a partir de este momento, ¡deberías avergonzarte! Sin embargo, creo que este estándar de codificación también es una adición útil.


Para secundar la respuesta de Paul: sí, ctags (especialmente exuberant-ctags ( http://ctags.sourceforge.net/ )) es genial. También agregué esto a mi vimrc, así que puedo usar un archivo de etiquetas para un proyecto completo:

set tags=tags;/


Realmente no recomiendo usar etiquetas en Vim. Tuve que escribir mi propio complemento de etiquetas que es más avanzado que todos los demás complementos de etiquetas, así como dejar pasar mucho tiempo antes de poder finalmente entender y aceptar que las etiquetas son demasiado limitadas y que hay demasiados falsos positivos.

En su lugar, le recomiendo usar herramientas más inteligentes que realmente conozcan el idioma con el que está trabajando, la estructura de su proyecto y el contexto desde el cual intenta saltar a la definición de algo. Como ejemplo, phpcd funciona muy bien para proyectos de PHP. Utiliza la reflexión de PHP para obtener información sobre su código. También hay otras opciones para otros idiomas que no dependen de las etiquetas.


Usa ctags Genere un archivo de etiquetas y dígale a vim dónde está usando el comando: tags. Luego puedes saltar a la definición de la función usando Ctrl - ]

Hay más trucos y consejos sobre etiquetas en esta pregunta .


Use gd y gD , coloque el cursor sobre cualquier variable en su programa.

  1. gd lo llevará a la declaración local.
  2. gD te llevará a la declaración global.

más opciones de navegación se pueden encontrar here .

Use cscope para referencias cruzadas de proyectos grandes, como el kernel de Linux.


g * hace un trabajo decente sin configurar ctags.

Es decir, escriba g * (o simplemente * - vea abajo) para buscar la palabra debajo del cursor (en este caso, el nombre de la función). Luego presione n para ir a la siguiente aparición (o Shift - n para anterior).

No salta directamente a la definición, dado que este comando solo busca la palabra debajo del cursor, pero si no quiere ocuparse de la configuración de ctags en este momento, al menos puede evitar tener que re -type el nombre de la función para buscar su definición.

- Editar - ¡Aunque he estado usando g * durante mucho tiempo, recientemente descubrí dos atajos para estos atajos!

(a) * saltará a la siguiente aparición de la palabra debajo del cursor. (No es necesario escribir g, el comando ''goto'' en vi).

(b) # va a la aparición anterior, de manera similar.

N yn aún funcionan, pero ''#'' a menudo es muy útil para comenzar la búsqueda inicialmente en la dirección inversa, por ejemplo, cuando se busca la declaración de una variable debajo del cursor.


Si todo está contenido en un archivo, existe el comando gd (como en ''definición goto''), que lo llevará a la primera aparición en el archivo de la palabra debajo del cursor, que a menudo es la definición.