1

python-mode.elファイルをemacsにロードすると、指定されたキーバインディングが取得されません。私はファイルで遊んで始めました、そして、私が変えるとき、それに気づきました:

(define-key map [(control c)(\#)] 'py-comment-region)

に:

(define-key global-map [(control c)(\#)] 'py-comment-region)

それはうまくいきます。

マップ変数を定義する場所を調べて、次のことを確認しました。

(defvar py-shell-map nil
  "Keymap used in *Python* shell buffers.")

;; used by py-completion-at-point, the way of python.el
(defvar python-shell-map
  (let ((map (copy-keymap comint-mode-map)))
    (define-key map [tab]   'py-shell-complete)
    (define-key map "\C-c-" 'py-up-exception)
    (define-key map "\C-c=" 'py-down-exception)
    map)
  "Keymap used in *Python* shell buffers.")

'map'変数は正しく定義されていますか?initファイルに変更を加える必要がありますか?このファイルは他のすべての人に機能すると思いますが、コンピューターで機能させるには、なぜ「map」変数を「global-map」に変更する必要があるのでしょうか。

それが助けになるなら、私は仮想マシンで実行しています。

4

2 に答える 2

2

引用したコードmapで定義されていると思われるコードは、実際にはコードの関連部分ではありません。これはPythonシェルに使用される別のキーマップであり、EmacsでPythonファイルを編集するときに使用されるものではありません。

編集中の行はpython-mode、次のコードブロック内に表示されます。

(defvar python-mode-map)
(setq python-mode-map
      (let ((map (make-sparse-keymap)))
        ;; electric keys
        (define-key map [(:)] 'py-electric-colon)
        (define-key map [(\#)] 'py-electric-comment)
        ...

ご覧のとおり、変数mapは最初に「スパースキーマップ」として初期化され、次に特定のキーバインディングがそのマップで定義され、最後にマップがの値として設定されますpython-mode-map。後者は、にあるバッファで使用されるキーマップですpython-mode

したがって、キーバインディングは機能するはずですが、もちろん、にあるバッファでのみ機能しpython-modeます。python-modeバッファでアクティブ化するには、と入力しM-x python-modeます。これは、ファイルpython-mode.elがロードされた後にのみ機能します。

python-mode現在のバッファが次の2つの方法であるかどうかを確認できます。

  • モード行には「Py」の文字が表示されます
  • タイプM-: ENTER major-mode ENTER->これは「python-mode」をミニバッファーに出力する必要があります
于 2012-07-20T04:32:07.103 に答える
0

各メジャーモードと一部のマイナーモードには独自のキーマップがあり、グローバルキーマップ()にオーバーレイされglobal-mapます。キーを押すと、Emacsはオーバーレイされたキーマップでそのキーのバインディングを見つけようとし、グローバルマップに到達するまで「よりグローバルな」キーにフォールバックします。これが機能する理由global-mapmap機能しない理由です。

lispでは、letローカル変数をバインドするために使用されます。map変数はlet(または存在するかもしれませんが、おそらくあなたが望むものではありません)の外には存在しません。letおよびdefvar(例)のドキュメントをお読みくださいC-h f defvar

メジャーモードで使用されているキーマップを把握し、それを使用する必要がありますdefine-key。この場合、(define-key python-mode-map (kbd "C-c #") 'py-comment-region)おそらく動作します。注意:私はpython-mode.elを使用していませんが、ソースを見るとpython-mode-map、キーマップ変数として使用しているようです。他のキーマップは補助バッファ用です。

于 2012-07-20T04:26:43.753 に答える