Sto usando l'impostazione predefinita ksh
su OpenBSD 6.2 (basato su pdksh
) con la modalità di modifica della riga di comando Vi abilitata.
Sto cercando di far funzionare correttamente i tasti freccia come complemento a h , l , j e k (dato che sono su una tastiera Dvorak). Per quanto ne so, non funzionano affatto. Non importa se sono in modalità "input" o "comando".
Le attuali associazioni di tasti includono:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Questi sono anche i caratteri in sequenza prodotti dai miei tasti freccia se uso Ctrl+V Tasto freccia .
I tasti freccia funzionano come previsto nella modalità di modifica della riga di comando di Emacs, ma come utente Vi da molto tempo, mi sento un po' paralizzato quando lo uso.
La mia sensazione è che l'Escape inviato dal tasto freccia venga interpretato come se avessi premuto Esc ... Ottengo il comportamento equivalente digitando manualmente ad es. Esc [ Un come quando premo Freccia su (mi mette in modalità comando e poi in modalità inserimento alla fine della riga).
Domanda:qualcuno è stato in grado di far funzionare i tasti freccia in modo intuitivo in modalità Vi in ksh
di OpenBSD ?
Risposta accettata:
Ho fatto una rapida incursione in /usr/src/bin/ksh
sul mio sistema OpenBSD, visto che avevo comunque controllato i sorgenti effettivi. Ho dato una rapida occhiata a c_ksh.c
, emacs.c
e vi.c
e sembra che la modalità Vi sia stata adattata a pdksh
da nsh
ad un certo punto (intorno al 1989/1990). Le parole esatte usate sono
/* $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
*
*/
Il bind
-able tutte le funzioni risiedono in emacs.c
, così come x_bind()
funzione che viene chiamata da bind
integrato, mentre vi.c
sembra avere una propria implementazione di alcuni di essi con nomi diversi che non vengono chiamati da x_bind()
.
Pertanto penso di poter concludere che il bind
builtin non è operativo in modalità Vi in questa particolare shell.
AGGIORNAMENTO (04-02-2018):dopo averlo segnalato a openbsd-misc
list, è stato confermato che bind
in effetti non fa nulla nella modalità di modifica della riga di comando di Vi. Verrà inserita una patch per modificare ksh
manuale su OpenBSD in modo che questo sia menzionato:
bind string=[editing-command] ...
In Modalità di modifica di Emacs , il comando di modifica specificato è associato a
alla string
specificata . Immissione futura della string
farà immediatamente richiamare il comando di modifica
. Le associazioni non hanno effetto
in Modalità di modifica Vi .