Próbuję zmusić Bash do naśladowania zachowania KornShell93 (ksh
), gdy powłoki są w trybie edycji wiersza poleceń Vi.
KornShell domyślnie „Vi tryb normalny” (inaczej „tryb poleceń”), a także umieszcza kursor na samym początku wiersza poleceń podczas przechodzenia wstecz przez historię wiersza poleceń. W przeciwieństwie do Bash, który umieszcza cię w „Vi insert mode ”i na końcu wiersza poleceń.
W odpowiedziach na„ Konfiguracja trybu Bash vi do domyślnego trybu poleceń ” , doszło do wniosku, że nie ma sposobu, aby Bash był domyślnie ustawiony na „tryb normalny Vi”, gdy włączona jest edycja wiersza poleceń Vi.
To było ponad pięć lat s temu, teraz i zastanawiam się, czy to się zmieniło od tamtego czasu?
A co z automatycznym umieszczaniem kursora na początku wiersza poleceń? Czy jest jakaś nieznana mi magia Readline, która może mi w tym pomóc?
Używam Bash w wersji 4.4.5 (1) -release skompilowanej ze źródeł (OpenBSD shells/bash
port) w OpenBSD-current (styczeń 2017).
Komentarze
- Jako punkt danych Zsh zachowuje się jak Bash ^ H ^ H ^ H ^ HReadline, inaczej niż ksh. (Bash ' zachowuje się nie ' t naprawdę Bash ' s, to ' s Readline ' s, których używa Bash.)
Odpowiedź
Wygląda na to, że nie ma odpowiedniego sposobu na wstawienie Esc w linii poleceń.
W vi-insert
większość alpha/numeric
klawiszy jest używanych. Esc jest dość daleko, a każdy akord (np. Alt-j
( który działa)) wydaje się bardziej złożony niż jest to pożądane. Jest więc sposób na przekonwertowanie dwóch kluczy na plik configu rable string.
Obejście polega na wykorzystaniu pomysłu z tej odpowiedzi
Po prostu dodaj to 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
Niezależnie od tego, gdzie zaczniesz emacs
lub vi
, naciśnięcie obu jk
spowoduje przejście do trybu poleceń vi na początek wiersza .
Dodatkowo umożliwia przełączenie się do trybu emacs
za pomocą Esc – e .
Komentarze
- Mogę ' Zagłosuj wystarczająco! Pozbyłem się emacsa i potrzebuję tylko skrótu " jk ", nie ' t potrzebuję " kj ", więc mam po prostu:
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 teraz jestem szczęśliwy!