Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 如何避免在使用第一个表达式时使用额外的空格字符_Emacs_Clojure_Lisp_Paredit - Fatal编程技术网

Emacs 如何避免在使用第一个表达式时使用额外的空格字符

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

在使用Paredit时,我经常遇到以下问题(pipe char表示游标):

我想将
括在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已经有一段时间了,had
paredit 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缓冲区之间保持相同的习惯。