Eu uso bindkey -v
(para bash-ers set -o vi
que também funcionam no zsh) ou vi (m). mas me incomoda que eu não tenha nenhuma dica visual para me dizer se estou no modo de inserção ou modo de comando. Alguém sabe como posso fazer meu prompt exibir o modo?
44
CTRL+C
no modo vi-command, o prompt será redefinido, mas indicará que você está no modo de comando quando estiver realmente no modo de inserção.zle-line-init
deve sempre mudar o indicador para inserir o modo. Por algum motivo,$KEYMAP
não é atualizado corretamente quando o zle-line-init é chamado.zle reset-prompt
excluirá 1 (ou mais) linhas acima o prompt (se o prompt é multilinha), quando redesenhar :( Este é um desmancha-prazeres para mim.Você já encontrou o
zle-keymap-select
que é executado sempre que o modo muda. Você pode usá-lo para definir outro indicador visual que não seja o prompt, dependendo do suporte do seu terminal (e do seu gosto no visor do indicador de modo, é claro).Existe um recurso padrão terminfo para alterar a forma do cursor. No entanto, alguns terminais exibem o mesmo cursor nos dois modos. A noção do Xterm de um cursor menos visível é fazê-lo piscar (e isso deve ser ativado com o
-bc
argumento oucursorBlink
recurso da linha de comando ).Em alguns terminais, você também pode alterar a cor do cursor com
print -n '\e]12;pink\a'
(por nome da cor) ouprint -n '\e]12;#abcdef\a'
(por especificação RGB). Essas sequências são descritas na documentação do xterm, noctlseqs
arquivo; emuladores de terminal modernos normalmente emulam o xterm, embora possam não suportar todos os seus recursos.fonte
main
emKEYMAP
vez deviins
, não sei por quê.main
é um apelido paraviins
ouemacs
dependendo do zsh pensar que seu editor favorito era vi ou não quando foi iniciado. Eu pensei que usariaviins
ao mudar o modo de voltavicmd
, mas parece que ele usa em seumain
lugar. Atualizada.zle-line-init
(ou qualquer outra alternativa), poiszle-keymap-select
não é chamado se pressionar enter altera o mapa de teclas.Para as pessoas que têm problemas ao usar o prompt de redefinição com prompts de múltiplas linhas, isso funcionou para mim: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html Em combinação com https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line Acabei fazendo:
fonte
você pode experimentar o VimMode
fonte
Isto é o que eu uso para alterar o cursor entre as formas 'Block' e 'Beam' no zsh:
(Testado com cupins , gnome-terminal e mate-terminal )
fonte
add-zsh-hook
assim: gist.github.com/MatrixManAtYrService/...Outra solução para alterar a forma do cursor entre o feixe I e o bloco (para sublinhado, use
\033[4 q
). Adicione isso ao seu~/.zshrc
.Modificado em https://bbs.archlinux.org/viewtopic.php?id=95078 . Testado no terminal gnome 3.22.
Atualizar
Ainda outra solução para alterar as formas do cursor pode ser encontrada aqui . Aparentemente, este funciona para o iTerm2, que não tenho como testar, mas adicioná-lo aqui, caso seja útil para outra pessoa. A adição final ao seu
~/.zshrc
seriafonte
Atualmente, estou usando o Zsh com o tema Bullet Train . Seguindo o exemplo da resposta de Sebastian Blask , acabei com o código abaixo
Isso mudará apenas o padrão $ para as letras N para o modo normal e I para o modo de inserção.
Esta imagem é um exemplo quando, no modo normal, pressiono Ctrl+ C:
fonte
Aqui está mais uma versão, baseada no post de Sebastian Blask . O objetivo era que fosse o menos intrusivo possível, pois todas as outras soluções que encontrei usavam linhas extras, status à direita ou caracteres adicionados.
Isso simplesmente muda a cor de
$
branco para vermelho quando o modo normal está ativado. Edite o prompt ao seu gostofonte
Uma versão para
oh-my-zsh
usuáriosExiste um plugin
oh-my-zsh
chamadovi-mode
que pode ser encontrado aqui:robbyrussell / oh-my-zsh / plugins / modo vi
Eu uso o Antigen para gerenciar meus plugins, então incluí-lo foi tão simples quanto adicionar isso ao meu
.zshrc
:fonte
O plug - in zsh-vim-mode pode mostrar um indicador para os modos de inserção, comando, pesquisa, substituição e visual. Ele usa a técnica básica de outras respostas para conectar-se aos vários ganchos do ZLE (zle-keymap-select, zle-isearch-update, etc.). Ele verifica o
[[ $ZLE_STATE = *overwrite* ]]
modo de substituição. Verifica$REGION_ACTIVE
para identificar o modo visual.A lógica é complicada por algumas peculiaridades de como o ZSH dispara eventos ao sair do modo isearch.
Outro recurso interessante do módulo é a capacidade de alterar a forma e a cor do cursor com base no modo. Por exemplo, você pode usar uma barra vertical no modo INSERT e um sublinhado piscando no modo SEARCH.
fonte