ACTUALIZACIÓN : creé el paquete Semantic Refactor que resuelve completamente este problema y más. Puede ver las demostraciones para ver cómo funciona. El texto restante de esta respuesta, después de esta oración, es antiguo y lo puso allí solo por razones históricas.
ANTIGUA RESPUESTA :
Puede usar senator-copy-tag
para copiar con precisión la firma de la función y luego pegarla nuevamente en su archivo fuente. senator-copy-tag
y los comandos Senator están disponibles cuando habilita semantic-mode
:
(semantic-mode 1)
Semantic es un paquete integrado de Emacs.
Puede combinar Senador semántico con proyectil en un comando para insertar el prototipo de la función en otro archivo (archivo con el mismo nombre pero diferente extensión) desde cualquier parte de su proyecto. Si solo hay otro archivo, el comando se inserta inmediatamente en ese archivo; si hay más de uno, se le solicita que seleccione un archivo; Si no hay ninguno, se le solicitarán los archivos completos de su proyecto. Después de seleccionar un archivo, un mensaje ofrece una lista de etiquetas semánticas en el búfer actual que puede elegir insertar después.
Envié un PR a Emacs Refactor . Código completo si quieres probar sin esperar al RP: haz clic aquí .
Aquí hay una demostración (comienza cuando ves START DEMO
en la parte inferior):
También puede usar solo Senator para copiar y funcionar el prototipo. Siempre que el punto esté en algún lugar dentro de la firma de la función o el cuerpo de la función, ejecutar senator-copy-tag
, que está vinculado C-c , M-w
de forma predeterminada, copia toda la función: tanto la firma como el cuerpo. Sin embargo, puede pegar solo la firma si lo desea ejecutando el comando senator-yank-tag
, que está vinculado C-c , C-y
de forma predeterminada. Al presionar C-y
pegar la firma de la función completa junto con su cuerpo. senator-copy-tag
incluso funciona con la firma de función expandida en varias líneas como esta:
void
func(int a,
int b,
int c)
{
.....
}
Aunque este enfoque no se inserta directamente en el búfer con el mismo nombre, es más aplicable en otros casos. Su caso de uso solo funciona si tiene dos archivos en el mismo directorio y con el mismo nombre pero con extensiones diferentes. ¿Qué sucede si la declaración de la función y la definición de la función deben permanecer en diferentes archivos con diferentes nombres?
EDIT2 : Aquí hay un ejemplo para la inserción inteligente del prototipo de función usando etiquetas semánticas. Actualmente, solo puede insertar en función de las posiciones relativas ("antes" y "después") de las etiquetas semánticas de nivel superior. Voy a actualizar a los usuarios hacer para ser capaz de insertar en cualquier lugar donde las etiquetas semánticas están disponibles, con más posiciones (es decir, cuando una etiqueta es una Class
, debe ofrecer puestos adicionales: public
, projected
y private
). La demostración comienza cuando ves START DEMO
en la parte inferior:
Bonificación : si desea generar una lista de definiciones de funciones vacías en un .cpp
archivo a partir de un archivo de encabezado, use member-functions.el . Pero pronto, lo reemplazaré con Semantic + Projectile.