Setați Bash ' s în mod implicit în modul vi la “ normal ” modul Vi (nu “ introduceți ”) și plasați cursorul la începutul liniei, imitând KornShell

Încerc să-l fac pe Bash să imite comportamentul lui KornShell93 (ksh) când shell-urile sunt în modul de editare a liniei de comandă Vi.

implicit la „Vi normal mode” (aka „command” mode) și, de asemenea, plasează cursorul chiar la începutul liniei de comandă atunci când treceți înapoi prin istoricul liniei de comandă. Acest lucru este în contrast cu Bash, care vă plasează în „Vi insert mode „și la sfârșitul liniei de comandă.

În răspunsurile la” Configurarea modului Bash vi pentru a fi implicit în modul de comandă ” , s-a ajuns aproape la concluzia că nu există nicio modalitate de a avea Bash implicit la „Vi normal mode” când editarea liniei de comandă Vi este activată.

Acesta a durat mai mult de cinci ani acum s, și mă întreb dacă s-a schimbat acest lucru de atunci?

Și ce zici de plasarea automată a cursorului la începutul liniei de comandă? Există vreo magie Readline neștiută care mă poate ajuta în acest sens?

Folosesc versiunea Bash 4.4.5 (1), lansată din sursă (OpenBSD shells/bash port) pe OpenBSD-current (ianuarie 2017).

Comentarii

  • Ca punct de date, Zsh se comportă ca Bash ^ H ^ H ^ H ^ HReadline, nu ca ksh. (Bash ' s behavior isn ' t într-adevăr Bash ' s, ' s Readline ' s, pe care Bash le folosește.)

Răspuns

Se pare că nu există un mod adecvat de a insera un Esc în linia de comandă.

În timp ce în vi-insert sunt folosite majoritatea tastelor alpha/numeric. Esc este destul de departe și orice acord (cum ar fi Alt-j ( care funcționează)) par mai complexe decât se dorește. Deci, există o modalitate de a face două chei convertite într-o rable string.

Soluția funcționează utilizând ideea din Acest răspuns

Doar adăugați acest lucru la .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 

Prin aceasta, indiferent de unde începeți, fie emacs sau vi, apăsând pe ambele jk vă veți plasa în modul vi-command la începutul liniei .

În plus, vă permite să treceți la modul emacs cu Esc e .

Comentarii

  • Pot ' votează suficient acest lucru! Am scăpat de lucrurile emacs și am nevoie doar de " jk " comandă rapidă, nu ' t need " kj ", așa că pur și simplu am: 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 și acum sunt fericit!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *