2013-09-23 6 views
6

Supponiamo che io ho questo codicecome avvolgere le forme con una forma esterna già scritto in paredit

(hello world) 
(hi world) 

Poi mi viene in mente che avrei dovuto avvolgere che con la seguente forma:

(let (acc) 
    <> 
    (nreverse acc)) 

risultando in questo codice:

(let (acc) 
    (hello world) 
    (hi world) 
    (nreverse acc)) 

Ecco come di solito faccio la confezione. Prima scrivo una forma esterna incompleta prima che si formi essere-avvolto come questo:

(let (acc)) 
(hello world) 
(hi world) 

Poi premere C-) (paredit-forward-slurp-sexp) due volte per slurp cose:

(let (acc) 
    (hello world) 
    (hi world)) 

Poi ho finito con l'aggiunta (nreverse acc) alla fine.

Ora quello che mi chiedo è che cosa succede se ho iniziato scrivendo per prima cosa il modello di modulo esterno completo come questo?

(let (acc) 
    (nreverse acc)) 
(hello world) 
(hi world) 

o come questo

(hello world) 
(hi world) 
(let (acc) 
    (nreverse acc)) 

C'è una breve sequenza di paredit o non paredit comandi che posso premere per finire il lavoro da che iniziano?

Potrei spostare il punto, tagliare le due forme da avvolgere, spostare il punto, incollare i moduli. Ma mi chiedo se c'è un modo più conveniente.

Sono soddisfatto del modo in cui eseguo il wrapping, ma mi sembra che potrei mancare qualche altro trucchetto di editing che deve essere trovato da un inizio diverso.

+0

Se tutto fallisce, utilizzare una macro della tastiera. Puoi anche estendere il paredit per fare quello che vuoi. GNU Emacs è estensibile. –

risposta

7

Invece di utilizzare più volte paredit-forward-slurp-sexp o uccidere-yank'ing la regione, è possibile contrassegnare la regione di sexps per racchiudere e utilizzare paredit-wrap-roundM- (

Se fossi scrivendo il tuo esempio Vorrei iniziare con la ultima espressione:

(hello world) 
(hi world) 
(nreverse acc)_ 

C-SPCCMaCMa rendimenti C-M-aM- (:

(_(hello world) 
    (hi world) 
    (nreverse acc)) 

Inserire let (acc) e finire con RETC-M-hTAB a reindentify.

C'è probabilmente un modo migliore =), ma anche se non si utilizza transient-mark-mode puoi fornire altre opzioni di confezionamento:

  • Cu avvolge fino alla fine di tampone o la lista racchiude
  • Cu # avvolge le seguenti espressioni #

Vedere la docstring per paredit-wrap-sexp

+3

Questo. Si noti che semplicemente usando '(' quando la regione è attiva e quando 'transient-mark-mode' è abilitata otterrà la stessa cosa dell'uso di paredit-wrap-sexp'. Io lo uso, e rende le regioni di wrapping con parentesi naturale. –

1

Si potrebbe anche voler guardare redshank, un pacchetto emacs che fa un sacco di cose utili come questo. Funziona con paredit molto bene.

Problemi correlati