Je viens de commencer à utiliser Emacs, et il y a une fonctionnalité que j'aimerais vraiment, et la recherche autour d'un peu était infructueuse. J'espère que quelqu'un d'autre l'a fait parce que je ne veux pas apprendre Elisp tout simplement. J'aimerais taper un "{" pour que cela arrive p> void foo(){
<cursor>
}
7 Réponses :
try Yasnippet (ou sur la page Wiki EMACS Yasnippet ). Il existe de nombreux forfaits pour EMACS qui soutiennent ce genre de chose, mais Yasnippet semble avoir de l'élan actuellement et est très extensible. Découvrez les vidéos. P>
Cela ne semble pas être idéal, j'ai besoin d'appuyer sur Tab pour l'agrandir et cela ne fonctionne pas s'il n'y a pas d'espace entre le "{" et tout ce qui est saisi.
Vous pouvez probablement modifier le modèle pour supprimer l'espace. La modification / la création de modèles est assez facile.
Vous devrez approfondir avec Emacs-Lisp pour le faire exactement comme vous le souhaitez, car Yasnippet fera quelque chose de gentil pour vous, mais pas exactement ce que vous demandez. P>
Je pense que le moyen le plus simple de le faire serait de lier une fonction à la touche RET kbd>, dans la touche CC-Mode. P>
La fonction doit vérifier que le caractère précédent est un { strong> et, le cas échéant, exécutez le RET kbd>, res kbd>, Onglet kbd>, } strong>, up kbd>, onglet kbd> pour obtenir le curseur où vous voulez et la fermeture Vous pouvez rendre la fonctionnalité plus robuste en le permettant de vérifier une fermeture équilibrée Si vous aimez, je peux écrire la fonction et la fixation de la carte de la clé pour vous, mais que vous avez demandé une idée de la façon dont cela est fait, je vous laisserai à vous de demander plus d'aide si vous en avez besoin. p>
Alternativement, je trouve que autopair.el strong> le fait-il assez bien pour moi, et je fais moi-même des lignes neuves;) p>
c'est ce que je pensais. Y a-t-il un moyen facile de, à l'intérieur de la fonction LISP, vérifiez si je suis dans un commentaire / chaîne et si je suis à la fin de la ligne? Je sais que le mode CC le fait en interne et cela rendrait cela vraiment facile si je pouvais simplement l'utiliser.
Vous pouvez utiliser Chose-A-point pour déterminer quel contexte vous êtes dans.
Je vous recommande d'essayer d'essayer l'excellent Autopair Mode mineur - il fait beaucoup Plus que simplement insérer des accolades et fabrique des eMacs beaucoup plus d'IDE comme dans cette zone. Je suppose que la combinaison avec le paramètre d'accolades électriques en mode CC vous donnera plus ou moins le comportement que vous recherchez. P>
Cela le fera:
(defun my-c-mode-insert-lcurly () (interactive) (insert "{") (let ((pps (syntax-ppss))) (when (and (eolp) (not (or (nth 3 pps) (nth 4 pps)))) ;; EOL and not in string or comment (c-indent-line) (insert "\n\n}") (c-indent-line) (forward-line -1) (c-indent-line)))) (define-key c-mode-base-map "{" 'my-c-mode-insert-lcurly)
sur les derniers EMACS, vous pouvez utiliser:
electric-pair-mode is an interactive compiled Lisp function. (electric-pair-mode &optional ARG) Automatically pair-up parens when inserting an open paren.
Vous voudrez peut-être conserver l'option d'un organe de fonction vide, auquel cas vous voudrez que la corse de fermeture reste sur la même ligne. Si tel est le cas, vous pouvez essayer cette solution alternative:
Lorsque vous souhaitez ajouter des instructions à l'organisme de fonction, vous appuyez sur la touche CODE> RETURN > (lorsque l'attelle de fermeture ajoutée automatiquement est toujours sous le curseur). La touche "retour" est liée comme suit: P>
;; automatic first line in function (defun my-c-mode-insert-funline () (interactive) (newline-and-indent) (when (looking-at "}") (newline-and-indent) (forward-line -1) (c-indent-line))) (global-set-key (kbd "RET") 'my-c-mode-insert-funline)
Activer le mode paire électrique dans EMACS 24 ou version plus récente.
(electric-pair-mode 1)
Je pense que c'est duplicata de Stackoverflow.com/Questtions/1023770 / ...
J'ai examiné cette question, mais c'était à propos de l'ajout de la parenthèse de fermeture / BRACE / etc. Je veux que cela newline deux fois, indentez et repositionnez le curseur à la ligne vide aussi