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!