2009-12-23 24 views
5

Normalmente uso Geany o Hi-Tide en Debian (GNU/Linux) para el desarrollo de firmware, principalmente C (pero también para leer ensamblador anterior). Documentar código utilizando comentarios de una sola línea, y realmente me molesta cuando vuelvo a escribir algo y tengo que volver a romper manualmente cada línea siguiente para mantenerlo en el margen de 80 caracteres.Editor de texto con ajuste de comentario

¿Hay algún editor de texto que pueda volver a ajustar los comentarios consecutivos de una línea (y hacerlo automáticamente mientras escribo)? Es decir, dado:

/// This is a really long line that should have been wrapped at "that" but was not. 
/// This sentence is in the same 
/// paragraph as the last. 

... Quiero un editor que va a volver a terminar con esto a

/// This is a really long line that 
/// should have been wrapped at "that" 
/// but was not. This sentence is in 
/// the same paragraph as the last. 

... preferentemente haciendo esto con sensatez mientras escribo.

He intentado:

  • Hi-Tide (basado en Eclipse 3.3)
  • Geany
  • jEdit
  • UniversalIndentGUI + un montón de prettifiers (no pude encontrar ningún formateadores que funcionó, y tampoco es un gran flujo de trabajo)
  • GVim - la siguiente línea comienza //should have been ... en lugar de /// should have been ...

actualización: sólo para más detalles sobre mi respuesta aceptada - He ido con el snapshot emacs y un extra filladapt mode también estaba obligado

Respuesta

6

En Emacs, para iniciar el ajuste automático, ingrese auto-fi ll-mode. Para establecer el ancho de línea, ejecute C-u ⟨columnas⟩ C-x f. Emacs, o realmente el modo CC, se anticipan a su estructura de comentarios, por lo que escribir /// Esta es una línea muy larga que shoul dará lugar a

/// This is a really long line that 
/// shoul‸

y se puede rellenar un párrafo en cualquier momento con Mq.

Si usted quiere hacer recargas de forma automática con cada pulsación de tecla, así bien puede haber algún comando interal o biblioteca de terceros por ahí, pero fuera de la mano se puede utilizar este código elisp:

 
;;; Can't advise SELF-INSERT-COMMAND, so create a wrapper procedure. 
(defun self-insert-refill (n) 
    (interactive "p") 
    (self-insert-command n)) 

;;; Advise SELF-INSERT-REFILL to execute FILL-PARAGRAPH after every 
;;; keypress, but *only* if we're inside a comment 
(defadvice self-insert-refill (after refill-paragraph) 
    (let ((face (or (get-char-property (point) 'read-face-name) 
        (get-char-property (point) 'face)))) 

    (if (and (eq face 'font-lock-comment-face) 
      (not (string= " " (this-command-keys)))) ; Spaces would get deleted on refill. 
     (fill-paragraph)))) 

(ad-activate 'self-insert-refill) 

(add-hook 'c-mode-hook 
    ;; Remap SELF-INSERT-COMMAND to be SELF-INSERT-REFILL. 
    (local-set-key [remap self-insert-command] 'self-insert-refill))) 

Este probablemente no sea muy robusto o esté en consonancia con las mejores prácticas, y probablemente no sea del todo satisfactorio, ya que no funcionará para la edición general, por ejemplo C-d y retrocede, y ralentiza un poco el editor, pero es un comienzo.

+0

¿Cómo hago que se llene automáticamente de forma predeterminada? Agregué "(setq-default fill-column 55)" y "(add-hook 'cc-mode-hook' turn-on-auto-fill)" a mis .emacs, y ... nada. – detly

+0

Ese no es el nombre del gancho. Es 'c-modo-gancho'. http://cc-mode.sourceforge.net/html-manual/CC-Hooks.html#CC-Hooks –

+1

Excelente, funciona. Voy a probar emacs de forma más completa ... – detly

6

Vim sin duda puede hacer esto.

En primer lugar, tiene que decirle a Vim que "///" es una comment prefix (no es por defecto):

:set comments^=:/// 

Si desea envolver a ocurrir como-usted-tipo, establecer su textwidth preferido:

:set textwidth=80 

Para dar formato a los párrafos existentes, utilice cualquier variación del comando gq. Por ejemplo, usted podría:

  • Seleccionar un párrafo visually y escriba gq, o
  • Tipo gqj a re-wrap de la línea actual hasta el final del párrafo
+1

Sí, no siempre es automático, y es importante que no lo sea, a veces no desea que las líneas de un comentario se envuelvan, especialmente cuando se explican fragmentos de código con ejemplos, etc. el control manual vale la pena. – Peter

+0

@Rovpedal: vim * lo hace automáticamente cuando escribe. o tal vez solo como * I * tipo? ;) –

+0

lo hace la primera vez, pero si está editando texto previamente escrito, no lo vuelve a envolver. (que es bueno, IMO.) – Peter

Cuestiones relacionadas