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