gpt4 book ai didi

emacs - 如何在 paredit 中用已经写好的外部形式包装形式

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:31 25 4
gpt4 key购买 nike

假设我有这段代码

(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 命令可以让我从一开始就完成工作?

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

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

最佳答案

与其重复使用 paredit-forward-slurp-sexp 或 kill-yank'ing 区域,您可以标记要包围的 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 的文档字符串

关于emacs - 如何在 paredit 中用已经写好的外部形式包装形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18966899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com