Binding kunci khusus untuk mode vi shell, yaitu, "set -o vi"?

18

Saya baru saja menemukan keajaiban set -o vi, dan saya ingin tahu apakah mungkin untuk menyesuaikan mode shell vi ini dalam beberapa cara yang sama Anda dapat menyesuaikan vi atau vim?

Misalnya, buat pengikatan kunci khusus untuk memetakan kombo atau kombo yang lebih nyaman esc?

Jika saat ini tidak didukung, seberapa sulitkah untuk mengubah kode sumber program dan hardcode di beberapa penyesuaian, atau apakah itu ide yang buruk?

Jonah
sumber
Saya menemukan jawaban di sini < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

Jawaban:

17

Ya, Anda dapat mengubah pemetaan kunci (untuk mode vi atau emacs) dengan bindbuiltin. Ini sebenarnya adalah fitur readline (sehingga Anda dapat memiliki binding mirip vi di semua program readline, bukan hanya bash).

Kunci yang Anda cari dipanggil vi-movement-mode, dan default-nya adalah \e(escape). Anda juga dapat mengikatnya ke (dan ini agak konyol) sama dengan ini. Baris kedua menghilangkan ikatan untuk melarikan diri:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

Menjalankan bind -pakan menunjukkan kepada Anda semua kunci yang dapat Anda ikat, dan ikatannya saat ini (jika ada).

Anda dapat menempatkan bindperintah di Anda .bashrc, atau Anda dapat mengedit ~/.inputrcagar berlaku untuk semua program readline yang Anda jalankan. Dokumen readline berisi detail lengkap.

derobert
sumber
1
Ini luar biasa. Terima kasih banyak. Saya bisa mengetahui cara mengikat kombo kunci seperti bind "Control-Space":vi-movement-mode- itu berfungsi dengan baik. Tapi misalnya dalam vim saya harus mengetik dua karakter berturut-turut sebagai pemicu esc, yaitu, jika Anda mengetik jjAnda akan kembali ke mode normal. Ini tidak berhasil ketika saya mencobanya dengan bind, apakah ada cara khusus untuk membuatnya bekerja?
Jonah
@Jonah bukan yang saya tahu begitu saja, tapi saya belum membaca dengan teliti dokumen readline baru-baru ini ...
derobert
@chishaku Anda harus awali nama Jonah dengan tanda pada ( @), atau dia tidak akan mendapat pemberitahuan.
derobert
2
@Jonah saya hanya mencoba melakukan hal yang sama. Apakah Anda pernah memikirkan hal ini?
chishaku
1
unix.stackexchange.com/questions/303282/… Anda perlu penawaran untuk beberapa alasanbind '"jk":vi-movement-mode'
Hielke Walinga