如何在Insert / Normal模式下更改vim光标?

我想知道,如果可能的话,如何改变光标在vim(颜色,形状等),取决于你在什么模式。

我经常忘记我不在插入模式,并开始input代码,这会导致各种疯狂的事情发生。 如果光标上有某种可视的指示,这将是有帮助的。

除了别的之外,我通常将当前的vim模式放到状态栏中。 如果您寻求简单性,您只能将此信息设置到状态行上 。

然而,通常情况下,真正的疯狂的事情发生时,你有大写locking抑郁症,并在命令模式(因为hjkl现在是HJKL – 只是J和K足以让你拉你的头发,当你不明白发生了什么事情。 :h J:h K看看我的意思)。 只要小心大写locking键 ,大部分时间IMO你会没事的。

指示切换到插入模式(以及返回正常模式)的stream行选项是切换cursorline选项,该选项负责是否突出显示当前屏幕行。

 :autocmd InsertEnter,InsertLeave * set cul! 

要么

 :autocmd InsertEnter * set cul :autocmd InsertLeave * set nocul 

要在不同的模式下改变光标的形状,你可以在你的vimrc中添加以下内容。

对于Gnometerminal(版本2.26)编辑

 if has("autocmd") au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam" au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block" au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam" endif 

如果您在gnome-terminal中使用多个configuration文件,则可能需要将其调整为您的configuration文件。

对于KDE4Edit中的Konsole

 let &t_SI = "\<Esc>]50;CursorShape=1\x7" let &t_EI = "\<Esc>]50;CursorShape=0\x7" 

这适用于多个选项卡和窗口。

http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes

如果您在OSX上使用tmuxiTerm2
以下将光标从一个块更改为一个光标并高亮显示当前行

 if exists('$TMUX') let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\" let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\" else let &t_SI = "\<Esc>]50;CursorShape=1\x7" let &t_EI = "\<Esc>]50;CursorShape=0\x7" endif :autocmd InsertEnter * set cul :autocmd InsertLeave * set nocul 

信用: https : //gist.github.com/andyfowler/1195581

我发现只有光标在插入模式下闪烁,在其他模式下才是有用的。

 set guicursor+=nvc:blinkon0 

对于xterm / urxvt / …(Linux),iTerm2(Mac)和ConEmu(Windows)的Git Bash以下工作:

 let &t_SI = "\e[6 q" let &t_EI = "\e[2 q" " optional reset cursor on start: augroup myCmds au! autocmd VimEnter * silent !echo -ne "\e[2 q" augroup END 

当你使用tmux时,像这样使用它是很重要的(没有\<Esc>Ptmux; escape) – 当你切换窗口/窗格时,tmux将跟踪正确的光标形状。 如果它不起作用,可能需要在启动tmux之前设置TERM=xterm-256color

其他选项(replace\ e [)后面的数字:

  Ps = 0 -> blinking block. Ps = 1 -> blinking block (default). Ps = 2 -> steady block. Ps = 3 -> blinking underline. Ps = 4 -> steady underline. Ps = 5 -> blinking bar (xterm). Ps = 6 -> steady bar (xterm).