Gør Bash ' s vi-mode som standard til “ normal ” Vi-tilstand (ikke “ indsæt ”), og placer markøren ved starten af linjen, efterligner KornShell

Jeg prøver at få Bash til at efterligne KornShell93s opførsel (ksh), når skaller er i Vi-kommandolinjediteringstilstand.

KornShell er som standard “Vi normal tilstand” (aka “kommando” -tilstand), og det placerer også markøren i starten af kommandolinjen, når du går baglæns gennem kommandolinjens historie. Dette er i modsætning til Bash, som sætter dig i “Vi insert mode “og i slutningen af kommandolinjen.

I svarene til” Bash vi-tilstandskonfiguration til standard til kommandotilstand ” , konkluderede det stort set, at der ikke er nogen måde at have Bash som standard “Vi normal tilstand”, når Vi kommandolinjeditering er aktiveret.

Dette varede mere end fem år s siden nu, og jeg spekulerer på, om dette er ændret siden da?

Og hvad med automatisk at placere markøren i starten af kommandolinjen? Er der nogle for mig ukendte Readline-magier, der kan hjælpe mig med dette?

Jeg bruger Bash version 4.4.5 (1) -udgivelse fra kilden (OpenBSD shells/bash -port) på OpenBSD-nuværende (januar 2017).

Kommentarer

  • Som datapunkt opfører Zsh sig som Bash ^ H ^ H ^ H ^ HReadline, ikke som ksh. (Bash ' s adfærd er ikke ' t virkelig Bash ' s, det ' s Readline ' s, som Bash bruger.)

Svar

Det ser ud til, at der ikke er nogen tilstrækkelig måde at indsætte en Esc i kommandolinjen.

Mens du er i vi-insert mest alpha/numeric taster bruges. Esc er ret langt væk, og enhver akkord (som Alt-j ( hvilket virker)) virker mere kompleks end ønsket. Så der er en måde at få to nøgler til at konvertere til en configu rable streng.

Løsningen fungerer ved at bruge ideen fra Dette svar

Føj dette bare til .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 

Ved det, uanset hvor du starter, skal du enten emacs eller vi, ved at trykke på begge dele jk placeres du i vi-kommandotilstand start af linjen .

Derudover giver det dig mulighed for at skifte til emacs -tilstand med Esc e .

Kommentarer

  • Jeg kan ' t opvote dette nok! Jeg slap af emacs-tingene, og jeg har kun brug for " jk " genvej, jeg don ' t har brug for " kj ", så jeg har simpelthen: 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 og nu er jeg glad!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *