6

在使用 Paredit 时,我经常会遇到以下情况(管道字符表示光标):

(foo |bar baz)

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

(foo (|bar) baz)

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

(foo "|bar" baz)

然而,Clojure 也使用方括号[]和花括号{}来表示向量、映射和集合。这些似乎没有 paredit 'wrap around' 命令。所以在这种情况下,例如将 bar 放入向量中,我通常使用[键来创建一个新向量:

(foo [|] bar baz)

后跟一个paredit-forward-slurp-sexp( C-→</kbd>), which results in:

(foo [| bar] baz)

我想删除之前插入的空格字符bar。这可能吗?为什么 paredit 在从空表达式转换为包含一项的表达式时会保留空格字符?添加到 S 表达式的第一项不应该总是被推到左括号上吗?

4

2 回答 2

4

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

于 2013-06-30T23:32:51.577 回答
1

paredit 的最新开发版本M-[完全paredit-wrap-square符合您的要求。Emacs 已经将M-{is 绑定到backward-paragraph,但如果你从不使用它,你可以自定义 paredit 来隐藏它:

(eval-after-load 'paredit
  '(progn
     (define-key paredit-mode-map (kbd "M-{") 'paredit-wrap-curly)))

如果您想删除该点周围的所有空间,您可以随时输入M-\for delete-horizontal-space

于 2013-07-06T21:01:45.210 回答