Gör Bash ' s vi-mode standard till “ normalt ” Vi-läge (inte “ infoga ”) och placera markören i början av raden, efterlikna KornShell

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!

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *