6

假设我有这个代码

(hello world)
(hi world)

然后我想到我应该用以下形式包装它:

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

导致此代码:

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

这是我通常的包装方式。首先,我在要包装的表格之前写了一个不完整的外部表格,如下所示:

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

然后我按C-)( paredit-forward-slurp-sexp) 两次啜饮东西:

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

然后我(nreverse acc)在最后添加。

现在我想知道的是,如果我首先像这样编写完整的外部表单模板会怎样?

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

或者像这样

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

是否有一个简短的 paredit 或非 paredit 命令序列,我可以按这些命令从头开始完成工作?

我可以移动点,剪切两个要包装的表格,移动点,粘贴表格。但我想知道是否有更方便的方法。

我对我的包装方式很满意,但感觉我可能会错过一些其他巧妙的编辑技巧,这些技巧可以从不同的起点找到。

4

2 回答 2

7

paredit-forward-slurp-sexp您可以标记 sexps 的区域以封闭和使用,而不是重复使用或杀死该区域paredit-wrap-round M-(

如果我正在输入您的示例,我将从最后一个表达式开始:

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

C-SPC C-M-a C-M-a C-M-a M-(产量:

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

插入let (acc)并完成RET C-M-h TAB以重新识别。

可能有更好的方法 =),但即使您不使用transient-mark-mode,您也可以提供其他选项来包装:

  • C-u换行到缓冲区或封闭列表的末尾
  • C-u #包装以下#表达式

请参阅文档字符串paredit-wrap-sexp

于 2013-09-23T20:37:14.267 回答
1

您可能还想查看 redshank,这是一个 emacs 包,它做了很多类似这样的有用的事情。与 paredit 一起工作非常好。

于 2013-09-28T03:26:38.457 回答