10

在 C 等编程模式中使用 paredit 时,键入 ( 将在我尝试调用函数时在括号前插入一个空格,从而留下:

foo ()

有没有办法在不更改 paredit 源的情况下禁用空间插入?

4

3 回答 3

12

好吧,paredit 的工作方式似乎是它检查语法表以查看您是否在单词/符号/等之后插入一对,在这种情况下,它会强制插入一个空格。您需要覆盖该功能 - 可以通过多种不同方式完成:建议、重新定义函数确定空间、更改语法表等。

我会尝试直截了当:

(defun paredit-space-for-delimiter-p (endp delimiter)
  (and (not (if endp (eobp) (bobp)))
       (memq (char-syntax (if endp (char-after) (char-before)))
             (list ?\"  ;; REMOVED ?w ?_
                   (let ((matching (matching-paren delimiter)))
                     (and matching (char-syntax matching)))))))

这显然适用于您使用的所有地方paredit。如果您想要更具体的模式,您可以在该and语句中添加一些条件(例如(and ... (memq major-mode '(c-mode lisp-mode))))。

所以......我想我确实改变了“来源”,但你可以用一块defadvice......做同样的事情......这都是elisp,所以差异很小。似乎没有控制这种行为的设置。

于 2009-05-27T03:36:21.463 回答
5

paredit-space-for-delimiter-predicates

于 2011-02-14T17:53:02.503 回答
4

好吧,Paredit非常适合编辑由 S 表达式构建的语言。如果您只是喜欢它自动插入结束括号的方式,请使用功能骨架对

(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)
于 2009-05-27T07:17:57.603 回答