Emacs 如何避免在使用第一个表达式时使用额外的空格字符
在使用Paredit时,我经常遇到以下问题(pipe char表示游标): 我想将Emacs 如何避免在使用第一个表达式时使用额外的空格字符,emacs,clojure,lisp,paredit,Emacs,Clojure,Lisp,Paredit,在使用Paredit时,我经常遇到以下问题(pipe char表示游标): 我想将条括在parens中,因此我使用paredit wrap-around(M-())来获得: (foo (|bar) baz) (foo "|bar" baz) 当我想将条放在字符串中时,同样适用,我可以使用M-,得到以下结果: (foo (|bar) baz) (foo "|bar" baz) 但是,Clojure也使用方括号[]和大括号{}来表示向量、映射和集合。这些似乎没有paredit“wrap-ar
条
括在parens中,因此我使用paredit wrap-around
(M-())来获得:
(foo (|bar) baz)
(foo "|bar" baz)
当我想将条放在字符串中时,同样适用,我可以使用M-,得到以下结果:
(foo (|bar) baz)
(foo "|bar" baz)
但是,Clojure也使用方括号[]
和大括号{}
来表示向量、映射和集合。这些似乎没有paredit“wrap-around”命令。因此,在这种情况下,例如,要将条放入向量中,我通常使用[键来创建新向量:
(foo [|] bar baz)
然后是一个编辑前向slurp sexp
(C-→), 其结果是:
(foo [| bar] baz)
我想删除在
栏
之前插入的空格字符。这可能吗?为什么paredit在从空表达式转换为包含一个项的表达式时保留空格字符?添加到S表达式的第一个项不应该总是紧靠开始的paren吗?paredit已经有一段时间了,hadparedit wrap curly
和paredit wrap square
。如果您想使用它们,只需将它们绑定到一个听起来很像的键上,就可以了。如果您使用的是一个旧版本的paredit,以至于这些函数不存在,那么您应该升级(但我认为您不需要,因为slurp命令可以使用它们).最新开发版本的paredit将M-[/code>绑定到paredit wrap square
,这正是您想要的。Emacs已经将M-{/code>绑定到后段
,但如果您从未使用过,您可以自定义paredit以隐藏它:
(eval-after-load 'paredit
'(progn
(define-key paredit-mode-map (kbd "M-{") 'paredit-wrap-curly)))
如果你想删除点周围的所有空格,你可以为删除水平空格键入M-\
,假设你可能会在新列表的开头添加其他内容。我想你可以使用C-和C-d组合。我必须提一提的是,paredit forward slurp
最新的paredit版本20130722.1324(来自MELPA)自动删除空格字符。因此,您可以按[C-
获取[bar]
。此外,[
绑定到paredit open square
,这是一个dwim命令:选择表达式并按[
会将该表达式包装成一个向量。所以按C-M-SPC[
是另一种方式。我使用后一种方式是因为它更直观,我可以改变主意选择两个表达式,并且我可以在autopair模式下的非lisp缓冲区和paredit模式下的lisp缓冲区之间保持相同的习惯。