【问题标题】:How to avoid extra space character when slurping first expressionslurping第一个表达式时如何避免多余的空格字符
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      相关资源
      最近更新 更多