6

我在 Paredit 模式下使用 Emacs 来处理 Lisp 代码。

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

(square 5)
(println (square 5))

paredit 中最终发生的事情是这样的:

(square 5)
(println) (square 5)

我无法删除 println 的结束括号并将其移至末尾。

我现在这样做的方式是: 1. 删除函数调用并在 println 中拉出它 2. 不带括号编写 println,直观地选择代码并用括号括起来

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

这两种方法都很乏味。每当我在 Paredit 中从里到外编写代码时,这似乎都是一个常见问题。任何帮助,将不胜感激

4

7 回答 7

8

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

于 2013-01-05T09:40:10.543 回答
6

与其他答案相比,我倾向于为此使用 Ctrl-Right:在你得到

(println|) (square 5)

|光标在哪里),我只需按 Ctrl-Right 即可获得正确的结果。

于 2013-01-05T14:34:42.733 回答
5

M-(

您可以调用paredit-insert-html-examples生成 HTML 网页备忘单。一个版本在这里

于 2013-01-05T09:38:57.363 回答
2

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

于 2013-01-05T11:00:06.670 回答
2

逐步将打印表单包裹在方形表单上的三种方法。(其他答案中已经提到了这三种方式中的两种)

(1) 剪切&打字&粘贴

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

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

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

进入

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

通过在两个 oink 周围包裹一个 mapc-over-lambda 形式。

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

Wrap & type 是最容易输入的。当您将其推广到 map-over-lambda 情况时,您选择两个 oink,然后按(将其换行,并完成 lambda 形式的编写,然后选择 lambda 形式,按(将其换行,键入 mapc,您可以使用 CMf跨越 lambda 形式和类型(列表 1 2 3)。

于 2013-06-20T07:35:48.657 回答
1

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

"("

这让你

()println

然后是 CS-) 这让你

(打印)

开始使用 paredit 的最佳方法是将一张纸上的 paredit 备忘单贴在显示器的一侧。或者,您也可以安装 paredit-menu,它添加一个带有工具提示的菜单项,显示与 cheetsheet 相同的示例。

于 2013-01-06T14:28:12.990 回答
0

我使用 MC-(,它将立即将以下 sexp 包装在括号中。

于 2013-01-05T23:31:02.493 回答