2013-01-05 6 views
5

Ich verwende Emacs im Payment-Modus für Lisp-Code.Verwenden von Payment zum Umbrechen eines vorhandenen Ausdrucks

Ich versuche, einen Funktionsaufruf in println einzuwickeln:

(square 5) 
(println (square 5)) 

Was in paredit am Ende passiert ist folgendes:

(square 5) 
(println) (square 5) 

Es gibt keine Möglichkeit i Schließen paren von println löschen und verschiebe es bis zum Ende.

Die Art, wie ich es jetzt tue, ist: 1. Funktionsaufruf löschen und zerren sie in println 2. Schreib println ohne paren, visuell wählen Sie Code und fügen in Pars

(square 5) 
println (square 5) 
=> select block of code and type (
(println (square 5)) 

Beide Diese Ansätze sind mühsam. Dies scheint ein häufiges Problem zu sein, wenn ich in Pa - redit Code schreibe. Jede mögliche Hilfe würde

+1

Sie würden wahrscheinlich das kurze [Handbuch] (http://mumble.net/~campbell/emacs/paredit.html) lesen, anstatt Fragen zu Funktionen zu stellen, die gut dokumentiert sind. –

Antwort

6

paredit-wrap-round Befehl helfen können (gebunden an M- (in der paredit Version ich verwende).

+0

M- (Ergebnisse in (println) (Quadrat 5) wenn ich println zuerst schreibe. Ich habe gerade festgestellt, dass ich zuerst umwickeln muss und dann println eingeben, was nicht natürlich ist. Danke! – Sathish

+0

Wrapping den Parameter vor dem Hinzufügen der Funktionsaufruf ist völlig natürlich, sobald Sie sich daran gewöhnt haben, Lisp zu schreiben –

5

M- (

geschätzt werden können Sie paredit-insert-html-examples rufen eine HTML-Webseite Spickzettel zu erzeugen. Eine Version here ist.

2

In Ihrem Fall ist die Lösung M-2 M-( oder M-(C-).

4

Im Gegensatz zu den anderen Antworten, neige ich dazu, Ctrl-Right für diesen Einsatz: Nachdem Sie

(println|) (square 5) 

erhalten (wo | sind, wo der Cursor ist), habe ich einfach drücken Sie Strg-Recht das richtige Ergebnis zu erhalten.

+0

Meinst du C -), C-Richtig? – Sathish

+0

In der neuesten Version C-rechts funktioniert auch. –

0

Ich benutze MC- (, die die folgende sexp in Pars sofort wickeln.

1

Es gibt mehrere Möglichkeiten, dies zu tun. Die Art und Weise, dass ich dies normalerweise zu tun ist, geben Sie

„(“

, die Sie

() println

und dann CS-), die

01 bekommt man bekommt

(println)

Der beste Weg, um parate zu starten, ist das parate cheatsheet auf einem Stück Papier, das an der Seite des Monitors hängt. Oder Sie können auch ein Para-Menü installieren, das einen Menüpunkt mit Tooltips hinzufügt, die dieselben Beispiele wie das Cheesheet zeigen.

1

Drei Möglichkeiten, um ein Druckformular schrittweise um eine quadratische Form zu wickeln.(Zwei Arten der drei bereits in anderen Antworten erwähnt)

(1) Schneiden & Typ & Paste

(+ (square 3) 4) 
;;; make sure cursor is at right place (| is cursor) 
(+ |(square 3) 4) 
;;; mark-sexp and kill-region 
(+ | 4) 
;;; type the print form and make sure cursor is at right place 
(+ (print |) 4) 
;;; paste 
(+ (print (square 3)) 4) 

(2) Typ & slurf

(+ (square 3) 4) 
;;; make sure cursor is at right place (| is cursor) 
(+ |(square 3) 4) 
;;; type the print form and make sure cursor is at right place 
(+ (print|) (square 3) 4) 
;;; paredit-forward-slurp-sexp 
(+ (print (square 3)) 4) 

(3) umhüllen & Typ

(+ (square 3) 4) 
;;; make sure cursor is at right place (| is cursor) 
(+ |(square 3) 4) 
;;; paredit-wrap-round 
(+ (|(square 3)) 4) 
;;; type print 
(+ (print (square 3)) 4) 

Schnitt & Typ & Paste ist die langweiligste. Es hängt nicht von paredit und ist am einfachsten zu Fall Einwickeln eine komplexe äußeren Form um mehr als eine inneren Formen zu verallgemeinern, die in mehrzeiligen Format sein können, beispielsweise

(let ((x 1)) 
    (moo) 
    (oink) 
    (oink)) 

in

drehen
(let ((x 1)) 
    (moo) 
    (mapc (lambda (x) 
      (oink) 
      (oink)) 
     (list 1 2 3))) 

durch Umwickeln einer Mapc-over-Lambda-Form um zwei Oinks.

Typ & Slur scheint am bekanntesten zu sein. Es kann auch für den Mapc-über-Lambda-Fall verallgemeinert werden.

Wrap & Typ ist am einfachsten zu tippen. Wenn Sie dies auf den Map-over-Lambda-Fall verallgemeinern, wählen Sie zwei Oinks aus und drücken (, um es zu umbrechen und das Lambda-Formular fertig zu schreiben. Wählen Sie das Lambda-Formular, drücken Sie (, um es zu umbrechen, geben Sie mapc ein, und Sie können Verwenden Sie CMf, um die Lambda-Form zu kreuzen und zu tippen (Liste 1 2 3).

Verwandte Themen