2013-09-23 4 views
6

Angenommen, ich habe diesen Codewie Formen mit einem bereits geschrieben äußere Form in paredit wickeln

(hello world) 
(hi world) 

Dann ist es mir in den Sinn kommt, dass ich das mit dem folgenden Formular wickeln sollte:

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

Ergebnis in diesem Code:

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

Hier ist, wie ich normalerweise die Verpackung machen. Zuerst schreibe ich eine unvollständige äußere Form vor den zu-wickelte Formen wie folgt aus:

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

Dann drücke ich C-) (paredit-forward-slurp-sexp) zweimal schlürfen Dinge:

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

Dann beenden ich durch Hinzufügen (nreverse acc) am Ende.

Nun, was ich frage mich was ist, wenn ich begann, indem ich zuerst die vollständige äußere Formularvorlage so schreiben?

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

oder ähnliche

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

Gibt es eine kurze Sequenz von paredit oder nicht-paredit Befehle, die ich von dem Start den Job beenden drücken können?

Ich könnte Punkt verschieben, schneiden Sie die zwei zu umzuformenden Formen, Punkt verschieben, fügen Sie die Formulare. Aber ich frage mich, ob es einen bequemeren Weg gibt.

Ich bin zufrieden damit, wie ich die Verpackung mache, aber es fühlt sich so an, als ob mir einige andere nette Bearbeitungstricks fehlen würden, die von einem anderen Anfang her zu finden sind.

+0

Wenn alles fehlschlägt, verwenden Sie ein Tastaturmakro. Du könntest auch predigen, um zu tun was du willst. GNU Emacs ist erweiterbar. –

Antwort

7

Stattdessen wiederholt von paredit-forward-slurp-sexp oder kill-yank'ing der Region verwenden, können Sie die Region sexps markieren und paredit-wrap-roundM- (

Wenn ich, ich würde mit der Eingabe wurde Ihr Beispiel verwenden umschließen starten letzter Ausdruck:

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

C-SPCCMaCMaC-M-AM- ( ergibt:

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

Insert let (acc) und enden mit RETC-M-hTAB bis reindentify.

Wahrscheinlich gibt es einen besseren Weg, =), aber selbst wenn Sie nicht über transient-mark-mode verwenden können andere Optionen zur Verpackung liefern:

  • Cu Wraps bis zum Ende des Puffers oder Ende der Liste
  • Cu # folgenden # Ausdrücke

das docstring für paredit-wrap-sexp Siehe hüllt

+3

Dies. Beachten Sie, dass die einfache Verwendung von '(' wenn die Region aktiv ist und wenn 'transient-mark-mode' aktiviert ist, dasselbe erreicht, wie bei der Verwendung von 'paret-wrap-sexp'. Ich verwende es und umschließt Regionen mit Klammern natürlich. –

1

Sie könnten auch auf redshank, ein Emacs-Paket, das eine Reihe von nützlichen Dingen wie das tut. Funktioniert sehr gut mit parét.