如何为 lisp 模式配置 smartparens?

rog*_*rgl 3 emacs elisp

如果在 lisp 模式下,是否可以以不插入第二个 '(单引号)的方式配置 smartparens?

Aar*_*ris 7

是的。这是简单的方法:

(require 'smartparens-config)
Run Code Online (Sandbox Code Playgroud)

为 smartparens 设置了一些默认设置,我发现其中的大部分内容要么有用要么无害(看看M-x find-library <RET> smartparens-config)。其中之一在各种 Lisp 模式下禁用单引号对。


这应该在几乎所有地方都会照顾到这对,这将是一个问题。它似乎错过的一个地方是eval-expression( M-:) 命令,所以我添加了这一行:

(sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil)
Run Code Online (Sandbox Code Playgroud)

这将影响所有使用 minibuffer 进行输入的命令,因此如果您出于某种原因经常在 minibuffer 中使用单引号,您可能希望找到一个更专注的解决方案。


如果你想做更多的调整,这里是相关的 smartparens 文档。

  • 对于更集中的解决方案,这就是我用来仅在 `eval-expression` 中禁用配对单引号的方法: (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil :unless '( my-in-eval-表达式-p)) (defun my-in-eval-表达式-p (id 操作上下文) (equalp 最后一个命令 'eval-表达式)) (2认同)