Question

J'ai vu un plugin pour Vim appelé fermeture automatique . (découvert de this post) qui ajoute automatiquement l’accolade de fermeture lors de la saisie de '(', '' 'etc'.

Par exemple; lorsque je tape ce qui suit ( | est le curseur):

int main(|

J'aimerais que le ) final soit automatiquement inséré pour moi:

int main(|)

Est-ce que quelqu'un connaît une fonctionnalité similaire pour emacs - Google m'a échoué cette fois!

Était-ce utile?

La solution

Il existe également un 'paredit . La aide-mémoire affiche toutes les commandes disponibles. arriver à aimer ça mieux que le mode électrique suggéré dans une autre réponse. Bien que paredit ne s’applique qu’à (), il se peut qu’il ne réponde pas à vos besoins.

Mais, pour être honnête, de nombreux paquets entourent les parenthèses. Le wiki les répertorie tous répertoriés ici . Les modes répondant à votre question sont:

Autres conseils

oui, ce mode est appelé électrique . Vous pouvez combiner le comportement électrique avec cette macro simple pour un confort maximal:

(defun electric-pair ()
  "If at end of line, insert character pair without surrounding spaces.
   Otherwise, just insert the typed character."
  (interactive)
  (if (eolp) (let (parens-require-spaces) (insert-pair)) 
    (self-insert-command 1)))

Activez-le ensuite en y associant les caractères appropriés dans vos modes de programmation préférés. Par exemple, pour PythonMode:

(add-hook 'python-mode-hook
          (lambda ()
            (define-key python-mode-map "\"" 'electric-pair)
            (define-key python-mode-map "\'" 'electric-pair)
            (define-key python-mode-map "(" 'electric-pair)
            (define-key python-mode-map "[" 'electric-pair)
            (define-key python-mode-map "{" 'electric-pair)))

Le mode CPerl fournit cela en tant que fonction intégrée:

;; from my .emacs
(add-hook 'cperl-mode-hook
  (lambda ()
    (setq cperl-hairy nil
      abbrev-mode t     ;; automatic keyword expansion
      cperl-highlight-variables-indiscriminately t
      cperl-auto-newline t
      cperl-auto-newline-after-colon t
      cperl-regexp-scan nil
      cperl-electric-keywords t 
      cperl-electric-linefeed t  
      cperl-electric-parens nil) ;; <------ electric parens!

D'autres modes pourraient fournir quelque chose de similaire.

cmarcelo a écrit un merveilleux article à ce sujet utiliser le mode squelette. Il explique également comment supprimer le support équilibré si vous supprimez le support d'ouverture et comment traiter le cas où vous tapez accidentellement le support de fermeture. (Incidemment, les deux comportements copient TextMate).

Mise à jour:

Depuis que j'ai posté cette réponse, j'ai découvert Autopair , ce qui est plutôt parfait. système pour ce cas d'utilisation. Je l'utilise beaucoup et je l'adore.

Je vais necro ce fil et fournir une autre alternative. Un nouveau projet récemment lancé concerne l'insertion automatique de paires, l'encapsulation de régions, la navigation autour d'expressions équilibrées et bien plus encore. La liste des fonctionnalités est trop longue à donner ici, je vais donc simplement créer un lien vers le repo de github de smartparens où vous pouvez lire un fichier readme détaillé. .

Il est un super ensemble de l'AutoPair susmentionné et fournit la plupart des fonctionnalités de base de paredit (et est étendu à toutes sortes de paires différentes, pas seulement celles reconnues par les tables de syntaxe emacs).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top