Учитывая имя команды emacs, как бы вы могли найти привязки клавиш? (и наоборот)

107

Если я знаю имя команды emacs, он говорит: «goto-line»; что, если я хочу узнать, связаны ли с этой командой какие-либо последовательности клавиш?

И наоборот, учитывая последовательность клавиш, как я могу найти ее имя команды?

Ради
источник

Ответы:

159

Чтобы просто найти привязки клавиш для команды, вы можете использовать функцию emacs help "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-is RET somecommandname RET

Делает именно то, что вы просите - перечисляет связанные ключи без дополнительной информации. :)

Глен Бест
источник
13

Для интерактивного связывания команды с сочетанием клавиш (или последовательностью клавиш в терминах Emacs) см. Выбранный ответ.

Для программного получения команды, привязанной к заданной последовательности клавиш, используйте функцию key-bindingили, lookup-keyкоторая принимает последовательность клавиш и возвращает связанную команду. Функция key-binding- это то, что C-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Вероятно, это функция, которую следует использовать для программного получения всех последовательностей клавиш, связанных с данной командой . Название функции, заканчивающейся на, internalкажется, предполагает, что пользователи Emacs не могут использовать ее в своих файлах инициализации, но эта функция, имеющая строку документации, кажется, предполагает иное. Любой, кто рассматривает возможность использования, where-is-internalдолжен сначала проверить, переназначены ли ключи вместо этого достичь своей цели.

Альтернативой для поиска ключей, связанных с конкретной командой (например, forward-char) является substitute-command-keys(например, (substitute-command-keys "\\[forward-char]")). Это особенно полезно для больших текстов.

Джисан Ю
источник
Глядя на документацию, можно where-is-internalпредположить, что его можно использовать. Кроме того, обычно мы используем такой формат where-is--internal(обратите внимание на двойной дефис) для «частных» функций.
GergelyPolonkai
2
Здесь -internalописано использование суффикса : gnu.org/software/emacs/manual/html_node/elisp/… . Его следует использовать для внутренних функций C.
Тобиас
4

Старый вопрос, но для новых читателей есть еще несколько хороших способов увидеть привязки клавиш

M-x describe-bindings

Перечисляет все доступные привязки, используйте isearch, происходить и т. Д., Чтобы эффективно использовать этот список.

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-s( isearch-forward) имеет обширную карту ключей, которая часто неизвестна. например, M-s oначинает occurиспользовать текущую строку поиска, я не знал об этом много лет использования Emacs. Имея which-keyвокруг помогли мне обнаружить много редких драгоценных камней в Emacs.

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

Направляющий ключ

Направляющий ключ работает примерно так же, как which-keyя бы рекомендовал взглянуть на него, чтобы сравнить функции.

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

окодо
источник