我正在从 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
在此处找到:在不同模式下改变光标形状。
编辑
将最后一个改为ibeam
,block
以块光标离开。
答案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
您将在正常模式下获得一个块光标,在插入模式下获得一个细光标。