2011-12-25 12 views
18

En GNU Emacs hay una función para resaltar los paréntesis coincidentes en el código con el mismo color.Fósforos coincidentes en Emacs

Sin embargo, cuando el código que encierran los corchetes es realmente largo con varios ifs anidados para etc., esta característica no es realmente útil ya que uno de los corchetes no será visible.

Decir que tengo la siguiente,

for(int i=0; i< N; ++i) 
{ 
    /*Long code*/ 

} 

Si mi cursor está en la } corsé me gustaría tener alguna característica que permitirá que salte/ver el corsé {, y luego, si está satisfecho, Vuelva al } corsé para cualquier codificación futura.

¿Es esto posible en Emacs?

+0

Véase también http://stackoverflow.com/questions/9845661/with-emacs-how-to-go-to-the-pairing-balancing-parentheses –

Respuesta

25

Esto es en realidad una unión muy estándar: C-M-f y C-M-b para retroceder y avanzar de forma predeterminada. En la mayoría de los modos, C-M-f lo llevará hacia adelante al corsé correspondiente y C-M-b lo llevará hacia atrás al corsé correspondiente. Esto también funciona para cosas como citas, más o menos de la misma manera.

Estas fijaciones son fáciles de recordar si ya usa C-f y C-b para la navegación. (Si no lo haces, deberías). Son como moverse hacia adelante y hacia atrás por un personaje levantado para moverse por la expresión (que depende del modo).

+0

Exactamente lo que estaba buscando. ¡Gracias! – smilingbuddha

+0

Creo que en caso de una distancia suficiente entre 2 llaves, en lugar de simplemente mostrar el mensaje, o la navegación, 'debería' también dividir la pantalla en 2 partes (con la memoria intermedia duplicada en la 2 ª parte) y mostrar ambas llaves. – aartist

1

backward-sexp es lo que uso. obligado a ESC-izquierda. Luego, ESC-derecha para volver a donde estaba

+2

En mi caso (en modo c) esas funciones son respectivamente obligado a MCf y MCb – Daimrod

1

Lo primero que podría ayudar es conocer esta opción, si aún no lo hizo: blink-matching-paren-distance. Si el sexp es muy grande, entonces necesita aumentar el valor de la opción, o de lo contrario el emparejamiento con paren se da por terminado demasiado pronto y muestra una falta de coincidencia cuando no hay discrepancia.

Lo segundo que puede ayudar es asegurarse de que blink-matching-paren y blink-matching-paren-on-screen no son ambos nil. Luego, para ver el delimitador de apertura, simplemente elimine el delimitador de cierre y luego vuelva a escribirlo. Cuando lo inserte, la apertura se hará evidente.

1

Pruebe mic paren que muestra el código de paréntesis correspondiente incluso si se encuentra fuera de la pantalla actual.

1
(defun px-match-paren (arg) 
    "Go to the matching paren if on a paren; otherwise insert <key>." 
    (interactive "p") 
    (cond 
    ((char-equal 41 (char-before)) (backward-list 1)) 
    ((char-equal 125 (char-before)) (backward-list 1)) 
    ((and 
    (char-equal 123 (char-before)) 
    (char-equal 10 (char-after))) 
    (backward-char 1) (forward-list 1)) 
    ((looking-at "\\s\(") (forward-list 1)) 
    ((looking-at "\\s\)") (backward-list 1)) 
    (t (self-insert-command (or arg 1))))) 

El <key> to Witch que ates este comando alternar apertura y llave de cierre si el punto está antes o después de ella, de lo contrario insertar <key> (al igual que de vi "%")

que también se unen C-<key> a forward-sexp y C-S-<key> a backward-sexp para que pueda navegar rápidamente por las funciones en el archivo.

Cuestiones relacionadas