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!