2011-12-25 25 views
18

In GNU Emacs è presente una funzione per evidenziare parentesi corrispondenti in codice con lo stesso colore.Parentesi graffe corrispondenti in Emacs

Tuttavia, quando il codice racchiuso tra parentesi è molto lungo con diverse if annidate, questa funzione non è molto utile in quanto una delle parentesi non sarà visibile.

Dire che ho seguito,

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

} 

Se il mio cursore si trova sulla } brace Vorrei avere qualche caratteristica che mi consentano di salto/vedere il { brace, e poi, se soddisfatto, torna alla parentesi graffa } per qualsiasi futura codifica.

È possibile in Emacs?

+0

Vedere anche http://stackoverflow.com/questions/9845661/with-emacs-how-to-go-to-the-pairing-balancing-parentheses –

risposta

25

Questo è in realtà un binding molto standard: C-M-f e C-M-b per tornare indietro e in avanti per impostazione predefinita. Nella maggior parte delle modalità, C-M-f ti porterà in avanti alla parentesi corrispondente e C-M-b ti porterà indietro alla parentesi corrispondente. Questo funziona anche per cose come le virgolette, più o meno allo stesso modo.

Queste associazioni sono facili da ricordare se si utilizza già C-f e C-b per la navigazione. (Se non lo fai, dovresti.) Sono proprio come andare avanti e indietro di un personaggio sollevato a muoversi per espressione (che dipende dalla modalità).

+0

Esattamente quello che stavo cercando. Grazie! – smilingbuddha

+0

Penso che in caso di distanza sufficiente tra 2 parentesi, invece di visualizzare semplicemente il messaggio, o la navigazione, dovrebbe anche dividere lo schermo in 2 parti (con buffer duplicato nella 2a parte) e mostrare entrambe le parentesi. – aartist

1

backward-sexp è quello che uso. legato all'ESC-sinistra. Poi ESC-destra per tornare al punto in cui eri

+2

Nel mio caso (in modalità c) tali funzioni sono rispettivamente legato a MCf e MCb – Daimrod

1

La prima cosa che potrebbe aiutare è conoscere questa opzione, se non lo fai già: blink-matching-paren-distance. Se il sexp è molto grande allora è necessario aumentare il valore dell'opzione, altrimenti la corrispondenza paren si arrende troppo presto e mostra una mancata corrispondenza quando non c'è corrispondenza.

La seconda cosa che può aiutare è essere certi che blink-matching-paren e blink-matching-paren-on-screen sono entrambi non nil. Quindi, per vedere il delimitatore di apertura, elimina il delimitatore di chiusura e poi lo digita nuovamente. Quando lo inserisci, quello di apertura sarà reso evidente.

1

Prova mic paren che mostra il codice di parentesi corrispondente anche se trovato all'esterno della schermata attuale.

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

La <key> a Witch si associa questo comando alternare l'apertura e la parentesi graffa di chiusura se il punto è prima o dopo di esso, altrimenti inserire <key> (molto simile a "%" di vi)

Ho anche legano C-<key>-forward-sexp e C-S-<key> a backward-sexp così posso davvero rapidamente navigare attraverso le funzioni nel file.

Problemi correlati