(nota: escrevi esta pergunta no stackoverflow, mas fui sinalizada como offtopic, então estou reescrevendo aqui)
Aqui está o que eu quero:
Comportamento consistente (tanto quanto possível) entre Vim, MacVim, zsh com vi-mode e tmux. No Vim e no MacVim, a opção de modo de inserção normal está funcionando bem e, no caso do Vim, funciona bem executando o Vim no zsh shell e no tmux. O shell Zsh também funciona bem com o switch fazendo o seguinte:https://raw.github.com/ramiroaraujo/dotfiles/master/zsh/vi-mode.zsh, que não me lembro onde o encontrei.
Agora, isso não funciona no tmux. O cursor permanece o mesmo no modo de inserção e no modo normal, e é muito incômodo. Supostamente, o código acima deve funcionar se uma sequência de escape correta for impressa no tmux, e eu descobri issohttp://reza.jelveh.me/2011/09/18/zsh-tmux-vi-mode-cursor, mas parece meio antigo e parece ser para bash, não para zsh. Qualquer ajuda em qualquer direção é muito bem-vinda :)
Responder1
Depois de algumas horas mergulhando em uma ampla variedade de problemas e páginas de manual do GitHub, encontrei uma configuração que funciona para mim, alcançando o que acredito que você se propôs a alcançar.
Estou usando rxvt-unicode v9.22, tmux 2.9a, neovim v0.4.2 e zsh 5.7.1 no Arch Linux. Minha configuração está configurada para usar um cursor de feixe sem piscar no modo de inserção e um cursor de bloco sem piscar no modo normal.
Para zsh, eu uso o modo vi com o seguinte em meu .zshrc:
bindkey -v
export KEYTIMEOUT=1
# Change cursor with support for inside/outside tmux
function _set_cursor() {
if [[ $TMUX = '' ]]; then
echo -ne $1
else
echo -ne "\ePtmux;\e\e$1\e\\"
fi
}
function _set_block_cursor() { _set_cursor '\e[2 q' }
function _set_beam_cursor() { _set_cursor '\e[6 q' }
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] || [[ $1 = 'block' ]]; then
_set_block_cursor
else
_set_beam_cursor
fi
}
zle -N zle-keymap-select
# ensure beam cursor when starting new terminal
precmd_functions+=(_set_beam_cursor) #
# ensure insert mode and beam cursor when exiting vim
zle-line-init() { zle -K viins; _set_beam_cursor }
Para minha configuração do tmux, as únicas linhas importantes são:
set -g default-terminal "tmux-256color"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
Para garantir que o neovim se comporte corretamente para o urxvt, $TERM precisa estar correto. Faço isso com .Xresources com a seguinte linha (não esqueça de mesclar depois com xrdb -merge ~/.Xresources
):
URxvt*termName: rxvt-256color
Agora, para o neovim, nenhuma configuração deve ser necessária, a não ser certificar-se de não adulterar o guicursor
. Alguns problemas do GitHub mencionam a configuração set guicursor=
em seu init.vim, porém minha configuração não funciona se eu adicionar isso.
Espero que esta configuração seja reproduzível, considerando o que forneci, caso contrário, meus dotfiles estarão disponíveis emGitHub.
Responder2
tente este comando em seu terminal (com enabling zsh-vi-mode/vi-mode plugin)
:
export VI_MODE_SET_CURSOR=true
se funcionar, adicione-o /etc/zsh/zshrc
ou~/.zshrc