在C等编程模式下使用paredit时,当我试图调用函数时,键入(会在paren前插入一个空格,只剩下:
foo ()有没有办法在不改变paredit的来源的情况下禁止插入空格?
发布于 2009-05-27 03:36:21
好吧,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,所以差别很小。似乎没有设置来控制这种类型的行为。
发布于 2011-02-15 01:53:03
请参阅paredit-space-for-delimiter-predicates
发布于 2009-05-27 07:17:58
嗯,Paredit是编辑由S表达式构建的语言的理想选择。如果你喜欢它自动插入结束符的方式,可以使用feature skeleton-pair。
(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)https://stackoverflow.com/questions/913449
复制相似问题