Saya menggunakan ksh
default pada OpenBSD 6.2 (berdasarkan pdksh
) dengan mode pengeditan baris perintah Vi diaktifkan.
Saya mencoba agar tombol panah berfungsi dengan baik sebagai pelengkap h , l , j dan k (karena saya menggunakan keyboard Dvorak). Sejauh yang saya tahu, mereka tidak bekerja sama sekali. Tidak masalah apakah saya dalam mode "input" atau "perintah".
Binding kunci saat ini meliputi:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Ini juga merupakan urutan karakter yang dihasilkan oleh tombol panah saya jika saya menggunakan Ctrl+V Tombol panah .
Tombol panah berfungsi seperti yang diharapkan dalam mode pengeditan baris perintah Emacs, tetapi sebagai pengguna Vi yang lama, saya merasa agak lumpuh saat menggunakannya.
Perasaan saya adalah bahwa Escape yang dikirim oleh tombol panah ditafsirkan seolah-olah saya menekan Esc … Saya mendapatkan perilaku yang setara dengan mengetik secara manual mis. Esc [ A seperti ketika saya menekan Panah atas (menempatkan saya dalam mode perintah dan kemudian dalam mode penyisipan di akhir baris).
Pertanyaan:Adakah yang bisa membuat tombol panah bekerja secara intuitif dalam mode-Vi di ksh
OpenBSD ?
Jawaban yang Diterima:
Saya melakukan perampokan cepat ke /usr/src/bin/ksh
pada sistem OpenBSD saya, mengingat saya telah memeriksa sumber yang sebenarnya. Sekilas saya melihat c_ksh.c
, emacs.c
dan vi.c
dan sepertinya mode Vi dipasang kembali ke pdksh
dari nsh
di beberapa titik (sekitar 1989/1990). Kata-kata persis yang digunakan adalah
/* $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $ */
/*
* vi command editing
* written by John Rochester (initially for nsh)
* bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
*
*/
bind
-bisa fungsi semua tinggal di emacs.c
, seperti halnya x_bind()
fungsi yang dipanggil oleh bind
bawaan, sedangkan vi.c
tampaknya memiliki implementasi sendiri dari beberapa di antaranya dengan nama berbeda yang tidak dipanggil dari x_bind()
.
Oleh karena itu saya rasa saya dapat menyimpulkan bahwa bind
builtin adalah no-op dalam Vi-mode di shell khusus ini.
UPDATE (2018-02-04):Setelah melaporkan ini ke openbsd-misc
list, telah dikonfirmasi bahwa bind
memang tidak melakukan apa pun dalam mode pengeditan baris perintah Vi. Sebuah patch akan masuk untuk mengubah ksh
manual di OpenBSD sehingga disebutkan:
bind string=[editing-command] ...
Dalam mode pengeditan Emacs , perintah pengeditan yang ditentukan terikat ke
string
yang diberikan . Masukan masa depan daristring
akan menyebabkan perintah pengeditan
segera dipanggil. Pengikatan tidak
berpengaruh dalam mode pengeditan Vi .