【发布时间】:2013-06-30 22:51:46
【问题描述】:
在使用 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-→),结果为:
(foo [| bar] baz)
我想删除在bar 之前插入的空格字符。这可能吗?为什么 paredit 在从空表达式转换为包含一项的表达式时会保留空格字符?不应该总是将添加到 S 表达式的第一个项目推到左括号上吗?
【问题讨论】:
-
假设您可能会将其他内容放在新列表的开头。我想你可以使用 C-
和 C-d 的组合。 -
我必须提到,最新的 paredit 版本 20130722.1324(来自 MELPA)中的
paredit-forward-slurp-sexp会自动删除空格字符。所以你可以按[ C-)得到[bar]。此外,[绑定到paredit-open-square,这是一个 dwim 命令:选择一个表达式并按下[将将该表达式包装到一个向量中。所以按C-M-SPC [是另一种方式。我使用后一种方式,因为它更直观,我可以改变主意来选择两个表达式,并且我可以在自动配对模式下的非 lisp 缓冲区和 paredit 模式下的 lisp 缓冲区之间保持相同的习惯。
标签: emacs clojure lisp paredit