如何在进入Vim时初始化光标样式,避免继承原有样式?
解决Vim启动时光标样式不初始化的问题
你的现有配置只在模式切换时(比如从插入模式切回普通模式)才会触发光标样式设置,但Vim启动时直接进入普通模式,这个触发条件不满足,所以光标会保留终端里的原有样式(实心竖线)。
修改~/.vimrc配置
在你已有的if $TERM_PROGRAM =~ "Terminal"代码块中,添加启动时强制设置普通模式光标的逻辑,两种可选方案:
方案1:调用终端命令设置(简单直接)
if $TERM_PROGRAM =~ "Terminal" "Mode settings: let &t_SI.="\e[6 q" "SI = INSERT mode let &t_SR.="\e[2 q" "SR = REPLACE mode let &t_EI.="\e[2 q" "EI = NORMAL mode (ELSE) " 启动Vim时立即设置普通模式光标样式 autocmd VimEnter * silent !echo -ne "\e[2 q" endif
方案2:用Vim内置函数发送指令(更优雅,无外部命令调用)
if $TERM_PROGRAM =~ "Terminal" "Mode settings: let &t_SI.="\e[6 q" "SI = INSERT mode let &t_SR.="\e[2 q" "SR = REPLACE mode let &t_EI.="\e[2 q" "EI = NORMAL mode (ELSE) " 通过Vim内置通道发送光标设置指令到终端 autocmd VimEnter * call chansend(v:stderr, "\e[2 q") endif
原理说明
autocmd VimEnter *会在Vim完全启动完成后执行后续命令,确保覆盖终端的原有光标样式\e[2 q是对应你配置的普通模式实心块光标指令,和t_EI里的设置保持一致
修改完成后保存~/.vimrc,重启Vim就能看到启动时直接显示正确的实心块光标,无需手动切换模式触发。
内容的提问来源于stack exchange,提问作者LuckyJollyMoments
相关产品推荐
相关产品推荐

