Como posso configurar o modo vi do ZSH para persistir o estado entre os comandos?

6

Estou ciente de como configurar o editor de linha padrão do ZSH para usar atalhos de teclado do tipo vi ...

bindkeys -v

... e até o padrão para cada novo prompt estar no modo de comando ao invés de inserir mod por padrão ...

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

... e na maioria das vezes eu prefiro esse comportamento. No entanto, faz algumas coisas muito estranhas. Por exemplo, colando comandos multi-linha em um terminal para execução imediata torna-se quase impossível.

Como posso configurá-lo para que o modo seja persistente? Eu gostaria que o modo em que estava quando eu executei uma linha seja o modo padrão para a próxima linha.

    
por Caleb 25.01.2014 / 13:16

1 resposta

5

Talvez como:

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 ainda mais simples:

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
    
por 25.01.2014 / 15:14