3

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

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

4 回答 4

3

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

Paredit 适用于在 a 之前没有空格(会很糟糕的语言,以及没有 python 的“quote-cleverness”的语言。您可能会针对这些问题破解它,但是 python 的语法有很大的不同,使它在那里工作将是一个不平凡的项目。

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

于 2012-06-21T10:01:17.023 回答
2

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

Paredit 对字符串的处理仅限于许多 Lisps 共有的字符串表示法,并且更改它并非易事,因此如果您想将其与奇异的语法一起使用,例如 Python 的各种一或三分隔符单引号或双引号格式,你需要在 paredit 的深处搞乱。

于 2013-06-13T20:21:08.380 回答
1

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

(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)
于 2013-06-15T02:23:19.500 回答
0

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

于 2012-06-21T14:25:45.233 回答