改变Paredit格式

Nat*_*ath 10 emacs parentheses paredit

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

foo ()
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*son 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)))))))
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我一直想要这个,因为我发现autopair.el _very_ slow.Paredit现在就像'c-mode`中的魅力一样.谢谢!:) (2认同)

ded*_*ed7 5

看到 paredit-space-for-delimiter-predicates