(注:この質問はstackoverflowで作成しましたが、オフトピックとしてフラグが付けられたため、ここで書き直しています)
これが私が欲しいものです:
Vim、MacVim、vi-modeを使用したzshとtmuxの間で(可能な限り)一貫した動作。 VimとMacVimでは、挿入-通常モードスイッチは正常に機能しています。Vimの場合は、zshシェルとtmuxの両方からVimを実行することで正常に機能します。 Zshシェルは、次のようにすることでスイッチでもうまく機能します: https://raw.github.com/ramiroaraujo/dotfiles/master/zsh/vi-mode.zsh 、これは私には思えません私がそれを見つけた場所を覚えています。
現在、これはtmux内では機能しません。カーソルは挿入モードと通常モードで同じままで、非常に動きが鈍いです。おそらく、tmuxで正しいエスケープシーケンスが出力されれば、上記のコードは多少機能するはずですが、これを見つけました http://reza.jelveh.me/2011/09/18/zsh-tmux-vi-mode -cursor ですが、少し古いようで、zshではなくbash用のようです。どんな方向のどんな助けも大歓迎です:)
さまざまなGitHubの問題とマンページに数時間飛び込んだ後、私は自分に合ったセットアップを見つけました。
ArchLinuxでrxvt-unicodev9.22、tmux 2.9a、neovim v0.4.2、zsh5.7.1を使用しています。私のセットアップは、挿入モードで非点滅のビームカーソルを使用し、通常モードで非点滅のブロックカーソルを使用するように構成されています。
Zshの場合、.zshrcで次のようにviモードを使用します。
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 }
私のtmux構成の場合、重要な行は次のとおりです。
set -g default-terminal "tmux-256color"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
Neovimがurxvtに対して正しく動作することを確認するには、$ TERMが正しい必要があります。私はこれを.Xresourcesで次の行で行います(後でxrdb -merge ~/.Xresources
とマージすることを忘れないでください):
URxvt*termName: rxvt-256color
今neovimの場合、guicursor
を改ざんしないようにする以外に、設定は必要ありません。 GitHubの問題の中には、init.vimでset guicursor=
を設定することに言及しているものがありますが、それを追加するとセットアップが機能しません。
私が提供したものを考慮して、このセットアップが再現可能であることを願っています。そうでない場合、私のドットファイルは GitHub で入手できます。