Snažím se přimět Bash napodobit chování KornShell93 (ksh
), když jsou mušle v režimu úprav příkazového řádku Vi.
KornShell výchozí je „normální režim Vi“ (neboli „příkazový“ režim) a kurzor také umístí na samý začátek příkazového řádku, když se vrací zpět v historii příkazového řádku. To je na rozdíl od Bash, který vás přepne do „Vi vložte režim „a na konec příkazového řádku.
V odpovědích na“ Konfigurace režimu Bash vi na výchozí režim příkazového režimu “ , do značné míry dospěl k závěru, že neexistuje způsob, jak nastavit Bash jako výchozí do „normálního režimu Vi“, když je povolena editace příkazového řádku Vi.
To bylo více než pět let před lety a zajímalo by mě, jestli se to od té doby změnilo?
A co automatické umístění kurzoru na začátek příkazového řádku? Existuje pro mě nějaká neznámá magie Readline, která mi s tím může pomoci?
Používám Bash verze 4.4.5 (1) – vydání kompilované ze zdroje (OpenBSD shells/bash
port) na OpenBSD-current (leden 2017).
Komentáře
- Jako datový bod se Zsh chová jako Bash ^ H ^ H ^ H ^ HReadline, ne jako ksh. (Chování Bash ' není ' opravdu Bash ' s, ' s Readline ' s, které Bash používá.)
Odpověď
Zdá se, že neexistuje adekvátní způsob vložení Esc do příkazového řádku.
Zatímco v vi-insert
používá se většina alpha/numeric
klíčů. Esc je docela daleko a jakýkoli akord (například Alt-j
( který funguje)) se zdají složitější, než je požadováno. Existuje tedy způsob, jak dva klíče převést na configu Řetězcový řetězec.
Toto řešení funguje pomocí myšlenky z Tato odpověď
Stačí přidat toto do .inputrc
:
set editing-mode vi set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 set keymap emacs "\ee": vi-editing-mode "jk": "\eejk" "kj": "\eejk" set keymap vi-insert "\ee": emacs-editing-mode "jk": vi-movement-mode "kj": vi-movement-mode set keymap vi-command "\ee": emacs-editing-mode
Tím, bez ohledu na to, kde začnete emacs
nebo vi
stisknutím obou jk
přejdete do režimu příkazového režimu na začátek řádku .
Navíc umožňuje přepnout do režimu emacs
pomocí Esc – e .
Komentáře
- Mohu ' nehlasovat dostatečně! Zbavil jsem se věcí emacs a potřebuji pouze " jk " zkratku, ' t " kj ", takže jednoduše mám:
set editing-mode vi
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2
set keymap vi-insert
"jk": vi-movement-mode
a teď jsem šťastný!