Nastavit Bash ' s vi-mode jako výchozí na “ normální ” Vi režim (ne “ vložte ”) a umístěte kurzor na začátek řádku napodobováním KornShell

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ý!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *