Saya mencoba untuk membuat fungsi Evil evil-jump-to-tag
, C-]berperilaku seperti ikatan Emacs M-..
Perilaku normal baik untuk menelusuri file Tag, tapi saya ingin itu berfungsi juga untuk Slime slime-edit-definition
, Elisps elisp-slime-nav-find-elisp-thing-at-point
, Clojures cider-jump-to-var
, dll ...
Mode-mode utama ini dan banyak lagi lainnya telah terikat beberapa setara dengan melompat-ke-definisi ke keybinding M-..
Untuk mendapatkan perilaku yang sama untuk mode-Jahat, apakah saya harus mengikat ikatan tombol secara lokal untuk setiap mode ini, atau apakah mungkin untuk mengambil ikatan kunci dan memberi tahu Emacs, bahwa setiap kali tombol ini ditekan, gunakan fungsi terikat untuk tombol itu dalam mode Emacs?
Jawaban:
Saya sudah membuatnya bekerja sekarang, terima kasih atas jawaban Anda:
Ini akan mengatur status jahat ke "Emacs", memanggil fungsi terikat ke M-., Dan mengubah kembali ke status emacs sebelumnya di buffer lain. Saya sudah mencobanya dengan elisp, lendir dan pergi dan itu bekerja untuk mereka semua.
sumber
(define-key evil-normal-state-map (kbd "C-]") (kbd "\\ M-.")
(di mana "\" terikatevil-execute-in-emacs-state
).Coba sesuatu seperti
atau, jika
evil
sudah menggunakan keybind ini, Anda mungkin perlu melakukan sesuatu seperti.Ini akan sepenuhnya mengesampingkan perilaku
C-]
, jika Anda ingin menjaga perilaku jahat tergantung pada mode-utama saat ini, solusi @ Tyler lebih tepat karena Anda dapat memiliki fungsi yang memutuskan apakah akan memanggilM-.
atau melakukan sesuatu yang lain.Apakah ini membantu?
sumber
Saya tidak mengerti
evil
keymaps, tetapi fungsi berikut melakukan apa pun M-.yang terikat saat ini:Mengikat ini ke
evil
keymap yang sesuai harus melakukan apa yang Anda inginkan. Mungkin ada cara yang lebihevil
spesifik untuk melakukan ini.evil
mengikat C-]dievil-motion-state-map
, jadi coba berikut ini:sumber
M-.
untukevil-repeat-pop-next
. Jika Anda mengubah fungsi Anda menjadi ini: (defun my-tag-jump () (interaktif) (evil-emacs-state) (panggil-interaktif (pengikat-kunci (kbd "M-."))) (Jahat-normal- state))evil-jump-to-tag
didefinisikan, dan rebind ke fungsi saya di sana.Secara umum, itu tidak mungkin.
Alasannya adalah bahwa mungkin ada beberapa peta yang mendefinisikan ikatan yang sama, dan tidak ada cara untuk mencari tahu secara otomatis mana yang Anda inginkan. (dalam contoh Anda,
elisp-slime-nav-mode
adalah mode minor). Jadi satu-satunya pendekatan yang benar-benar dapat diandalkan adalah Anda mengetahui dengan tepat definisi yang Anda inginkan.Yang mengatakan ... ada kemungkinan peretasan (tidak selalu ada ...) Bagian dari apa yang membuatnya rumit adalah bahwa pengikatan yang ingin Anda remap berpotensi telah ditutup-tutupi oleh keymap aktif jahat, sehingga mendapatkan pengikatan saat ini dari
M-.
tidak berguna.Saya biasanya tidak menggunakan kejahatan sama sekali, jadi mungkin ada penyesuaian yang diperlukan (lihat komentar yang disertakan)
Juga, pendekatan yang lebih bersih adalah dengan mencari binding sekali (dalam mode hook misalnya), daripada melihat secara dinamis setiap kali ikatan tombol ditekan. Tapi saya tidak yakin apa hook jahat yang digunakan, jadi ini dibiarkan sebagai latihan;) (dan tergantung pada urutan yang Anda gunakan untuk mode minor Anda, atau jika Anda mengaktifkannya secara dinamis, itu mungkin salah)
sumber
Solusi yang diterima oleh @severin hampir berfungsi untuk saya, tetapi, ketika tag tidak ditemukan, buffer tidak kembali ke mode normal. Alternatif ini berfungsi untuk saya dalam semua kasus:
sumber
Saya pikir cara paling bersih adalah
(dan juga tambahkan setiap peta lain yang Anda minati)
xref-find-definitions
adalah fungsi yang diikat keM-.
dalam emacs, seperti yang Anda lihat menggunakan perintahC-h k
.sumber
Beberapa fungsi pengikat tombol gaya vim.
Berikut adalah beberapa fungsi yang telah saya definisikan untuk memungkinkan pengikatan gaya vim di peta global dan berbagai kondisi jahat, serta dua fungsi umum yang mengambil baik peta kunci sewenang-wenang atau fungsi pengikatan sewenang-wenang. Saya telah menempatkan fungsi-fungsi ini di intinya .
Secara umum, lebih baik hanya menggunakan fungsi-fungsi ini untuk binding keyboard-macro-style (seperti case-use dalam pertanyaan), dan menggunakan pengikat kunci gaya emacs untuk yang lainnya.
catatan
bind-key
makro dariuse-package
paket adalah sangat baik dan serbaguna fungsi tombol-mengikat.Mengikat C-]ke M-..
Perhatikan bahwa dalam normal negara, Anda akan ingin mengikat \M-.untuk mengakses emacs mengikat, karena mengikat normal negara M-.untuk
'evil-repeat-pop-next
. Jadi pengikatan normal-negara dapat didefinisikan dengan:atau (membatalkan
evil-jump-to-tag
kunci apa pun dalam kondisi normal:sumber