2

私は ParEdit モードを試していますが、これは私が望む方法ではありません。元のバインディングをシャドウし、C-M-Fそれを に置き換えますC-M-f。つまり、sexp を選択する代わりに転送します :| 一見バインディングが定義されている場所を見つけることができませんでした。

この動作をキャンセルする方法はありますか? または、sexp を選択するための ParEdit のアナログ コマンドは何でしょうか?

編集:

何が起こるかをよりよく理解するために、C-h kParEdit がアクティブなときに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]

何も翻訳したくありません。これは絶対に望ましくない動作です。

4

3 に答える 3

2

Paredit はキーを翻訳していません。Emacsです。どのモードでも同じです。CMF のバインドがない場合、Emacs は代わりに CMf を試します。

ポイントの後の S 式を選択する場合、標準の Emacs キーは CM-SPC です。

于 2013-06-13T14:27:23.813 に答える
2

以下を使用できます。

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

厳密に言えば、progn は不要ですが、後でさらにキーを再定義/削除することをお勧めします。

編集

forward-sexp とは異なり、paredit-forward はシフトが押されたかどうかをチェックしません。あなたはこれを使ってみることができます

(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 を選択) は、CM-space です。次に、そうしたい場合は、ポイントとマークを Cx Cx (または、CUA を使用している場合は Cx (ここでは遅延なし) Cx Cx) で交換できます。

編集(最後?)

シフトが押されたときに関数もマークする適切な方法は次のとおりです。

(put 'paredit-forward 'CUA 'move)
于 2013-01-05T12:29:59.353 に答える