Používám výchozí ksh
na OpenBSD 6.2 (založeno na pdksh
) s povoleným režimem úprav příkazového řádku Vi.
Snažím se, aby klávesy se šipkami fungovaly správně jako doplněk k h , l , j a k (když jsem na klávesnici Dvorak). Pokud mohu říci, vůbec nefungují. Nezáleží na tom, zda jsem v režimu „vstupu“ nebo „příkazu“.
Mezi aktuální klávesové zkratky patří:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Toto jsou také znaky sekvenované mými šipkami, pokud použiji Ctrl+V Šipka .
Klávesy se šipkami fungují podle očekávání v režimu úprav příkazového řádku Emacsu, ale jako dlouholetý uživatel Vi se při jejich používání cítím poněkud ochromen.
Mám pocit, že Escape odeslaný klávesou se šipkou je interpretován jako kdybych stiskl Esc … Ekvivalentní chování získám ručním zadáním např. Esc [ A jako když stisknu šipka nahoru (umístí mě do příkazového režimu a poté do režimu vkládání na konec řádku).
Otázka:Dokázal někdo přimět klávesy se šipkami, aby fungovaly intuitivně v režimu Vi v ksh
OpenBSD ?
Přijatá odpověď:
Udělal jsem rychlý vpád do /usr/src/bin/ksh
na mém systému OpenBSD, protože jsem stejně nechal zkontrolovat skutečné zdroje. Zběžně jsem se podíval na c_ksh.c
, emacs.c
a vi.c
a vypadá to, jako by byl režim Vi přemontován do pdksh
z nsh
někdy (kolem roku 1989/1990). Přesná použitá slova jsou
/* $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
-able funkce všechny žijí v emacs.c
, stejně jako x_bind()
funkce, která je volána pomocí bind
vestavěný, zatímco vi.c
zdá se, že má vlastní implementaci některých z nich pod různými názvy, které nejsou volány z x_bind()
.
Proto si myslím, že mohu dojít k závěru, že bind
vestavěný je v tomto konkrétním prostředí neoperativní v režimu Vi.
AKTUALIZACE (2018-02-04):Po nahlášení této události na openbsd-misc
seznam, bylo potvrzeno, že bind
skutečně nedělá nic v režimu úprav příkazového řádku Vi. Vstoupí patch, který změní ksh
manuál na OpenBSD, takže toto je zmíněno:
bind string=[editing-command] ...
V režimu úprav Emacs , zadaný editační příkaz je vázán na
danýstring
. Budoucí vstupstring
způsobí okamžité vyvolání editačního příkazu
. Vazby nemají žádný
účinek v režimu úprav Vi .