如何在插入/正常模式下更改vim光标?

lan*_*rat 85 vim

我想知道,如果可能的话,如何根据你所处的模式改变vim中的光标(颜色,形状等).

我经常忘记我没有处于插入模式并开始输入代码,导致各种疯狂的事情发生.如果光标上有某种视觉指示会很有帮助.

ib.*_*ib. 92

指示切换到插入模式(并返回正常模式)的常用选项是切换cursorline负责当前屏幕行是否突出显示的选项.

:autocmd InsertEnter,InsertLeave * set cul!
Run Code Online (Sandbox Code Playgroud)

要么

:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
Run Code Online (Sandbox Code Playgroud)

  • 我还将cul设置为higlight bg而不是默认下划线:hi CursorLine cterm = NONE ctermbg = black (3认同)

lak*_*tak 56

以下适用于xterm/urxvt/...(Linux),iTerm2(Mac),Git Bash和ConEmu(Windows)等(见注释):

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
Run Code Online (Sandbox Code Playgroud)

当你使用tmux时,你必须像这样使用它(没有\<Esc>Ptmux;转义) - 当你切换窗口/窗格时,tmux会跟踪正确的光标形状.TERM=xterm-256color如果它不适合您,您可能需要在启动tmux之前进行设置.

其他选项(替换\ [后面的数字]:

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).
Run Code Online (Sandbox Code Playgroud)

  • 非常适合终结者(linux) (4认同)
  • 适用于MacOS,tmux和终端vim (2认同)
  • 现在非常适合运动 (2认同)
  • 该解决方案在简单终端(无吸盘 ST)上从插入模式到正常模式改变形状有明显的延迟 (2认同)

Int*_*tss 16

如果在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
Run Code Online (Sandbox Code Playgroud)

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


Iva*_*nGL 13

要在不同模式下更改光标的形状,可以将以下内容添加到vimrc中.

对于Gnome-Terminal(版本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
Run Code Online (Sandbox Code Playgroud)

如果您在gnome-terminal中使用多个配置文件,则可能需要根据配置文件进行调整.

适用于KDE4Edit中的Konsole

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我主要在tmux中使用vim而不是ssh和putty.有更普遍的选择吗? (13认同)

小智 9

您可以尝试使用terminus vim插件:

在插入模式下,光标形状变为细垂直条.在替换模式下,它会变为下划线.返回正常模式时,它将恢复为标准"块"形状.


小智 9

根据“ Vim Tips WiKi ”上的这篇文章

“要在不同模式下更改光标的形状,您可以将以下内容添加到 vimrc 中:”

“适用于 macOS 上的终端”

"Mode Settings

let &t_SI.="\e[5 q" "SI = INSERT mode
let &t_SR.="\e[4 q" "SR = REPLACE mode
let &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)

"Cursor settings:

"  1 -> blinking block
"  2 -> solid block 
"  3 -> blinking underscore
"  4 -> solid underscore
"  5 -> blinking vertical bar
"  6 -> solid vertical bar
Run Code Online (Sandbox Code Playgroud)

其他操作系统的脚本也包含在该帖子中。


小智 8

我发现只有光标在插入模式下闪烁而静态在其他模式下才有用.

set guicursor+=n-v-c:blinkon0
Run Code Online (Sandbox Code Playgroud)


ale*_*aio 8

不确定在Esc按下键返回正常模式以显示块光标后是否还有其他人面临延迟,但如果是这样,这也是我修复它的方式。

实际上,我在 macOS 上的终端中使用 iTerm2 并使用 Vim。并且当进入插入模式时,光标仍然是一个块,并且在插入模式或正常模式下有点混乱。

我想在插入模式下显示一条细线作为光标,并在 MacVim 的正常模式下返回到块。这样做非常简单,只需将其添加到我的.vimrc文件中,如下所述

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是正如您所看到的,当点击ESC退出插入模式回到正常模式并再次将块显示为光标时存在延迟。所以为了修复它,我发现了这个:

set ttimeout
set ttimeoutlen=1
set listchars=tab:>-,trail:~,extends:>,precedes:<,space:.
set ttyfast
Run Code Online (Sandbox Code Playgroud)

现在它工作得很好,你可以看到:

修复延迟返回块作为光标

我希望它可以帮助任何其他人!

  • 模式切换延迟困扰了我很长时间。谢谢你! (2认同)
  • @leedreit 对我来说也是如此,直到我找到这个解决方法! (2认同)