改变Paredit格式

时间:2009-05-27 00:38:44

标签: emacs parentheses paredit

在编程模式(例如C)中使用paredit时,键入(当我尝试调用函数时会在paren之前插入一个空格,让我留下:

foo ()

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

3 个答案:

答案 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)