2009-12-23 9 views
5

J'utilise généralement Geany ou Hi-Tide sous Debian (GNU/Linux) pour le développement de firmware, principalement en C (mais aussi en lecture de l'ancien assembleur). Je documente le code en utilisant des commentaires sur une seule ligne, et cela me gêne vraiment quand je retapais quelque chose et que je dois rouvrir manuellement chaque ligne suivante pour la garder dans la marge de 80 caractères.Editeur de texte avec habillage des commentaires

Existe-t-il un éditeur de texte qui peut réencapsuler des commentaires consécutifs d'une seule ligne (et le faire automatiquement pendant que je tape)? Ainsi, compte tenu:

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

... Je veux un éditeur qui remballer cela

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

... faire de préférence ce sensiblement pendant que je tape.

J'ai essayé:

  • Salut-Tide (basé sur Eclipse 3.3)
  • Geany
  • jEdit
  • UniversalIndentGUI + un tas de prettifiers (je ne pouvais pas trouver formatteurs que travaillé, et ce n'est pas un grand flux de travail non plus)
  • GVim - la ligne suivante commence //should have been ... au lieu de /// should have been ...

Mise à jour: juste pour élaborer ma réponse acceptée - Je suis allé avec le snapshot emacs et un filladapt mode était également nécessaire

Répondre

6

Dans Emacs, pour démarrer l'enrubannage automatique, entrez auto-fi ll-mode. Pour définir la largeur de ligne, exécutez C-u ⟨colonnes⟩ C-x f. Emacs, ou vraiment CC mode, prévoiront votre structure de commentaires, de sorte que la saisie /// Ceci est une ligne très longue que Shoul entraînera

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

Et vous pouvez remplir un paragraphe à tout moment avec Mq.

Si vous voulez faire des recharges automatiquement à chaque pression de touche, bien il peut bien y avoir une commande interal ou d'une bibliothèque tiers là-bas, mais hors main vous pouvez utiliser ce code 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))) 

Cette n'est probablement pas très robuste ou conforme aux meilleures pratiques, et probablement pas totalement satisfaisant, car il ne fonctionnera pas pour l'édition générale, par exemple C-d et retour arrière, et il ralentit un peu l'éditeur, mais c'est un début.

+0

Comment est-ce que je le remplis automatiquement par défaut? J'ai ajouté "(setq-default fill-column 55)" et "(add-hook 'cc-mode-hook' tour-sur-auto-remplir)" à mon .emacs, et ... rien. – detly

+0

Ce n'est pas le nom du hook. C'est 'c-mode-hook'. http://cc-mode.sourceforge.net/html-manual/CC-Hooks.html#CC-Hooks –

+1

Excellent, ça marche. Je vais essayer plus complètement emacs ... – detly

6

certainement Vim supplémentaire peut faire.

Tout d'abord, vous devez assigner cette « /// » est un comment prefix (il est pas par défaut):

:set comments^=:/// 

Si vous voulez enroulant de se produire-vous de type, définissez votre textwidth préféré:

:set textwidth=80 

Pour formater les paragraphes existants, utilisez une variante de la commande gq. Par exemple, vous pouvez:

  • Sélectionnez un paragraphe visually et tapez gq ou
  • type gqj à réencapsulage de la ligne courante jusqu'à la fin du paragraphe
+1

oui, ce n'est pas toujours automatique, et c'est important que ce ne soit pas le cas. Parfois, vous ne voulez pas que les lignes d'un commentaire s'enroulent, surtout quand vous expliquez des bits de code avec des exemples. – Peter

+0

@Rovpedal: vim * le fait * automatiquement lors de la frappe. ou peut-être juste comme * I * type? ;) –

+0

il le fait la première fois, mais si vous modifiez un texte déjà écrit, il ne le réenveloppe pas. (qui est bon, OMI.) – Peter