minibuffer中使用paredit的回车键的问题

从某次更新开始,paredit的回车被绑定成了(paredit-newline)。这样一来,在minibuffer中用paredit就很不方便。比如在M-:中输入回车就不是执行命令,而是变成了换行。有什么办法在minibuffer中去掉回车键的这种绑定吗?

在网上抄了以下配置,基本能用但又产生另一个问题。以M-:为例,如果直接输入某个命令,比如(forward-char)然后回车,确实会正常执行这个命令。但是,如果先输入(forward-)然后用Tab在弹出的菜单中补全剩下的char,这个时候再回车,就又变成换行了。

(use-package paredit
  :hook
  (minibuffer-setup . my/conditionally-enable-paredit-mode)
  (minibuffer-exit . my/restore-paredit-key)
  :config

  (defun my/conditionally-enable-paredit-mode ()
    "Enable paredit during lisp-related minibuffer commands."
    (when (memq this-command paredit-minibuffer-commands)
      (enable-paredit-mode)
      (unbind-key (kbd "RET") paredit-mode-map)))

  (defun my/restore-paredit-key ()
    "Restore the RET binding that was disabled by
  my/conditionally-enable-paredit-mode."
    (bind-key (kbd "RET") #'paredit-newline paredit-mode-map)))

直接去paredit 源码里面把回车绑定的代码删掉不省事么

感觉是你用补全的时候相当于退出 minibuffer 了,所以调用了 my/restore-paredit-key 把绑定改回去了,你换个设置思路改下 my/conditionally-enable-paredit-mode 试试,不是改 paredit-mode-map ,而是改 minibuffer-mode-map ,像下面这样:

(defun my/conditionally-enable-paredit-mode ()
    "Enable paredit during lisp-related minibuffer commands."
    (when (memq this-command paredit-minibuffer-commands)
      (enable-paredit-mode)
      (bind-key (kbd "RET") #'exit-minibuffer minibuffer-mode-map)))

实在不行的话,你可以用 C-j 代替回车输入,在默认的情况下 C-jRET 绑定的都是 exit-minibuffer