我正在尝试ParEdit模式,这是我不想要的方式:它会影响 CMF 的原始绑定并用 CMf 替换它。即它转发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]
我不希望它翻译任何内容,这绝对是不受欢迎的行为。
答案 0 :(得分:2)
您可以使用:
(eval-after-load "paredit"
'(progn
(define-key paredit-mode-map (kbd "C-M-f") nil)))
严格来说,预测是不必要的,但您可能希望之后重新定义/删除更多密钥
修改强>
与forward-sexp不同,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-space。然后,如果你想这样做,你可以用C-x C-x(或C-x(这里没有延迟)C-x C-x交换点和标记,如果你使用CUA)
编辑(上次?)
按下shift时,制作功能的正确方法也是:
(put 'paredit-forward 'CUA 'move)
答案 1 :(得分:2)
Paredit没有翻译密钥。 Emacs是。在每种模式下都是一样的。如果对C-M-F没有约束力,Emacs将尝试使用C-M-f。
如果要在点之后选择S-expression,则标准Emacs键为C-M-SPC。
答案 2 :(得分: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
上的值(不是文档),以查看哪些命令可用以及它们的默认绑定是什么,您可能希望保留其中的一些。