如何用paredit中已经写好的外部表单来包装表单

Jis*_*Yoo 6 lisp emacs paredit

假设我有这个代码

(hello world)
(hi world)
Run Code Online (Sandbox Code Playgroud)

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

(let (acc)
  <>
  (nreverse acc))
Run Code Online (Sandbox Code Playgroud)

导致此代码:

(let (acc)
  (hello world)
  (hi world)
  (nreverse acc))
Run Code Online (Sandbox Code Playgroud)

这是我通常做包装的方式.首先,我在待包装的表单之前写一个不完整的外部表单,如下所示:

(let (acc))
(hello world)
(hi world)
Run Code Online (Sandbox Code Playgroud)

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

(let (acc)
  (hello world)
  (hi world))
Run Code Online (Sandbox Code Playgroud)

然后我(nreverse acc)在最后添加完成.

现在我想知道如果我开始首先编写这样的完整外部表单模板?

(let (acc)
  (nreverse acc))
(hello world)
(hi world)
Run Code Online (Sandbox Code Playgroud)

或者像这样

(hello world)
(hi world)
(let (acc)
  (nreverse acc))
Run Code Online (Sandbox Code Playgroud)

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

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

我对如何进行包装感到满意,但感觉我可能会错过一些其他整齐的编辑技巧,这些技巧可以从不同的开始找到.

ass*_*sem 7

paredit-forward-slurp-sexp您可以将性别区域标记为封闭和使用,而不是反复使用或杀死该区域paredit-wrap-round M-(

如果我输入你的例子,我会从最后一个表达开始:

(hello world)
(hi world)
(nreverse acc)_
Run Code Online (Sandbox Code Playgroud)

C-SPC C-M-a C-M-a C-M-a M-( 收益率:

(_(hello world)
  (hi world)
  (nreverse acc))
Run Code Online (Sandbox Code Playgroud)

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

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

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

请参阅docstring paredit-wrap-sexp

  • 这个.注意,简单地使用`(`当区域处于活动状态并且何时启用`transient-mark-mode`将实现与使用`paredit-wrap-sexp`相同的功能.我使用它,它使包裹区域具有括号感觉自然. (3认同)