web-dev-qa-db-fra.com

COMMENTAIRE EMACS / SUSENT COURANT COURANT

Je sais qu'il y a déjà une question d'Emacs à ce sujet et que c'était fermé, mais je le trouve assez pertinent et important.

Fondamentalement, je veux commenter/déconner la ligne actuelle. Je m'attendais à ce que cela soit assez facile avec une macro, mais j'ai constaté que ce n'est vraiment pas.

Si la ligne actuelle est commentée, se détachent. S'il est non motivé, commencez-le. Et je voudrais aussi commenter toute la ligne, pas seulement de la position du curseur.

J'ai essayé une macro comme ceci:

C-a

'comment-dwim

Mais cela ne fonctionne que pour commenter une ligne, non pas trop transformer, si cela a déjà été commenté.

Je ne suis pas sûr de ce que c'est facile, mais s'il y en a une façon, j'aimerais vraiment ça.

En outre, la raison pour laquelle j'aime cette idée est tellement que lorsque j'ai utilisé Geany, je viens d'utiliser C-e Et c'était parfait.

43
David Gomes

Essayez cette fonction et liez votre clé préférée:

(defun toggle-comment-on-line ()
  "comment or uncomment current line"
  (interactive)
  (comment-or-uncomment-region (line-beginning-position) (line-end-position)))
40
Trey Jackson

La fonction de Trey fonctionne parfaitement, mais ce n'est pas très flexible.

Essayez cela à la place:

(defun comment-or-uncomment-region-or-line ()
    "Comments or uncomments the region or the current line if there's no active region."
    (interactive)
    (let (beg end)
        (if (region-active-p)
            (setq beg (region-beginning) end (region-end))
            (setq beg (line-beginning-position) end (line-end-position)))
        (comment-or-uncomment-region beg end)))

Il commente/décrit la ligne actuelle ou la région si l'une est active.


Si vous préférez, vous pouvez modifier la fonction pour passer à la ligne suivante après (ONU) en commentant la ligne actuelle comme celle-ci:

(defun comment-or-uncomment-region-or-line ()
    "Comments or uncomments the region or the current line if there's no active region."
    (interactive)
    (let (beg end)
        (if (region-active-p)
            (setq beg (region-beginning) end (region-end))
            (setq beg (line-beginning-position) end (line-end-position)))
        (comment-or-uncomment-region beg end)
        (next-line)))

Notez que seule la chose qui change est l'ajout next-line commande à la fin de la fonction.

95
Gerstmann

J'ai pris la réponse de Trey et l'a raffiné, de sorte qu'il fonctionne également lorsqu'une région est active, mais travaille ensuite sur cette région:

(defun comment-or-uncomment-line-or-region ()
  "Comments or uncomments the current line or region."
  (interactive)
  (if (region-active-p)
      (comment-or-uncomment-region (region-beginning) (region-end))
    (comment-or-uncomment-region (line-beginning-position) (line-end-position))
    )
  )

(define-key c-mode-base-map (kbd "C-/") 'comment-or-uncomment-line-or-region)
11
Arne

Je suis surpris que comment-region La routine n'a pas été mentionnée. (Bien que je concède, cela peut indiquer que j'ai manqué quelque chose.) J'ai eu la ligne suivante dans mon fichier .emacs pour la meilleure partie de 20 ans. Cela fonctionne bien dans la plupart des grands modes de programmation que je me soucie.

(global-set-key "\C-c\C-c" 'comment-region)

Des documents de 'commentaires-région'

Documentation: Commentaire ou Définissez chaque ligne dans la région. Avec Just C-U Prefix Arg, décotez chaque ligne dans la région. Le préfixe numérique arg argore signifie utiliser les caractères de commentaire Arg. Si ARG est négatif, supprimez plutôt que de nombreux personnages de commentaire à la place. Les commentaires sont terminés sur chaque ligne, même pour la syntaxe dans laquelle Newline ne met pas fin au commentaire. Les lignes vides ne reçoivent pas de commentaires.

3
Michael Wilson