Gjør Bash ' s vi-mode som standard til “ normal ” Vi-modus (ikke “ sett inn ”), og plasser markøren ved begynnelsen av linjen, etterlign KornShell

Jeg prøver å få Bash til å etterligne oppførselen til KornShell93 (ksh) når skallene er i Vi-kommandolinjeredigeringsmodus.

KornShell er som standard «Vi normal modus» (aka «kommandomodus») og den plasserer også markøren helt i begynnelsen av kommandolinjen når du går bakover gjennom kommandolinjeloggen. Dette er i motsetning til Bash, som setter deg i «Vi innsettingsmodus «og på slutten av kommandolinjen.

I svarene til» Bash vi-moduskonfigurasjon til standard til kommandomodus » , konkluderte det ganske mye med at det ikke er noen måte å ha Bash som standard Vi-modus når Vi kommandolinjeredigering er aktivert.

Dette var mer enn fem år s siden nå, og jeg lurer på om dette har endret seg siden da?

Og hva med å plassere markøren automatisk ved starten av kommandolinjen? Er det noen for meg ukjente Readline-magier som kan hjelpe meg med dette?

Jeg bruker Bash versjon 4.4.5 (1) – utgivelse fra kilden (OpenBSD shells/bash port) på OpenBSD-gjeldende (januar 2017).

Kommentarer

  • Som datapunkt oppfører Zsh seg som Bash ^ H ^ H ^ H ^ HReadline, ikke som ksh. (Bash ' s oppførsel er ikke ' t virkelig Bash ' s, det ' s Readline ' s, som Bash bruker.)

Svar

Det ser ut til at det ikke er tilstrekkelig måte å sette inn en Esc i kommandolinjen.

Mens du er i vi-insert de fleste alpha/numeric -tastene brukes. Esc er ganske langt borte, og ethvert akkord (som Alt-j ( som fungerer)) virker mer komplisert enn ønsket. Så det er en måte å gjøre to -taster konvertert til en configu rabel streng.

Løsningen fungerer ved å bruke ideen fra Dette svaret

Bare legg dette 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 

Av det, uansett hvor du starter, emacs eller vi, ved å trykke på begge jk vil du plassere deg i vi-kommandomodus på starten på linjen .

I tillegg lar den deg bytte til emacs -modus med Esc e .

Kommentarer

  • Jeg kan ' t oppvote dette nok! Jeg ble kvitt emacs-tingene og jeg trenger bare " jk " snarveien, jeg har ikke ' t trenger " kj ", så jeg har rett og slett: 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 nå er jeg lykkelig!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *