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

Emacs 防止paredit在插入括号时插入空格-以及其他问题,emacs,paredit,Emacs,Paredit,我爱帕雷迪。但有两件事我很讨厌,但我还没有找到解决办法: 打开括号会在括号前插入空格。我知道这可能是整个互联网的首选风格,但它不是我的。如何避免这种情况 在引用区域(“”)内时,我无法反向删除。此外,键入双引号(“)将插入反斜杠(显然是为了转义双引号-只是这不是必需的,至少在python中是这样。因此我不需要反斜杠。如何配置 实际上,paredit尝试(但失败)非常明智地关联退格。我的退格应该始终删除上一个字符,无论我是否在未完成的引用区域(如果引号不匹配,paredit只是拒绝做任何事。尝试

我爱帕雷迪。但有两件事我很讨厌,但我还没有找到解决办法:

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

这不是答案,但太长了,无法发表评论

Paredit适用于那些在
之前没有空格的语言(
会很糟糕,而那些没有python的“引用聪明”的语言。您可能会针对这些问题对其进行破解,但python的语法差异很大,因此要使它在那里工作将是一个非常重要的项目


至于你的最后一点,听起来你根本不想要paredit,因为它是非常有意地试图保持你的parens&Quotes平衡的,所以它可能不是适合你的工具。瞧,你可能更喜欢or或其他一些类似的工具。

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

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


Paredit对字符串的处理仅限于许多Lisp通用的字符串表示法,对其进行更改并非易事,因此,如果您想将其与外来语法(如Python的各种一个或三个定界符单引号或双引号格式)结合使用,则需要在Paredit的内部进行深层处理。

下面的示例代码适用于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)