2009-12-29 8 views
6

Ho una domanda molto simile a Getting Emacs fill-paragraph to play nice with javadoc-like comments, ma non ero sicuro di ottenere molte risposte in un thread di un anno.Emacs c-mode fill-paragraph con Doxygen Commenti

In ogni caso, ho il codice C che ha alcuni commenti Doxygen che simile al seguente:

/** 
* Description 
* 
* @param[in,out] var1 : <Long description that needs to be wrapped.> 
* @param[in,out] var2 : <Description2> 
*/ 

Ora, quando uso Mq in emacs, voglio il seguente:

/** 
* Description 
* 
* @param[in,out] var1 : <Long description that needs 
*      to be wrapped.> 
* @param[in,out] var2 : <Description2> 
*/ 

Ma , corrente ottengo il seguente:

/** 
* Description 
* 
* @param[in,out] var1 : <Long description that needs 
* to be wrapped.> @param[in,out] var2 : <Description2> 
*/ 

Facendo qualche ricerca, sembrava che avevo bisogno di impostare il parag raph-start variabile in emacs per riconoscere "@param". Ho trovato un'altra domanda sullo stack overflow (Getting Emacs fill-paragraph to play nice with javadoc-like comments), che aveva un'espressione regolare di esempio. L'ho modificato un po 'per adattarlo alle mie esigenze e l'ho testato all'interno di Cerca-> Regex Forward, evidenziando correttamente ogni frase @param.

ho usato la seguente espressione regolare "^\s-*\*\s-*\(@param\).*$"

Così, ho provato a fissare la data espressione regolare come il mio punto-start (con s 'richiesto per la sintassi elisp la \ aggiunta) File nei miei .emacs. Quando ho aperto una nuova finestra di emacs e ho provato M-q, si stava verificando lo stesso errore. C'è qualcosa che mi manca? M-q è usato diversamente in c-mode? Devo controllare il mio file .emacs per qualcosa che potrebbe causare un errore qui? Qualsiasi aiuto sarebbe apprezzato.

Grazie, Ryan

risposta

3

quanto riguarda la tua domanda, "è M-q utilizzato in modo diverso in c-mode?", describe-key (legato al C-h k) è tuo amico. Mentre visiti il ​​buffer con il file C, digita C-h k M-q e ti dirà esattamente a quale funzione è associato M-q. In questo caso, è c-fill-paragraph, che alla fine utilizza paragraph-start, la variabile trovata in quell'altra domanda.

ho scoperto che questa espressione regolare utilizzata come paragraph-start avvolgerà linee e trattare ogni @param come un nuovo paragrafo:

"^[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*$\\|@param\\)\\|^\f"

Tuttavia, non sarà rientrare le wrappedlines come si desidera. Renderà il tuo esempio simile al seguente:

/** 
* Description 
* 
* @param[in,out] var1 : <Long description that needs 
* to be wrapped.> 
* @param[in,out] var2 : <Description2> 
*/ 

Spero che funzioni ancora meglio per te. Fammi sapere se capisci il rientro.

+0

Ho provato ad aggiungere l'espressione regolare che hai citato nel mio file .emacs, ma sto ancora avendo lo stesso problema con la seconda @param che non viene riconosciuta come un nuovo paragrafo. Mi rendo conto che correggere lo stato del paragrafo non risolverà il mio problema di indentazione, ma questo sarebbe un posto molto utile per iniziare =). Dopo aver scritto il post iniziale, mi sono reso conto che avrei dovuto notare che si trattava di una domanda in due parti: 1) Riconosci la @param come nuovo paragrafo. 2) Rientrare correttamente le descrizioni. – DuneBug

+0

Quando si è nel buffer con questo file, cosa restituisce 'C-h v paragraph-start'? Se non il precedente regexp, allora potrebbe essere impostato a livello globale e potrebbe essere sovrascritto da c-mode. Se questo è il caso, puoi impostarlo in un hook c-mode. – Neil

Problemi correlati