【问题标题】:Changing Paredit Formatting更改 Paredit 格式
【发布时间】:2009-05-27 00:38:43
【问题描述】:

在 C 等编程模式下使用 paredit 时,键入 ( 会在我尝试调用函数时在括号前插入一个空格,从而留下:

foo ()

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

【问题讨论】:

    标签: emacs parentheses paredit


    【解决方案1】:

    好吧,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,所以差异很小。似乎没有控制此类行为的设置。

    【讨论】:

    • 我想要这个已经很久了,因为我发现 autopair.el 非常 很慢。 Paredit 现在就像 c-mode 中的魅力一样。谢谢! :)
    • 为了特定于模式,也可以写(defvar-local my-paredit-no-insert-space nil) 并使用(and ... my-paredit-no-insert-space) 代替(and ... (memq major-mode '(c-mode lisp-mode)))),然后将my-paredit-no-insert-spacec-mode-common-hook 设置为t。这样两个偏好不同的人可以使用paredit-space-for-delimiter-p的相同新定义
    • If you want something more mode specific, you can add some conditions to that and statement - 我确实不想在某些模式下覆盖它,但我不明白我可以将条件添加到哪个“if”语句。你能澄清一下吗?
    【解决方案2】:

    paredit-space-for-delimiter-predicates

    【讨论】:

    • 这可能在这方面很有趣(可能需要调整模式名称,甚至删除“dolist”并简单地将“lambda()”添加到模式的钩子中(如果只有一个模式)):gist.github.com/remvee/879305
    【解决方案3】:

    嗯,Paredit 非常适合编辑由 S 表达式构建的语言。如果您只是喜欢它自动插入右括号的方式,请使用功能skeleton-pair

    (setq skeleton-pair t)
    (global-set-key "(" 'skeleton-pair-insert-maybe)
    

    【讨论】:

    • 好点。我忘记了骨架对。我已经习惯了 Paredit 与 emacs lisp 混在一起。我需要为我的非 lispy 语言设置它..
    • 实际上,paredit 模式在基于 s-expression 的语言之外非常有用,也可以用于强制匹配分隔符的有效性;这不仅仅是关于插入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2011-07-11
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多