Diberikan nama perintah emacs, bagaimana Anda akan menemukan pengikatan kunci? (dan sebaliknya)

107

Jika saya tahu nama perintah emacs, katakan, "goto-line"; bagaimana jika saya ingin menanyakan apakah ada urutan kunci yang terikat pada perintah ini?

Dan sebaliknya, jika diberi urutan kunci, bagaimana saya bisa menemukan nama perintahnya?

Demi
sumber

Jawaban:

159

Untuk menemukan key binding untuk sebuah perintah, Anda dapat menggunakan fitur "where-is" emacs help

C-h w command-name

Jika beberapa binding ditetapkan untuk perintah, semuanya akan terdaftar.

Untuk kebalikannya, diberi urutan kunci, Anda dapat mengetik

C-h k key-sequence

Untuk mendapatkan perintah yang akan dijalankan.

Anda bisa mendapatkan informasi mendetail tentang suatu perintah, juga fungsi non-interaktif yang ditentukan, dengan mengetik

C-h f function-name

Yang akan memberi Anda informasi mendetail tentang suatu fungsi, termasuk binding kunci apa pun untuk itu, dan

C-h v variable-name

akan memberi Anda informasi tentang variabel (terikat) apa pun. Peta kunci disimpan dalam variabel, namun kode kunci disimpan dalam format mentah. Coba C-h v isearch-mode-mapcontoh.

Untuk bantuan lebih lanjut tentang mendapatkan bantuan, Anda dapat mengetik

C-h ?
Adam Rosenfield
sumber
Pukul tepat. D'oh.
dmckee --- mantan moderator kucing
51
Anda juga bisa C-h w <function name>tahu di mana letak kuncinya, bukan dokumentasi lengkapnya. Sebaliknya, Anda juga bisa melakukannya C-h c <key sequence>untuk sekadar mengetahui fungsi apa yang terikat pada sebuah urutan kunci.
ShreevatsaR
7
juga: Ch w biasanya terikat ke where-is.
Cheeso
2
Jadi, saya bisa di mana-mana-saat saya lupa Ch w. Itu hebat ! ;)
Sake
1
Bagi mereka yang terikat C-hpada sesuatu yang lain di window manager mereka: C-h wsama dengan M-x where-is. C-h ksetara dengan M-x describe-key. C-h fsetara dengan M-x describe-function. C-h vsetara dengan M-x describe-variable. C-h ?setara dengan M-x help-for-help. Juga perhatikan bahwa f1dapat digunakan sebagai pengganti C-h.
Ricardo
13

C-h w(atau F1-w): where-isRET beberapa nama perintah RET

Melakukan apa yang Anda minta - mencantumkan kunci yang terikat tanpa informasi tambahan. :)

Glen Best
sumber
13

Untuk mendapatkan perintah secara interaktif terikat ke pintasan keyboard (atau urutan tombol dalam istilah Emacs), lihat jawaban yang dipilih.

Untuk secara terprogram mendapatkan perintah yang terikat ke urutan kunci tertentu, gunakan fungsi key-bindingatau lookup-keyyang mengambil urutan kunci dan mengembalikan perintah terikatnya. Fungsi key-bindinginilah yang C-h kdigunakan.

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

mengembalikan perintah yang terikat C-h mdengan mencari di semua peta tombol saat ini. Fungsi lookup-keymencari dalam satu peta kunci:

(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

Untuk secara terprogram mendapatkan semua urutan kunci yang terikat ke perintah yang diberikan, where-is-internalmungkin merupakan fungsi yang akan digunakan. Nama fungsi yang diakhiri dengan internalsepertinya menyarankan bahwa Emacs bukan untuk digunakan oleh pengguna dalam file init mereka tetapi fungsi yang memiliki docstring ini tampaknya menyarankan sebaliknya. Siapa pun yang mempertimbangkan penggunaan where-is-internalharus terlebih dahulu memeriksa apakah memetakan ulang kunci dapat mencapai tujuan mereka.

Alternatif untuk menemukan kunci yang terikat ke perintah tertentu (misalnya, forward-char) adalah substitute-command-keys(misalnya, (substitute-command-keys "\\[forward-char]")). Itu sangat berguna dalam teks yang lebih besar.

Jisang Yoo
sumber
Melihat dokumentasi where-is-internalmenyarankan tidak apa-apa untuk menggunakannya. Juga, secara konvensional kami menggunakan format seperti where-is--internal(perhatikan tanda hubung ganda) untuk fungsi "pribadi".
GergelyPolonkai
2
Penggunaan sufiks -internaldijelaskan di sana: gnu.org/software/emacs/manual/html_node/elisp/… . Ini harus digunakan untuk fungsi C internal.
Tobias
4

Pertanyaan lama, tetapi untuk kepentingan pembaca baru, ada beberapa cara bagus lain untuk melihat binding kunci

M-x describe-bindings

Mencantumkan semua binding yang saat ini tersedia, gunakan isearch, terjadi, dll. Untuk memanfaatkan daftar ini dengan baik.

M-x describe-prefix-map

Ini menunjukkan semua binding yang tersedia dari mode saat ini, Anda dapat menggunakan buffer tampilan seperti yang Anda lakukan pada buffer Emacs hanya baca lainnya, misalnya Anda dapat mencari string dengan bebas, dll.

M-x describe-mode

Selain memberi Anda info umum tentang mode saat ini, itu juga akan mencantumkan semua binding kunci yang tersedia.

M-x describe-minor-mode

Anda akan diminta untuk memasukkan nama mode minor, dan kemudian ditampilkan info dan ikatan kunci untuk mode minor tersebut.

CATATAN : Contoh di bawah ini menggunakan paket tambahan (tersedia dari MELPA )

Kunci yang mana

Ini menunjukkan Anda binding sebelum Anda membutuhkannya. Masukkan awalan, misalnya C-xatau C-cdan daftar binding yang tersedia di awalan itu akan ditampilkan.

Anda juga dapat melihat daftar pengikatan kunci yang tersedia dari mode saat ini dengan menggunakan:

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

Berguna untuk mengikat which-key-show-top-levelke akor kunci pilihan Anda, sehingga Anda dapat melihat kunci yang tersedia dari mana saja.

Misalnya, C-s( isearch-forward) memiliki peta kunci ekstensif yang seringkali tidak diketahui. misalnya M-s omulai occurmenggunakan string pencarian saat ini, saya tidak tahu tentang ini selama bertahun-tahun menggunakan Emacs. Bepergian which-keytelah membantu saya menemukan banyak permata langka di Emacs.

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

Kunci panduan

Kunci panduan berfungsi dengan cara yang sama seperti yang which-keysaya sarankan untuk melihatnya untuk membandingkan fitur.

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

ocodo
sumber