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 :
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;)
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.
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:
Plus de détails, y compris comment installer, sont disponibles sur https://github.com/calid/bash
.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 _
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é.
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é