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



我喜欢paredit。但是有几件事我讨厌,还没有解决它们:

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

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

Paredit适用于那些在(之前没有空格会很糟糕的语言,以及那些没有python的"引用聪明"的语言。 你可能会因为这些问题而破解它,但是python的语法已经足够不同,让它在那里工作将是一个不平凡的项目。

至于你的最后一点,听起来你根本不想要paredit,因为它非常有意地试图保持你的括号和引文的平衡,所以也许它不适合你。 IOW,您可能更喜欢自动配对或电动配对或一堆其他类似工具。

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

Paredit对字符串的处理仅限于许多Lisps通用的字符串符号,改变它并非易事,所以如果你想把它与奇特的语法一起使用,比如Python的各种一或三分隔符单引号或双引号格式,你需要在paredit内部深处乱搞。

示例代码 下面的代码适用于方案:

(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)

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

最新更新