web-dev-qa-db-fra.com

Différent bash Invite pour différents modes d'édition vi?

Lorsque vous utilisez le mode vi (set -o vi) avec Bash, il serait agréable d’avoir une invite qui dépend du mode dans lequel vous vous trouvez (insertion ou commande). Comment trouve-t-on ce mode d'édition?

B.t.w, cela semble être possible dans ZSH :

108
Thomas

Fresh bash 4.3 et readline 6.3 ont quelque chose pour vous les gars.

4.  New Features in Readline
j.  New user-settable variable, show-mode-in-Prompt, adds a characters to the
    beginning of the Prompt indicating the current editing mode.

Donc mettre

set show-mode-in-Prompt on

dans/etc/inputrc ou ~/.inputrc (thx stooj) devrait affecter tous vos programmes activés pour readline;)

59
eMPee584

Après une recherche dans Google, une recherche dans la page de manuel bash, puis dans le code source de bash (lib/readline/vi_mode.c), il semble qu’il n’existe aucun moyen simple de modifier l’invite lors du passage du mode insertion au mode commande. Il semble que quelqu'un puisse éventuellement corriger la source bash, car il y a des appels à démarrer et à arrêter les modes dans la source.

En voyant votre message, cela m'a intéressé au réglage du mode bash vi. J'aime vi et pourquoi ne pas en ligne de commande. Cependant, il semble que nous devrons savoir si nous sommes en mode insertion sans modification rapide (c'est pourquoi nous disons de nombreux messages sur le forum). Pour ce que vous valez, vous êtes toujours en mode insertion à moins que vous n'appuyiez sur ESC. C'est un peu plus facile, mais pas toujours aussi intuitif.

Je soulève votre question car je suis intéressé à voir où cela va.

19
Jeremy Heslop

Bash 4.4/Readline 7.0 ajoutera un support pour les chaînes de mode configurables par l'utilisateur .

Vous pouvez essayer les versions bêta, mais elles semblent un peu buggées pour le moment. En outre, ils ne prennent pas encore en charge la spécification de l'endroit où vous souhaitez que l'indicateur de mode apparaisse dans l'invite (ce qui, à mon avis, est la fonction tueur).

Si vous ne voulez pas attendre et que vous n'avez pas peur d'une petite compilation, j'ai publié des versions corrigées de bash 4.3 et de readline 6.3 sur github qui prennent en charge cette fonctionnalité.

Avec les versions corrigées, vous pouvez faire des choses comme ceci:

 enter image description here

Plus de détails, y compris comment installer, sont disponibles sur https://github.com/calid/bash

18
Dylan Cali

Invite multiligne et .inputrc

Inputrc a la possibilité d'afficher un + pour insert et un : pour le mode normal, en ajoutant set show-mode-in-Prompt on dans le ~/.inputrc écrit par eMPee584, mais cela ne fonctionne pas correctement avec Prompt multiline (avec les anciennes versions de bash et readline).

Une solution consiste à avoir une seule ligne PS1 (>) et une fonction qui répercute quelque chose avant l'invite. Il est intégré à bash et appelé Prompt_COMMAND.

function Prompt {
    PS1=' > '
    echo -e "$(date +%R)  $PWD"
}

Prompt_COMMAND='Prompt' 

Les chaînes d'invite habituelles ne sont pas disponibles dans echo de printf. Le -e est destiné à interpréter les codes de couleur, et il n'est pas nécessaire d'ajouter \[ ou \], ce qui ne fonctionne quand même pas.

Mode d'insertion:

20:57   /home/sshbio/dotfiles/bash
+ > _

Mode normal:

20:57   /home/sshbio/dotfiles/bash
: > _

En appuyant sur l'onglet, seule la PS1 est répétée, ce qui est logique pour moi:

20:57   /home/sshbio/dotfiles/bash
+ > ls _
bashrc      bash_profile     inputrc
+ > ls _

Preview(La source)

7
user3034472

J'essaie également d'obtenir un indicateur pour le mode BASH vi, et vous avez tous appris que le son était simple et qu'il n'y avait aucun moyen de le faire pour le moment.

Mon approche actuelle est la suivante: appuyez sur 'a' lorsque je ne suis pas sûr du mode. SI 'a' apparaît après BASH PROMOT, j'apprends que je suis en mode 'INSERT'. ALORS, je clique sur 'RETURN' et continue. C'est un moyen facile pour moi de résoudre le petit ennui.

En passant, je 'alias a =' cal ', ou quelque chose d'autre pour donner au hit vide' un 'peu d'utilité.

0
Andrew_1510

pour une invite multiligne comme ceci image

mon travail est comme ça

mon invite bash

export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "

.inputrc

set show-mode-in-Prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"

espérons que cela vous a aidé

0
mark