Bagaimana cara menyetel pengikatan kunci yang secara global menimpa dan didahulukan dari semua pengikatan lain untuk kunci itu? Saya ingin menimpa semua peta mode mayor / minor dan memastikan pengikatan saya selalu berlaku.
Ini tentu saja tidak berhasil:
(global-set-key "\C-i" 'some-function)
Ini bekerja text-mode
, tetapi ketika saya menggunakan lisp-mode
, C-i
rebound ke lisp-indent-line
.
Saya dapat melewati dan mengesampingkan pengikatan ini dalam lisp-mode
dan dalam setiap mode lainnya secara individual, tetapi harus ada cara yang lebih mudah. Setiap kali saya menginstal mode baru untuk jenis file baru, saya harus kembali dan memeriksa untuk memastikan bahwa semua binding kunci saya tidak diganti oleh mode baru.
Saya ingin melakukan ini karena saya ingin meniru binding yang telah saya pelajari dan tertanam dari editor lain.
sumber
Sebagai tambahan untuk jawaban scottfrazer , saya telah menulis yang berikut ini sehingga keybindings saya tetap diutamakan, bahkan jika perpustakaan yang dimuat selanjutnya membawa peta kunci baru mereka sendiri.
Karena peta kunci dapat dibuat pada waktu kompilasi,
load
sepertinya tempat terbaik untuk melakukannya.sumber
Instal
use-package
, evaluasi, dan Anda selesai:sumber
use-package
:Install package: use-package [No Match]
Saya menemukan pertanyaan ini saat mencari "emacs undefine org mode keybindings", karena saya ingin melepaskan perilaku Cc Cb yang ada agar peta global saya dapat mengubur buffer untuk bekerja di buffer org.
Ini akhirnya menjadi solusi paling sederhana bagi saya:
sumber
Meskipun jawaban scottfrazer persis seperti yang Anda minta, saya akan menyebutkan solusi lain untuk anak cucu.
Dari The Emacs Manual :
Jika Anda mengikat ikatan global pribadi Anda ke Cc plus surat, maka Anda "harus" aman. Namun, ini hanyalah konvensi, dan mode apa pun masih dapat menggantikan binding Anda.
sumber
Jika Anda ingin "selalu menggunakan keybinds di peta, kecuali saya secara eksplisit menimpanya untuk peta mode tertentu", dan dengan asumsi Anda menggunakan pendekatan scottfrazier , Anda ingin:
Begitu
harus menghapus pengikatan "\ Ci" dari mode minor di buffer saat ini saja. Peringatan: ini sama sekali belum teruji, tetapi sepertinya pendekatan yang tepat. Inti dari menyetel induk daripada hanya mengatasi nilai global my-keys-minor-mode-map adalah agar setiap perubahan selanjutnya pada nilai global secara otomatis tercermin dalam nilai lokal.
sumber
Saya tidak berpikir Anda bisa. Itu kira-kira sama dengan mengatakan bahwa Anda ingin mendefinisikan variabel global yang tidak dapat disembunyikan oleh deklarasi variabel lokal dalam fungsi. Cakupan tidak berfungsi seperti itu.
Namun, mungkin ada cara untuk menulis fungsi elisp melalui daftar mode dan menetapkannya kembali di setiap satu untuk Anda.
sumber
overriding-local-map
secara khusus dirancang untuk menimpa semua peta lainnya. Namun berbahaya untuk menggunakannya.Kecuali jika Anda benar-benar ingin melakukannya sendiri, Anda harus memeriksa dan melihat apakah ada orang lain yang telah melakukannya.
Ada paket untuk Emacs yang memberikan keybindings mirip windows Anda. Anda harus dapat menemukannya melalui google.
sumber
cua-mode
.