如何让 Gnome 终端上控制台 Vim 中的光标根据正常或插入模式从细线变为块

如何让 Gnome 终端上控制台 Vim 中的光标根据正常或插入模式从细线变为块

我正在从 Gvim 切换到使用 Gnome Terminal 2.32.1 的 Console Vim。

我真的很喜欢 Gvim,在正常模式下光标为实心方块,在插入模式下光标为细线。

  • 在 Gnome 终端中运行控制台 Vim 时有没有办法实现此功能?

  • 如果不可能,有什么技巧可以知道你处于哪种模式?我知道屏幕底部会显示模式,但这似乎不如光标(我的眼睛注视的地方)有用。还是你只是通过练习习惯了它?

答案1

无需使用自动命令或 gconftool – Vim 现在原生支持它。

将以下几行插入到你的 vimrc 中:

let &t_SI = "\<esc>[5 q"  " blinking I-beam in insert mode
let &t_SR = "\<esc>[3 q"  " blinking underline in replace mode
let &t_EI = "\<esc>[ q"  " default cursor (usually blinking block) otherwise

这些序列应该适用于自 2014 年底发布的 VTE 0.39 版以来的所有基于 VTE 的终端仿真器以及 xterm。如果您想停止光标闪烁,请将 1 添加到每个数字中,然后将 插入2到序列中t_EI(可能的序列列在这个答案; 也可以看看VT510 手册)。

答案2

对于 gnome-terminal,将其添加到您的~/.vimrc(如果缺失则创建):

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

在此处找到:在不同模式下改变光标形状

编辑

将最后一个改为ibeamblock以块光标离开。

答案3

对于 gnome 终端版本>3.15
将其添加到您的 ~/.vimrc。

if has("autocmd")
  au VimEnter,InsertLeave * silent execute '!echo -ne "\e[2 q"' | redraw!
  au InsertEnter,InsertChange *
\ if v:insertmode == 'i' | 
\   silent execute '!echo -ne "\e[6 q"' | redraw! |
\ elseif v:insertmode == 'r' |
\   silent execute '!echo -ne "\e[4 q"' | redraw! |
\ endif
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
endif

您将在正常模式下获得一个块光标,在插入模式下获得一个细光标。

相关内容