在 C 等编程模式中使用 paredit 时,键入 ( 将在我尝试调用函数时在括号前插入一个空格,从而留下:
foo ()
有没有办法在不更改 paredit 源的情况下禁用空间插入?
在 C 等编程模式中使用 paredit 时,键入 ( 将在我尝试调用函数时在括号前插入一个空格,从而留下:
foo ()
有没有办法在不更改 paredit 源的情况下禁用空间插入?
好吧,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,所以差异很小。似乎没有控制这种行为的设置。
看paredit-space-for-delimiter-predicates