Comment puis-je configurer le mode vi de ZSH pour conserver l'état entre les commands?

Je suis conscient de la façon de définir l'éditeur de ligne par défaut de ZSH pour utiliser des raccourcis de type vi …

bindkeys -v 

… et même de par défaut chaque nouvelle invite pour être en mode command au lieu d'insert mod par défaut …

 zle-line-init() { zle -K vicmd; } zle -N zle-line-init 

… et la plupart du time je préfère ce comportement. Cependant, cela rend certaines choses très gênantes. Par exemple, coller des commands multilignes dans un terminal pour une exécution immédiate devient presque impossible.

Comment puis-je le configurer pour que le mode soit persistant? Je voudrais quel que soit le mode quand j'ai exécuté une ligne devrait être le mode par défaut pour la ligne suivante.

Peut-être comme:

 vicmd-accept() { prev_mode=vicmd; zle .accept-line } viins-accept() { prev_mode=viins; zle .accept-line } zle-line-init() { zle -K ${prev_mode:-viins} } zle -N viins-accept zle -N vicmd-accept zle -N zle-line-init bindkey -M viins \\r viins-accept bindkey -M vicmd \\r vicmd-accept 

Ou même plus simple:

 accept-line() { prev_mode=$KEYMAP; zle .accept-line } zle-line-init() { zle -K ${prev_mode:-viins} } zle -N accept-line zle -N zle-line-init