J'utilise bindkey -v
(pour les bashers, set -o vi
je pense que ça marche aussi en zsh) ou en mode vi (m). mais cela ne me permet pas de savoir si je suis en mode insertion ou en mode commande. Est-ce que quelqu'un sait comment je peux faire en sorte que mon invite affiche le mode?
44
CTRL+C
en mode vi-commande, l'invite se réinitialisera, mais vous indiquera que vous êtes en mode commande lorsque vous êtes vraiment en mode insertion.zle-line-init
devrait toujours changer l'indicateur en mode insertion. Pour une raison quelconque,$KEYMAP
n’est pas mis à jour correctement lors de l’appel de zle-line-init.zle reset-prompt
supprimera 1 (ou plusieurs) lignes au-dessus de l'invite (si votre invite est multiligne) lors du redessinage :( Ceci est un obstacle pour moi.Vous avez déjà trouvé
zle-keymap-select
ce qui est exécuté à chaque changement de mode. Vous pouvez l'utiliser pour définir un autre indicateur visuel que l'invite, selon ce que votre terminal prend en charge (et votre goût de l'affichage de l'indicateur de mode, bien sûr).Il existe une capacité standard terminfo pour changer la forme du curseur. Cependant, certains terminaux affichent le même curseur dans les deux modes. La notion de Xterm d'un curseur moins visible consiste à le faire clignoter (et cela doit être activé avec l'
-bc
argument de ligne de commande ou lacursorBlink
ressource).Avec certains terminaux, vous pouvez également changer la couleur du curseur avec
print -n '\e]12;pink\a'
(par nom de couleur) ouprint -n '\e]12;#abcdef\a'
(par spécification RGB). Ces séquences sont décrites dans la documentation xterm, dans lectlseqs
fichier; Les émulateurs de terminaux modernes émulent généralement xterm, même s’ils ne prennent peut-être pas en charge toutes ses fonctionnalités.la source
main
pourKEYMAP
au lieu deviins
, je ne sais pas pourquoi.main
est un alias pourviins
ouemacs
selon si zsh pensait que votre éditeur favori était vi ou non quand il a commencé. Je pensais qu'il serait utile deviins
changer de modevicmd
, mais il semble que ce soit le casmain
. Mis à jour.zle-line-init
(ou toute autre alternative) carzle-keymap-select
ne pas être appelé si frapper entrer change le clavier.Pour les personnes ayant des problèmes d'utilisation de reset-prompt avec des invites multilignes, cela a fonctionné pour moi: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html En combinaison avec https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line J'ai fini par faire:
la source
vous pouvez essayer VimMode
la source
C'est ce que j'utilise pour changer le curseur entre les formes 'Block' et 'Beam' dans zsh:
(Testé avec Termite , gnome-terminal et mate-terminal )
la source
add-zsh-hook
comme ceci: gist.github.com/MatrixManAtYrService/...Une autre solution pour changer la forme du curseur entre I-beam et block (pour le trait de soulignement, utilisez
\033[4 q
). Ajoutez ceci à votre~/.zshrc
.Modifié à partir de https://bbs.archlinux.org/viewtopic.php?id=95078 . Testé dans gnome-terminal 3.22.
Mise à jour
Une autre solution pour changer les formes du curseur peut être trouvée ici . Celui-ci fonctionne apparemment pour iTerm2, ce que je n'ai pas les moyens de tester, mais l'ajouter ici au cas où il serait utile à quelqu'un d'autre. Le dernier ajout à votre
~/.zshrc
seraitla source
J'utilise actuellement le thème Zsh with Bullet Train . Suivant l'exemple donné par la réponse de Sebastian Blask , je me suis retrouvé avec le code ci-dessous
Ceci ne changera que les valeurs par défaut de $ par les lettres N en mode normal et I en mode insertion.
Cette image est un exemple lorsque, en mode normal, j'appuie sur Ctrl+ C:
la source
Voici encore une autre version, basée sur le post de Sebastian Blask . Cela devait être aussi peu intrusif que possible, car toutes les autres solutions utilisaient des lignes supplémentaires, un statut à droite ou des caractères ajoutés.
Cela change simplement la couleur
$
du blanc au rouge lorsque le mode normal est activé. Modifiez l'invite à votre convenancela source
Une version pour les
oh-my-zsh
utilisateursIl y a un plugin pour
oh-my-zsh
appelévi-mode
qui peut être trouvé ici:robbyrussell / oh-my-zsh / plugins / vi-mode
J'utilise Antigen pour gérer mes plugins, donc l'inclure était aussi simple que de l'ajouter à mon
.zshrc
:la source
Le plug - in zsh-vim-mode est capable d'afficher un indicateur pour les modes d'insertion, de commande, de recherche, de remplacement et visuel. Il utilise la technique de base des autres réponses pour se connecter aux différents hooks ZLE (zle-keymap-select, zle-isearch-update, etc.). Il vérifie le
[[ $ZLE_STATE = *overwrite* ]]
mode de remplacement. Il vérifie$REGION_ACTIVE
pour identifier le mode visuel.La logique est compliquée par certaines bizarreries sur la façon dont ZSH déclenche des événements en quittant le mode isearch.
Une autre fonctionnalité intéressante du module est la possibilité de changer la forme et la couleur du curseur en fonction du mode. Par exemple, vous pouvez utiliser une barre verticale en mode INSERT et un soulignement clignotant en mode SEARCH.
la source