使用Paredit包装现有表达式

时间:2013-01-05 09:25:40

标签: emacs clojure lisp paredit

我在Pareit模式下使用Emacs获取Lisp代码。

我正在尝试在println中包装一个函数调用:

(square 5)
(println (square 5))

paredit最终发生了什么:

(square 5)
(println) (square 5)

我无法删除println的关闭数据并将其移至最后。

我现在这样做的方式是: 1.删​​除函数调用并在println中将其拉出 2.在没有paren的情况下写println,直观地选择代码并用parens括起来

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

这两种方法都很繁琐。这似乎是我在Paredit内部编写代码时常见的问题。任何帮助将不胜感激

7 个答案:

答案 0 :(得分:8)

paredit-wrap-round命令可能有帮助(绑定到M-(在我使用的paredit版本中)。

答案 1 :(得分:6)

与其他答案相反,我倾向于使用Ctrl-Right:在你获得

之后
(println|) (square 5)

(其中|是光标所在的位置),我只需按Ctrl-Right即可得到正确的结果。

答案 2 :(得分:5)

米 - (

您可以致电paredit-insert-html-examples以生成HTML网页备忘单。一个版本是here

答案 3 :(得分:2)

在您的情况下,解决方案为M-2 M-(M-( C-)

答案 4 :(得分:1)

有几种方法可以做到这一点。我通常这样做的方式是

“(”

让你

()的println

然后C-S-)让你

(的println)

使用paredit开始的最佳方法是将paredit cheatsheet放在一张贴在显示器侧面的纸上。或者,您也可以安装paredit-menu,其中添加了一个菜单项,其工具提示显示了cheetsheet所做的相同示例。

答案 5 :(得分:1)

以逐步进展的方式围绕正方形形式包装打印表单的三种方法。 (其他答案中已经提到了三种方式)

(1)Cut&类型&糊

(+ (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)type& 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)包装&型

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

Cut&类型&粘贴是最乏味的。它不依赖于paredit,并且最容易推广到围绕多个内部形式包裹复杂外形的情况,这些内部形式可能是多行格式,例如,转动

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

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

将mapc-over-lambda形式包裹在两个oink附近。

Type& slurf似乎是最知名的。它也可以推广到mapc-over-lambda案例。

Wrap&类型是最容易键入的类型。当你将它推广到map-over-lambda的情况时,你选择两个oinks,然后按(来包装它,并完成写lambda表单,并选择lambda表单,按(换行它,键入mapc,您可以使用CMf跨越lambda表单并键入(list 1 2 3)。

答案 6 :(得分:0)

我使用M-C-(,它会立即将下面的性别包裹在parens中。