Ram*_*ujo 9 vim zsh shell tmux
(注意:我在stackoverflow上写了这个问题,但被标记为offtopic,所以我在这里重写)
这是我想要的:
Vim、MacVim、zsh 与 vi-mode 和 tmux 之间的行为(尽可能)一致。在 Vim 和 MacVim 中,插入正常模式开关工作正常,在 Vim 情况下,通过从 zsh shell 和在 tmux 中运行 Vim 可以正常工作。通过这样做,Zsh shell 也可以很好地与开关配合使用:https://raw.github.com/ramiroaraujo/dotfiles/master/zsh/vi-mode.zsh,我似乎不记得在哪里找到它了。
现在这在 tmux 中不起作用。光标在插入和正常模式下保持不变,而且真的很烦人。Suposly,如果在 tmux 中打印正确的转义序列,代码 avove 应该可以工作,我发现这个http://reza.jelveh.me/2011/09/18/zsh-tmux-vi-mode-cursor,但是看起来有点旧,看起来像是用于 bash,而不是 zsh。任何方向的任何帮助都非常受欢迎:)
经过几个小时深入研究各种 GitHub 问题和手册页后,我找到了一个适合我的设置,实现了我相信您想要实现的目标。
我在 Arch Linux 下使用 rxvt-unicode v9.22、tmux 2.9a、neovim v0.4.2 和 zsh 5.7.1。我的设置配置为在插入模式下使用不闪烁光束光标,在正常模式下使用不闪烁块光标。
对于 zsh,我使用 vi 模式,并在 .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 }
Run Code Online (Sandbox Code Playgroud)
对于我的 tmux 配置,唯一重要的行是:
set -g default-terminal "tmux-256color"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
Run Code Online (Sandbox Code Playgroud)
为了确保 neovim 对 urxvt 的行为正确,$TERM 需要正确。我使用 .Xresources 执行以下操作(不要忘记随后与 合并xrdb -merge ~/.Xresources
):
URxvt*termName: rxvt-256color
Run Code Online (Sandbox Code Playgroud)
现在对于 neovim,除了确保不篡改guicursor
. 一些 GitHub 问题提到了 init.vim 中的设置set guicursor=
,但是如果我添加它,我的设置将不起作用。
希望这个设置在我提供的情况下是可重现的,否则我的点文件可以在GitHub上找到。
归档时间: |
|
查看次数: |
2100 次 |
最近记录: |