Eu uso o modo vi em oh-my-zsh com o tema af-magic .
Quero que o estilo do cursor indique se estou no modo normal (bloco) ou no modo de inserção (feixe), tanto em zsh
quanto em vim
.
Isto é o que eu tenho até agora:
No meu ~/.zshrc
:
# vim mode config
# ---------------
# Activate vim mode.
bindkey -v
# Remove mode switching delay.
KEYTIMEOUT=5
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
# Use beam shape cursor on startup.
echo -ne '\e[5 q'
# Use beam shape cursor for each new prompt.
preexec() {
echo -ne '\e[5 q'
}
Conforme encontrado aqui .
Em vim
, eu uso Vundle e terminus .
Com essas configurações, ambos funcionam zsh
como vim
deveriam quando considerados de forma independente. No entanto, quando entro no modo vim
de inserção , inicia no modo normal (como deveria), mas ainda mostra o cursor da forma do feixe. Da mesma forma, quando saio , volto para o modo de inserção , mas o cursor ainda está em forma de bloco (já que o último modo era normal ).zsh
vim
vim
zsh
vim
Depois disso, quando alterno os modos pela primeira vez (em ambos zsh
e vim
), o cursor se comporta da maneira que deveria novamente.
Como posso fazê-los exibir o cursor correto depois de entrar e sair vim
também?
eu tentei colocar
autocmd VimEnter * stopinsert
autocmd VimLeave * startinsert
em my ~.vimrc
, mas isso não afeta o cursor.
Acho melhor usar ao
precmd()
invés depreexec()
:Deste jeito:
.vimrc
echo -ne '\e[5 q'
duas vezes em seu arquivo.zshrc
.Isso funciona perfeitamente para mim, foi retirado daqui: https://gist.github.com/LukeSmithxyz/e62f26e55ea8b0ed41a65912fbebbe52
Você pode personalizar o tipo de cursor que deseja (piscando ou não, |, retângulo ou _) alterando os números nas seguintes sequências
\e[5 q
(5 é para feixe, 1 é para bloco) da seguinte forma:Basta adicionar a linha:
ao seu
~/.zshrc
. É mencionado na discussão da edição #9570 .Eu encontrei uma solução:
Eu coloquei isso no meu
~/.vimrc
:Você também pode usar
zle-line-init()
Acho que esse problema é melhor resolvido usando isso, em vez de
precmd()
oupreexec()
como ambos devem ser usados para executar comandos, em vez de corrigir o prompt.O script a seguir funciona para mim. Ele muda o cursor toda vez após iniciar/sair de um programa.