2011-01-17 17 views
7

Me gustaría que cualquier comentario aparezca en su propia línea. No me gusta poner comentarios en la misma línea en que está el código. En algunos idiomas, puede escribir un bloque de comentarios como:Bloques auto expandibles de comentarios en 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. 
**/ 

Me gusta eso. Me gusta cómo el bloque de comentarios sigue obteniendo más líneas a medida que le agrego más texto. Me gusta cómo si inserto texto en algún punto arbitrario del bloque, el texto posterior se moverá hacia abajo para que ningún texto vaya más allá de un cierto punto a la derecha. Yo uso Python. Python no tiene un comentario de bloque multilínea. Supongo que lo más cercano que podría obtener sería:

# 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. 

También uso emacs. Me pregunto si alguien ha pensado en alguna solución inteligente como para abrir un bloque de comentarios y comenzar a escribir. No se preocupe por tener que presionar regresar para saltar a la siguiente línea cuando el ancho de la línea de comentarios es demasiado grande. No es necesario volver a mezclar el comentario como un todo cuando desee insertarlo en el bloque de comentarios. ¿Algunas ideas?

Resumen: Estoy buscando una forma de hacer comentarios contiguos multilínea (para Python) en emacs, sin tener que formatear manualmente el texto en el bloque de comentarios.

Gracias

Respuesta

4

auto-fill-mode parece hacer lo que quiera. Cuando la longitud de la línea excede el valor de fill-column, rompe la línea e inserta una nueva línea de comentario.

No es completamente automático aunque, si el texto se inserta entre, tendrá que presionar M-q para volver a llenar.

[Editar: aquí hay una manera de smartify el comando "espacio". Cada vez que se pulsa SPC su bloque de comentario será rellenado:

(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) 

¿Esto funciona para usted?

+0

+1. Escriba su comentario como texto sin formato, márquelo y haga un 'M-q' para completarlo. –

+0

Consulte también, modo recarga para realizar automáticamente el rellenado. http://www.emacswiki.org/emacs/RefillMode Ha sido parte de emacs desde v21.2. No lo he probado para usarlo en los comentarios del código. Mi única preocupación sería que "completaría" el código real, además de completar los comentarios. obviamente eso sería malo. – Cheeso

2

Es poco ortodoxo, pero no está limitado a usar cadenas como comentarios solo para cadenas de documentos. La única parte mágica de tenerlos como primer elemento es que serán asignados al método de los objetos __doc__. Pueden ser utilizados en cualquier lugar sin embargo y no afectarán la eficiencia en absoluto

>>> 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 

Se puede ver que el código generado no hace ninguna referencia a cualquiera de las dos cadenas.

Solo menciono esto porque doc strings parece tener todas las características que usted está solicitando. Es un tanto no estándar, aunque personalmente no veo un problema con él. Los comentarios de líneas múltiples serían agradables.

Cuestiones relacionadas