防止paredit在插入括号时插入空格 - 以及其他问题

时间:2012-06-21 09:30:29

标签: emacs paredit

我喜欢paredit。但是有一些我讨厌的东西,还没有解决它们:

  • 打开括号会在括号前插入空格。我知道这可能是整个互联网的首选风格,但它不是我的。怎么能避免这个?
  • 当在引用区域('')内时,我无法进行反向删除。此外,键入双引号(")将插入一个反斜杠(显然是为了逃避双引号 - 只是不需要这样,至少在python中。所以我不想反斜杠。如何配置这个?
  • 实际上,paredit尝试(并且失败)与退格相关非常明智。我的退格应该总是删除前一个字符,无论我是否在未完成的引用区域(如果引号不匹配,paredit只是拒绝执行任何操作。尝试在此处删除:"helloo)。删除是有意义的特殊处理的唯一情况是当该点恰好在左括号之前。

4 个答案:

答案 0 :(得分:3)

这不是答案,但评论时间太长......

Paredit适用于在(可怕之前没有空格的语言,以及没有python的“引用聪明”的语言。你可能会因为这些问题而破解它,但是python的语法是完全不同的,使得它可以工作,这将是一个非平凡的项目。

至于你的最后一点,听起来你根本不想要paredit,因为它非常故意试图保持你的parens&报价平衡,所以也许它不适合你。 IOW,您可能更喜欢auto pairselectric pair或其他类似的工具。

答案 1 :(得分:1)

您可以通过paredit-space-for-delimiter-predicates变量自定义paredit在分隔符周围的空间插入 - 有关详细信息,请参阅docstring。有一些使用它的例子在互联网上踢,但我不记得它们在哪里。

Paredit对字符串的处理仅限于许多Lisp常用的字符串表示法,并且更改它并非易事,因此如果您想使用异乎寻常的语法,例如Python的各种一或三个分隔符单个或 - 双引号格式,你需要深入内部paredit。

答案 2 :(得分:1)

示例代码bellow适用于scheme:

(defun paredit-space-for-delimiter-predicates-scheme (endp delimiter)
  "Do not automatically insert a space when a '#' precedes parentheses."
  (or endp
      (cond ((eq (char-syntax delimiter) ?\()
             (not (looking-back "#\\|#hash")))
            (else t))))

(defun scheme-mode-paredit-hook ()
  (enable-paredit-mode)
  (add-to-list (make-local-variable 'paredit-space-for-delimiter-predicates)
               'paredit-space-for-delimiter-predicates-scheme))

(add-hook 'scheme-mode-hook 'scheme-mode-paredit-hook)

答案 3 :(得分:0)

要强制删除字符,您必须选择它并C-w它。 要强制插入一个字符,例如开头引号,您必须使用C-q (