2011-01-17 17 views
7

Mi piace che ogni commento appaia su una riga separata. Non mi piace mettere commenti sulla stessa riga su cui è scritto il codice. In alcune lingue si può scrivere un blocco di commento come ad esempio:Blocchi autoespandenti di commenti in emacs

/** 
* I am a comment block. This comment block will be automatically expanded by the 
* IDE such that it can contain all of the text in this block. 
**/ 

mi piace. Mi piace il modo in cui il blocco del commento continua a ottenere più righe mentre aggiungo altro testo ad esso. Mi piace come se inserisco del testo in un punto arbitrario nel blocco, il testo successivo verrà spostato verso il basso in modo che nessun testo vada oltre un certo punto a destra. Io uso Python. Python non ha un commento di blocco multilinea. Immagino che il più vicino possibile sia:

# I am a comment block. This comment block will NOT be automatically expanded by 
# the IDE, because it does not recognize these two comment lines as being joined. 

Io uso anche emacs. Mi chiedo solo se qualcuno ha una soluzione intelligente in modo tale da poter aprire un blocco di commenti e iniziare a digitare. Non preoccuparti di dover premere Invio per saltare alla riga successiva quando la larghezza della riga di commento è troppo grande. Non è necessario ri-shuffle il commento nel suo complesso quando si desidera inserire all'interno del blocco dei commenti. Qualche idea?

Riepilogo: Sto cercando un modo per eseguire commenti contigui multilinea (per Python) in emacs, senza dover manualmente formattare il testo nel blocco dei commenti stesso.

Grazie

risposta

4

auto-fill-mode sembra di fare ciò che si vuole. Quando la lunghezza della linea supera il valore di fill-column, interrompe la linea e inserisce una nuova riga di commento.

Non è completamente automatico, tuttavia, se il testo è inserito in mezzo, sarà necessario premere M-q per ricaricare.

[Modifica: ecco un modo per smartifare il comando "spazio". Ogni volta che si preme SPC tuo commento blocco sarà riempito:

(defun refill-when-in-comment() 
    (interactive) 
    (let ((curr-face (get-char-property (point) 'face))) 
    (if (member "comment" (split-string (prin1-to-string curr-face) "-")) 
     (fill-paragraph t) 
    ) 
    ) 
) 

(defun smart-space (arg) 
    (interactive "P") 
    (refill-when-in-comment) 
    (self-insert-command (prefix-numeric-value arg)) 
) 

(global-set-key " " 'smart-space) 

Fa questo lavoro per voi?

+0

+1. Digita il tuo commento come testo normale, contrassegnalo e fai un 'M-q' per riempirlo. –

+0

Vedere anche, modalità di riempimento per eseguire automaticamente il riempimento. http://www.emacswiki.org/emacs/RefillMode Fa parte di emacs dalla v21.2. Non l'ho provato per l'uso all'interno dei commenti al codice. La mia unica preoccupazione sarebbe che avrebbe "riempito" il codice effettivo, oltre a riempire i commenti. ovviamente sarebbe male. – Cheeso

2

È leggermente non ortodosso, ma non si è limitati a utilizzare le stringhe come commenti solo per docstring. L'unica parte magica di averli come primo elemento è che verranno assegnati al metodo degli oggetti __doc__. Essi possono essere utilizzati ovunque e anche se non influenzerà l'efficienza a tutti

>>> import dis 
>>> def test(): 
...  """This is a standard doc string""" 
...  a = 3 # This will get compiled 
...  """This is a non standard doc string and will not get compiled""" 
... 
>>> dis.dis(test) 
    3   0 LOAD_CONST    1 (3) 
       3 STORE_FAST    0 (a) 

    4   6 LOAD_CONST    2 (None) 
       9 RETURN_VALUE 

Si può vedere che il codice generato non fa alcun riferimento a uno dei due stringhe.

Lo dico solo perché le stringhe doc sembrano avere tutte le funzionalità richieste. È un po 'non standard anche se personalmente non vedo un problema con esso. I commenti multilineari sarebbero belli.