mad*_*ngl 14 vim zsh oh-my-zsh caret-cursor
我在oh-my-zsh 中使用vi-mode和af-magic主题。
我希望光标样式在 in和 in 中指示我是处于正常模式(块)还是插入模式(梁)。zsh
vim
这是我到目前为止:
在我的~/.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'
}
Run Code Online (Sandbox Code Playgroud)
如发现here。
有了这些配置,都zsh
和vim
工作,因为他们应该独立时考虑。然而,当我输入vim
从zsh
在插入模式,vim
开始在正常模式下(如它应该),但仍示出了波束形状的光标。同样,当我退出vim
,我回到zsh
在插入模式,但光标仍处于块状(因为在过去的模式vim
是正常的)。
在此之后,我第一次(在zsh
和 中vim
)切换模式时,光标会再次按照应有的方式运行。
如何让它们在进入和退出后也显示正确的光标vim
?
我试过放
autocmd VimEnter * stopinsert
autocmd VimLeave * startinsert
Run Code Online (Sandbox Code Playgroud)
在 my 中~.vimrc
,但这不会影响光标。
小智 14
我认为最好使用precmd()
而不是preexec()
:
# .zshrc
_fix_cursor() {
echo -ne '\e[5 q'
}
precmd_functions+=(_fix_cursor)
Run Code Online (Sandbox Code Playgroud)
这边走:
.vimrc
echo -ne '\e[5 q'
在你的.zshrc
.Cor*_*mer 10
这对我来说非常适合,它取自这里: https: //gist.github.com/LukeSmithxyz/e62f26e55ea8b0ed41a65912fbebbe52
\n# vi mode\nbindkey -v\nexport KEYTIMEOUT=1\n\n# Change cursor shape for different vi modes.\nfunction zle-keymap-select {\n if [[ ${KEYMAP} == vicmd ]] ||\n [[ $1 = \'block\' ]]; then\n echo -ne \'\\e[1 q\'\n elif [[ ${KEYMAP} == main ]] ||\n [[ ${KEYMAP} == viins ]] ||\n [[ ${KEYMAP} = \'\' ]] ||\n [[ $1 = \'beam\' ]]; then\n echo -ne \'\\e[5 q\'\n fi\n}\nzle -N zle-keymap-select\nzle-line-init() {\n zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)\n echo -ne "\\e[5 q"\n}\nzle -N zle-line-init\necho -ne \'\\e[5 q\' # Use beam shape cursor on startup.\npreexec() { echo -ne \'\\e[5 q\' ;} # Use beam shape cursor for each new prompt.\n
Run Code Online (Sandbox Code Playgroud)\n您可以通过按以下顺序更改数字(\\e[5 q
5 表示光束,1 表示块)来自定义所需的光标类型(是否闪烁、|、矩形或_),如下所示:
Set cursor style (DECSCUSR), VT520.\n0 \xe2\x87\x92 blinking block.\n1 \xe2\x87\x92 blinking block (default).\n2 \xe2\x87\x92 steady block.\n3 \xe2\x87\x92 blinking underline.\n4 \xe2\x87\x92 steady underline.\n5 \xe2\x87\x92 blinking bar, xterm.\n6 \xe2\x87\x92 steady bar, xterm.\n
Run Code Online (Sandbox Code Playgroud)\n