2009-06-21 22 views
23

que he visto un plugin para Vim llamados AutoClose (descubierto de this post) que añade automáticamente la llave de cierre al escribir '(', '{' etc.llaves de cierre automático en Emacs?

Por ejemplo; cuando escriba los siguientes (| es el cursor):

int main(| 

me gustaría que el cierre ) que se inserta automáticamente para mí:

int main(|) 

¿alguien sabe de un sim Característica similar para emacs: ¡Google me ha fallado esta vez!

Respuesta

13

También hay 'paredit. El cheat sheet le muestra todos los comandos disponibles. le gusta más que el modo eléctrico sugerido en otra respuesta. Aunque el crédito solo se aplica a(), puede que no satisfaga sus necesidades.

Pero, para ser sincero, hay un montón de paquetes que rodean paréntesis. La wiki los tiene a todos listed here. Los modos de direccionamiento su pregunta son:

+3

Vea también http://www.emacswiki.org/emacs/AutoPairs. –

+0

Y qué pasa si necesito algo más ... Muchos editores tienen características que cierran automáticamente, p. etiquetas html y, además, inserte una línea vacía entre ellas y realice la sangría adecuada. ¿Cómo puedo lograr esto en emacs? – jesper

+1

@jesper Es posible que algunos de los modos enumerados ya hagan lo que usted desea. Para asegurarse de que el modo más general, yasnippet (http://www.emacswiki.org/emacs/Yasnippet) puede hacer lo que quiera. No es realmente un modo de equilibrio entre paréntesis, así que no lo agregaré a la respuesta, pero puede hacer lo que me pides. –

15

sí, this mode is called electric. Puede combinar el comportamiento eléctrico con este sencillo macro para el máximo confort:

(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))) 

continuación, habilitarlo mediante la unión de los caracteres correspondientes a la misma en sus modos de programación favoritos. Por ejemplo, para 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))) 

El modo CPerl proporciona esto como una orden interna:

;; 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! 

Otros modos podían proporciona algo similar.

+6

El 'electric-pair-mode' ha sido construido en emacs 24 y puede ser utilizado por' (electric-pair-mode 1) '. [enlace] (http://ergoemacs.org/emacs/emacs_insert_brackets_by_pair.html). – liuminzhao

+0

modo eléctrico no cierra comillas simples y llaves. De todos modos para habilitar eso? –

+0

Solo M-x personaliza el grupo 'electricidad' y busca 'pares de pares eléctricos'. Pero ten en cuenta que configurarlo, independientemente de tu modo principal, puede ser imprudente, por ejemplo, en el modo de texto; otros modos principales generalmente proporcionan personalización, es decir. La comilla simple de Python funciona como se espera (agrega la que termina)). – bubak

5

cmarcelo tiene written a wonderful post about this usando el modo esqueleto. También muestra cómo quitar el soporte equilibrado si elimina el soporte de apertura y cómo lidiar con el caso de que accidentalmente escriba el corchete de cierre. (Por cierto, ambos comportamientos copian TextMate).

Actualización:

Desde que he publicado esta respuesta, he descubierto Autopair que es un sistema casi perfecto para este caso de uso. Lo he estado usando mucho y me encanta.

+0

+1 para autopair. –

+0

autopair no cierra comillas simples ni llaves. De todos modos para habilitar eso? –

+0

@VineetKaushik Depende del modo en que estés usando el autopair. Funciona bien en el modo Python. Tal vez estás usando un modo en el que no se consideran pares. ¿Puedes dar más detalles sobre lo que estás haciendo? – Singletoned

5

Voy a necro este hilo y proporcionaré otra alternativa. Recientemente se inició un nuevo proyecto que se ocupa de la inserción automática de pares, el ajuste de regiones, la navegación en torno a expresiones equilibradas y mucho más.La lista de funciones es demasiado larga para dar aquí, así que solo vincularé al smartparens github repo donde puede leer el archivo Léame detallado.

Es un superconjunto del AutoPair mencionado anteriormente y proporciona la mayoría de las características principales de paredit (y se extiende a todo tipo de pares diferentes, no solo aquellos reconocidos por las tablas de sintaxis de emacs).

Cuestiones relacionadas