Jag försöker få Bash att efterlikna beteendet hos KornShell93 (ksh
) när skalen är i Vi-kommandoradsredigeringsläge.
KornShell är som standard ”Vi normalt läge” (aka ”kommandoläge”) och det placerar också markören i början av kommandoraden när du går bakåt genom kommandoradshistoriken. Detta står i kontrast till Bash, vilket sätter dig i ”Vi infoga läge ”och i slutet av kommandoraden.
I svaren på” Bash vi-läge konfiguration till standard till kommandoläge ” , drog det ganska mycket slutsatsen att det inte finns något sätt att ha Bash-standard till ”Vi normalt läge” när Vi-kommandoradsredigering är aktiverad.
Detta var mer än fem år s sedan nu, och jag undrar om detta har förändrats sedan dess?
Och hur är det med att automatiskt placera markören i början av kommandoraden? Finns det några för mig okända Readline-magier som kan hjälpa mig med detta?
Jag använder Bash version 4.4.5 (1) -release sammanställd från källan (OpenBSD shells/bash
-port) på OpenBSD-aktuell (januari 2017).
Kommentarer
- Som datapunkt beter Zsh sig som Bash ^ H ^ H ^ H ^ HReadline, inte som ksh. (Bash ' s beteende är inte ' t verkligen Bash ' s, det ' s Readline ' s, som Bash använder.)
Svar
Det verkar som om det inte finns något adekvat sätt att infoga en Esc i kommandoraden.
I vi-insert
de flesta alpha/numeric
tangenter används. Esc är ganska långt borta och alla ackord (som Alt-j
( som fungerar)) verkar mer komplex än önskat. Så det finns ett sätt att göra två -tangenter konvertera till en konfigu rabelsträng.
Lösningen fungerar genom att använda idén från Detta svar
Lägg bara till detta i .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
På det sättet, oavsett var du börjar antingen emacs
eller vi
, om du trycker på båda jk
placeras du i vi-kommandoläge början av raden .
Dessutom kan du växla till emacs
-läge med Esc – e .
Kommentarer
- Jag kan ' t upvote detta nog! Jag blev av med emacs-grejerna och jag behöver bara genvägen " jk ", jag saknar ' t behöver " kj ", så jag har helt enkelt:
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
och nu är jag glad!