Paredit:删除不需要的键绑定

问题描述 投票:2回答:3

我正在尝试ParEdit模式,这不是我想要的方式:它遮盖了[[C-M-F的原始绑定,并用C-M-f替换了它。即它转发sexp而不是选择它:|乍一看,我找不到定义绑定的地方。

任何取消此行为的方法吗?或ParEdit中用于选择sexp的模拟命令是什么?

编辑:

让您更好地了解会发生什么,如果在ParEdit处于活动状态时执行

C-h k

,然后C-M-S-f,这就是我所得到的:C-M-f (translated from C-M-S-f) runs the command paredit-forward, which is an interactive compiled Lisp function in `paredit.el'. It is bound to C-M-f. (paredit-forward) Move forward an S-expression, or up an S-expression forward. If there are no more S-expressions in this one before the closing delimiter, move past that closing delimiter; otherwise, move forward past the S-expression following the point. C-M-f (foo |(bar baz) quux) -> (foo (bar baz)| quux) (foo (bar)|) -> (foo (bar))| [back]
我不希望它翻译任何东西,这绝对是不希望的行为。
emacs key-bindings paredit
3个回答
2
投票
您可以使用:

(eval-after-load "paredit" '(progn (define-key paredit-mode-map (kbd "C-M-f") nil)))

严格来说,没有必要使用progn,但是之后可能需要重新定义/删除更多键

编辑

与正向表达式不同,paredit-forward不检查是否按下了shift。您可以尝试使用此

(eval-after-load "paredit" '(progn (define-key paredit-mode-map (kbd "C-M-S-f") (lambda () (interactive) (unless (region-active-p) (set-mark (point))) (paredit-forward)))))

编辑

执行相同操作的另一种方法(选择以下sexp)将是C-M空间。然后,如果您想这样做,则可以用C-x C-x(或C-x(如果使用CUA,在这里没有延迟)C-x C-x交换点并标记)]

编辑(最后一个?)

按下Shift键时也可以标记功能的正确方法是:

(put 'paredit-forward 'CUA 'move)


2
投票
Paredit不会翻译密钥。 Emacs是。在每种模式下都是相同的。如果C-M-F没有绑定,Emacs将尝试使用C-M-f。

如果要在该点之后选择S表达式,则为此的标准Emacs密钥是C-M-SPC。


0
投票
复述一个非常老的问题,但我想我对此有更一般的解决方案。

paredit是一个非常古老的包装,早于现代包装卫生。即积极设置默认键绑定。

要撤消该操作,请在加载paredit程序包后运行此程序:

(paredit-do-commands (spec keys _fn _examples) nil (dolist (key keys) (define-key paredit-mode-map (read-kbd-macro key) nil)))

现在您不再需要任何键盘绑定,可以使用常规机制。阅读paredit-commands上的值(而非文档),以查看哪些命令可用以及它们的默认绑定是什么,您可能希望保留其中的一些。
© www.soinside.com 2019 - 2024. All rights reserved.