更改 Paredit 格式

发布于 2024-07-23 07:42:49 字数 144 浏览 5 评论 0原文

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

foo ()

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

When using paredit in programming modes such as C, typing ( will insert a space before the paren when I'm trying to call a function, leaving me with:

foo ()

Is there a way to disable the insertion of the space without changing paredit's source?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缺⑴份安定 2024-07-30 07:42:50

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

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

Well, Paredit is ideal for editing languages built of S-expressions. If you just like how it automatically inserts the closing paren, use feature skeleton-pair.

(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)
つ可否回来 2024-07-30 07:42:49

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

Well, the way paredit appears to work is that it checks the syntax tables to see if you're inserting a pair right after a word/symbol/etc., in which case it forces a space to be inserted. You need to override that functionality - which can be done a number of different ways: advice, redefine the function determining space, changing the syntax table, etc.

I'd try the straight forward:

(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)))))))

This will obviously apply to all places where you use paredit. If you want something more mode specific, you can add some conditions to that and statement (e.g. (and ... (memq major-mode '(c-mode lisp-mode)))).

So... I guess I did change the "source", but you can do the same thing with a piece of defadvice ... it's all elisp, so the difference is minimal. There doesn't appear to be a setting to control this type of behavior.

你的他你的她 2024-07-30 07:42:49

请参阅paredit-space-for-delimiter-predicates

See paredit-space-for-delimiter-predicates

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文