2011-01-21 24 views
23

En el estudio visual, es más fácil presionar el botón F12 para pasar a una declaración de una función o variable al editar el código C/C++.¿Cuál es la tecla de acceso directo para saltar a la declaración en Emacs?

¿Hay una tecla de acceso directo en emacs para hacer eso?

+0

La pregunta es demasiado amplia, IMO. Las respuestas van desde Imenu a varios comandos de etiquetas, y luego a cualquier cantidad de funciones de terceros. Diría que comiences con el manual de Emacs ... – Drew

Respuesta

23

Bueno, es un poco más complicado que eso.

De manera predeterminada, Emacs no "sabe" acerca de las declaraciones de funciones para el código C o C++. Primero, obtenga Exuberant Ctags. Luego, use el comando etags (ctags para Emacs) en su código fuente. Se generará un archivo llamado TAGS.

Luego, mientras edita su código fuente, cuando quiera pasar a una declaración, presione M-. (meta y punto, o alt y punto en los teclados modernos). Al principio, Emacs le preguntará por la ubicación de su archivo de etiquetas. Apúntalo al que has generado y luego la navegación será automática.

Sugiero leer Emacswiki article about tags para una mejor comprensión de esta funcionalidad.

La versión más reciente de Emacs (23.2) viene con CEDET integrado, que tiene características más avanzadas para la navegación C y C++, pero puede ser un poco difícil de configurar correctamente, así que lea más si le interesa .

+0

¿Cómo hacer que Emacs salte a la definición de una función (su implementación) en lugar de a su declaración (su prototipo típicamente está en un archivo de encabezado)? Ejecuté ctags con 'ctags -R -e --c-types = cdefglmnpstuvx'. –

4

Existen varias formas de hacerlo. Como mencionó Darioo, Ctags es uno, pero va a la definición por defecto (que podría funcionar para usted). Sin embargo, si mira más adelante, puede ver que el prefijo M-. (es decir, C-u M-.) lo llevará a la siguiente coincidencia de etiqueta (que a menudo es la declaración). También hay una opción --declarations, pero Exuberant Ctags no parece ser compatible.

CEDET es otra opción, pero en mi experiencia, todavía no está lista para producción. A menudo, en C++ semantic-ia-fast-jump irá a enviar declaraciones en lugar de la definición o declaración.

+0

Gracias por (C-u M-) –

2

M-. key lo llevará a la definición de función emacs.

+0

Yo esta debería ser la respuesta correcta, También descubrí ese comando por error :)) –

7

Como han dicho otros, no existe una solución universal incorporada para esto en emacs. Dicho esto, después de tener esta funcionalidad en IntelliJ también la quería en emacs, así que hice Dumb Jump.

En este momento Dumb Jump tiene un soporte básico para:

  • JavaScript
  • Emacs Lisp
  • Python
  • Ir
  • PHP
  • Rubí
  • Faust
  • y más ... (más de 20 ahora)

Está disponible a través de MELPA y se está desarrollando activamente.

Cuestiones relacionadas