在编程模式(例如C)中使用paredit时,键入(当我尝试调用函数时会在paren之前插入一个空格,让我留下:
foo ()
有没有办法在不改变paredit源的情况下禁用空间插入?
答案 0 :(得分: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,所以差别很小。似乎没有设置来控制此类行为。
答案 1 :(得分:5)
请参阅paredit-space-for-delimiter-predicates
答案 2 :(得分:4)
嗯,Paredit非常适合编辑由S表达式构建的语言。如果您只是喜欢它如何自动插入关闭按钮,请使用功能skeleton-pair。
(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)