emacsコマンド名が与えられた場合、どのようにキー割り当てを見つけますか?(およびその逆)


107

emacsコマンド名を知っていると、「goto-line」と表示されます。このコマンドにバインドされているキーシーケンスがあるかどうかを照会する場合はどうなりますか?

キーシーケンスが与えられた場合、その逆はどうすればコマンド名を見つけることができますか?

回答:


159

コマンドのキー割り当てを見つけるだけの場合は、emacsヘルプの「where-is」機能を使用できます

C-h w command-name

コマンドに複数のバインディングが設定されている場合、それらはすべてリストされます。

逆の場合、キーシーケンスを指定すると、次のように入力できます。

C-h k key-sequence

実行されるコマンドを取得します。

次のように入力することで、コマンドに関する詳細な情報と、定義されている非インタラクティブな関数を取得できます。

C-h f function-name

キーバインディングを含む、関数に関する詳細情報を提供します。

C-h v variable-name

(バインドされた)変数に関する情報を提供します。キーマップは変数に保持されますが、キーコードは未加工の形式で保存されます。C-h v isearch-mode-map例を試してください。

ヘルプを取得するための詳細なヘルプについては、次のように入力できます

C-h ?

パンチを打ちます。ドー。
dmckee ---元モデレーターの子猫

51
C-h w <function name>完全なドキュメントではなく、キーがどこにあるのかを知ることもできます。逆に、C-h c <key sequence>どの関数がキーシーケンスにバインドされているかを知ることもできます。
ShreevatsaR

7
また、Ch wは通常、where-isにバインドされます。
Cheeso

2
だから、私はどこにいるのか、どこにあるのか、Ch wを忘れたとき、それは素晴らしいことです !;)
日本酒

1
C-hウィンドウマネージャーで何か他のものにバインドしている場合:はとC-h w同等M-x where-isです。C-h kと同等M-x describe-keyです。C-h fと同等M-x describe-functionです。C-h vと同等M-x describe-variableです。C-h ?と同等M-x help-for-helpです。のf1代わりに使用できることにも注意してくださいC-h
Ricardo

13

C-h w(またはF1-w):where-isRET somecommandname RET

あなたが求めていることだけを行います-追加情報なしでバインドされたキーをリストします。:)


13

キーボードショートカット(またはEmacsの用語ではキーシーケンス)にバインドされたコマンドを対話的に取得するには、選択した回答を参照してください。

与えられたキーシーケンスにバインドされたコマンドをプログラムで取得するには、関数を使用するkey-bindinglookup-key、キーシーケンスを受け取ってバインドされたコマンドを返します。関数key-bindingC-h k使用するものです。

(key-binding (kbd "C-h m"))

C-h m現在のすべてのキーマップを検索してバインドされたコマンドを返します。関数lookup-keyは単一のキーマップを検索します。

(lookup-key (current-global-map) (kbd "TAB")) ; => indent-for-tab-command
(lookup-key org-mode-map (kbd "TAB")) ; => org-cycle
(lookup-key text-mode-map (kbd "TAB")) ; => nil
(lookup-key isearch-mode-map (kbd "TAB")) ; => isearch-printing-char

与えられたコマンドにバインドされたすべてのキーシーケンスをプログラムで取得するために、where-is-internalおそらく使用する関数です。末尾がの関数の名前は、internalEmacsユーザーが自分のinitファイルで使用することではないことを示唆しているようですが、docstringを持つこの関数は、そうでないことを示唆しているようです。の使用を検討している場合は、where-is-internalまずキー再マップして目的を達成できるかどうかを最初に確認してください。

特定のコマンド(たとえばforward-char)にバインドされているキーを見つけるための代替手段はsubstitute-command-keys(たとえば(substitute-command-keys "\\[forward-char]"))です。これは特に大きなテキストで役立ちます。


のドキュメントを見ると、where-is-internal使用しても問題ないことが示唆されています。また、従来はwhere-is--internal「プライベート」関数には(二重ダッシュに注意)のような形式を使用しています。
GergelyPolonkai 2016年

2
-internalそこにサフィックスの使用法が記載されています:gnu.org/software/emacs/manual/html_node/elisp/…。内部C関数に使用する必要があります。
トビアス

4

古い質問ですが、新しい読者のために、キーバインディングを確認する方法が他にもいくつかあります。

M-x describe-bindings

現在利用可能なすべてのバインディングを一覧表示します。このリストを活用するには、isearch、occurenceなどを使用します。

M-x describe-prefix-map

これは、現在のモードで利用可能なすべてのバインディングを表示します。他の読み取り専用のEmacsバッファーと同じように表示バッファーを使用できます。たとえば、文字列を自由に検索できます。

M-x describe-mode

現在のモードに関する一般的な情報を提供するだけでなく、利用可能なすべてのキーバインディングも一覧表示します。

M-x describe-minor-mode

マイナーモードの名前を入力するように求められ、次にそのマイナーモードの情報とキーバインディングが表示されます。

:以下の例では追加のパッケージを使用しています(MELPAから入手可能)

どのキー

これにより、バインディングが必要になる直前にバインディングが表示されます。C-xまたはC-cなどの接頭辞を入力すると、その接頭辞で使用可能なバインディングのリストが表示されます。

次のコマンドを使用して、現在のモードで使用できるキーバインディングのリストを表示することもできます。

M-x which-key-show-top-level

which-key-show-top-level選択したキーコードにバインドすると便利です。どこからでも使用可能なキーを表示できます。

たとえば、C-sisearch-forward)には広範なキーマップがあり、これは不明なことがよくあります。たとえば、現在の検索文字列の使用をM-s o開始occurしましたが、Emacsを使用して何年もの間、これについて知りませんでした。持ってwhich-key周りのことは私はEmacsの中、多くの希少な宝石を発見し支援してきました。

https://github.com/justbur/emacs-which-key

ガイドキー

ガイドキーの機能は、which-key機能を比較するためにガイドを確認することをお勧めします。

https://github.com/kai2nenobu/guide-key

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.