Stel Bash ' s vi-mode standaard in op “ normaal ” Vi-modus (niet “ insert ”), en plaats de cursor aan het begin van de regel, wat KornShell nabootst

Ik probeer Bash zover te krijgen dat het het gedrag van KornShell93 (ksh) nabootst wanneer de shells in Vi command line editing mode staan.

KornShell standaard ingesteld op “Vi normale modus” (ook bekend als “commando” -modus) en het plaatst ook de cursor helemaal aan het begin van de opdrachtregel wanneer u achteruit door de opdrachtregelgeschiedenis gaat. Dit is in tegenstelling tot Bash, dat u in “Vi insert mode “en aan het einde van de opdrachtregel.

In de antwoorden op” Bash vi-modusconfiguratie naar standaard commandomodus ” , concludeerde het vrijwel dat er geen manier is om Bash standaard in “Vi normal mode” te zetten als Vi command line editing is ingeschakeld.

Dit was meer dan vijf jaar s geleden, en ik vraag me af of dit sindsdien is veranderd?

En hoe zit het met het automatisch plaatsen van de cursor aan het begin van de opdrachtregel? Is er een voor mij onbekende Readline-magie die me hierbij kan helpen?

Ik gebruik Bash versie 4.4.5 (1) -release gecompileerd vanaf de broncode (de OpenBSD shells/bash port) op OpenBSD-current (januari 2017).

Reacties

  • Als datapunt gedraagt Zsh zich als Bash ^ H ^ H ^ H ^ HReadline, niet zoals ksh. (Bash ' s gedrag is niet ' t echt Bash ' s, het ' s Readline ' s, die Bash gebruikt.)

Answer

Het lijkt erop dat er geen adequate manier is om een Esc in de opdrachtregel in te voegen.

In vi-insert de meeste alpha/numeric -toetsen worden gebruikt. Esc is vrij ver weg, en elk akkoord (zoals Alt-j ( wat werkt)) lijken complexer dan gewenst. Er is dus een manier om twee sleutels te converteren naar een configuratie rable string.

De oplossing werkt door het idee te gebruiken van Dit antwoord

Voeg dit gewoon toe aan .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 

Daardoor maakt het niet uit waar je begint, emacs of vi, door op beide jk te drukken, kom je in vi-command mode aan de begin van de regel .

Bovendien kunt u overschakelen naar emacs modus met Esc e .

Reacties

  • Ik kan ' stem dit niet genoeg op! Ik heb de emacs-dingen verwijderd en ik heb alleen de " jk " snelkoppeling nodig, ik hoef ' t " kj " nodig, dus ik heb gewoon: 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 en nu ben ik blij!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *