Biorąc pod uwagę nazwę polecenia emacsa, jak znaleźć przypisania klawiszy? (i wzajemnie)

107

Jeśli znam nazwę polecenia emacsa, mówi „goto-line”; co, jeśli chcę zapytać, czy istnieją jakieś sekwencje klawiszy powiązane z tym poleceniem?

I odwrotnie, biorąc pod uwagę sekwencję klawiszy, jak mogę znaleźć jej nazwę polecenia?

Wzgląd
źródło

Odpowiedzi:

159

Aby po prostu znaleźć skróty klawiszowe dla polecenia, możesz użyć funkcji pomocy emacsa „gdzie jest”

C-h w command-name

Jeśli dla polecenia ustawiono wiele powiązań, wszystkie zostaną wymienione.

Na odwrót, biorąc pod uwagę sekwencję klawiszy, możesz wpisać

C-h k key-sequence

Aby uzyskać polecenie, które będzie działać.

Możesz uzyskać szczegółowe informacje o poleceniu, także o dowolnej zdefiniowanej funkcji nieinteraktywnej, wpisując

C-h f function-name

Który dostarczy ci szczegółowych informacji o funkcji, w tym wszelkich przypisaniach klawiszowych do niej, i

C-h v variable-name

poda informacje o dowolnej (powiązanej) zmiennej. Mapy kluczy są przechowywane w zmiennych, jednak kody kluczy są przechowywane w surowym formacie. Spróbuj C-h v isearch-mode-mapna przykład.

Aby uzyskać dodatkową pomoc dotyczącą uzyskiwania pomocy, możesz pisać

C-h ?
Adam Rosenfield
źródło
Pokonaj do ponczu. D'oh.
dmckee --- kociak ex-moderator
51
Możesz także C-h w <function name>wiedzieć, gdzie jest klucz, a nie pełną dokumentację. I odwrotnie, możesz również C-h c <key sequence>po prostu wiedzieć, jaka funkcja jest powiązana z sekwencją klawiszy.
ShreevatsaR
7
także: Ch w jest zwykle powiązany z miejscem, w którym jest.
Cheeso
2
Więc mogę gdzie-jest-gdzie-jest, kiedy zapomnę Chw. To wspaniale ! ;)
Sake
1
Dla tych, którzy związali się C-hz czymś innym w swoich menedżerach okien: C-h wodpowiada M-x where-is. C-h kjest równoważne M-x describe-key. C-h fjest równoważne M-x describe-function. C-h vjest równoważne M-x describe-variable. C-h ?jest równoważne M-x help-for-help. Pamiętaj również, że f1można użyć zamiast C-h.
Ricardo
13

C-h w(lub F1-w): where-isRET jakaś nazwa polecenia RET

Robi to, o co prosisz - wyświetla powiązane klucze bez dodatkowych informacji. :)

Glen Best
źródło
13

Aby uzyskać interaktywne powiązanie polecenia ze skrótem klawiaturowym (lub sekwencją klawiszy w terminach Emacsa), zobacz wybraną odpowiedź.

Aby programowo uzyskać polecenie powiązane z daną sekwencją klawiszy, użyj funkcji key-bindinglub, lookup-keyktóra pobiera sekwencję klawiszy i zwraca jej powiązane polecenie. Funkcja key-bindingjest tym, czego C-h kużywa.

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

zwraca polecenie powiązane z C-h mwyszukiwaniem we wszystkich bieżących mapach klawiszy. Funkcja lookup-keywyszukuje w jednym układzie klawiszy:

(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-internalPrawdopodobnie jest to funkcja, której należy użyć do programowego pobierania wszystkich sekwencji klawiszy związanych z danym poleceniem . Nazwa funkcji kończącej się na internalzdaje się sugerować, że użytkownicy Emacsa nie powinni używać ich w swoich plikach init, ale ta funkcja posiadająca ciąg dokumentów wydaje się sugerować coś innego. Każdy, kto rozważa użycie, where-is-internalpowinien najpierw sprawdzić, czy zamiast tego przemapowanie kluczy może osiągnąć swój cel.

Alternatywą dla znalezienia kluczy, które są powiązane z konkretnym poleceniem (np., forward-char) Jest substitute-command-keys(np (substitute-command-keys "\\[forward-char]").). Jest to szczególnie przydatne w przypadku większych tekstów.

Jisang Yoo
źródło
Spojrzenie na dokumentację where-is-internalsugeruje, że można z niej korzystać. Ponadto konwencjonalnie używamy formatu takiego jak where-is--internal(zwróć uwagę na podwójny myślnik) dla funkcji „prywatnych”.
GergelyPolonkai
2
Użycie sufiksu -internaljest opisane tam: gnu.org/software/emacs/manual/html_node/elisp/… . Powinien być używany dla wewnętrznych funkcji C.
Tobias
4

Stare pytanie, ale z korzyścią dla nowych czytelników jest kilka innych fajnych sposobów na zobaczenie przypisań klawiszy

M-x describe-bindings

Wyświetla wszystkie aktualnie dostępne powiązania, użyj isearch, wystąp itp., Aby dobrze wykorzystać tę listę.

M-x describe-prefix-map

To pokazuje wszystkie wiązania dostępne w bieżącym trybie, możesz używać bufora wyświetlania tak, jak każdego innego bufora Emacsa tylko do odczytu, na przykład możesz swobodnie wyszukiwać łańcuchy itp.

M-x describe-mode

Oprócz ogólnych informacji o aktualnym trybie, wyświetli również listę wszystkich dostępnych skrótów klawiszowych.

M-x describe-minor-mode

Zostaniesz poproszony o wprowadzenie nazwy trybu pomocniczego, a następnie zobaczysz informacje i przypisania klawiszy dla tego trybu pomocniczego.

UWAGA : Poniższe przykłady wykorzystują dodatkowe pakiety (dostępne w MELPA )

Który klucz

To pokazuje wiązania, zanim ich potrzebujesz. Wprowadź przedrostek, na przykład C-xlub, C-ca zostanie wyświetlona lista powiązań dostępnych w tym prefiksie.

Możesz również wyświetlić listę skrótów klawiszowych dostępnych w bieżącym trybie, używając:

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

Przydatne jest powiązanie which-key-show-top-levelz wybranym akordem klawiszowym, dzięki czemu można zobaczyć klawisze dostępne z dowolnego miejsca.

Na przykład C-s( isearch-forward) ma obszerną mapę klawiszy, która często jest nieznana. np. M-s ozaczyna occurużywać bieżącego ciągu wyszukiwania, nie wiedziałem o tym przez wiele lat używania Emacsa. Obecność w which-keypobliżu pomogła mi odkryć wiele rzadkich klejnotów w Emacs.

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

Klawisz przewodnika

Klawisz przewodnika działa w taki sam sposób, jak which-keypolecałbym przyjrzeć się temu w celu porównania funkcji.

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

ocodo
źródło