Paredit:删除不需要的键绑定

时间:2013-01-05 12:05:29

标签: emacs key-bindings paredit

我正在尝试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]

我不希望它翻译任何内容,这绝对是不受欢迎的行为。

3 个答案:

答案 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上的值(不是文档),以查看哪些命令可用以及它们的默认绑定是什么,您可能希望保留其中的一些。