如何在第一个表达式啜食时避免额外的空格特征

joe*_*ohn 6 lisp emacs clojure paredit

当使用Paredit时,我经常面对以下内容(管道char代表游标):

(foo |bar baz)
Run Code Online (Sandbox Code Playgroud)

我想bar用parens 括起来,所以我用paredit-wrap-around(M- ()得到这个:

(foo (|bar) baz)
Run Code Online (Sandbox Code Playgroud)

当我想把bar放在一个字符串中时,同样适用,我可以使用M- "得到这个:

(foo "|bar" baz)
Run Code Online (Sandbox Code Playgroud)

但是,Clojure还使用方括号[]和花括号{}来表示矢量,地图和集合.这些似乎没有一个paredit'环绕'命令.所以在这种情况下,例如将bar放入向量中,我通常使用[键来创建一个新向量:

(foo [|] bar baz)
Run Code Online (Sandbox Code Playgroud)

然后是paredit-forward-slurp-sexp(C- ),结果是:

(foo [| bar] baz)
Run Code Online (Sandbox Code Playgroud)

我想删除之前插入的空格字符bar.这可能吗?为什么paredit在从空表达式转换为包含一个项目的表达式时会保留空格char?不应该将第一个添加到S表达式的项目一直推到开头位置吗?

ama*_*loy 4

Paredit 在很长一段时间里一直拥有paredit-wrap-curlyparedit-wrap-square。如果您想使用它们,只需将它们绑定到一个听起来可能的键上,然后就可以使用它们了。如果您使用的是旧版本的 paredit 以至于这些函数不存在,您应该升级(但我认为您不需要升级,因为 slurp 命令可以使用它们)。