我想知道如何在Vim中根据模式更改光标(颜色、形状等),如果可能的话。
我经常忘记自己不在插入模式下,开始输入代码,结果会发生各种奇怪的事情。如果光标有某种视觉指示,这将是很有帮助的。
我想知道如何在Vim中根据模式更改光标(颜色、形状等),如果可能的话。
我经常忘记自己不在插入模式下,开始输入代码,结果会发生各种奇怪的事情。如果光标有某种视觉指示,这将是很有帮助的。
let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"
" reset the cursor on start (for older versions of vim, usually not required)
augroup myCmds
au!
autocmd VimEnter * silent !echo -ne "\e[2 q"
augroup END
其他选项(将\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).
使用tmux时,很重要的一点是不要使用转义字符\<Esc>Ptmux;
,这样tmux可以在切换窗口/窗格时正确追踪光标形状。
如果这对你不起作用,请尝试在启动tmux之前设置TERM=xterm-256color
,或将此内容添加到您的.tmux.conf
文件中(感谢@Steven Lu的帮助:来源):
set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
set -ga terminal-overrides',*:Ss=\E[%p1%d q:Se=\E[2 q'
。显然,如果您在terminal-overrides
中使用set
而没有使用-a
,它将覆盖默认设置。 - Steven Lu\eP
终端代码\e\\
中。 - Mikhail Modincursorline
选项来表示进入和退出插入模式,该选项决定当前屏幕行是否高亮显示(参见:help cursorline
)。:autocmd InsertEnter * set cursorline
:autocmd InsertLeave * set nocursorline
:autocmd InsertEnter,InsertLeave * set cul!
CursorLine
高亮组,以您喜欢的样式改变光标行的样式(参见:help :highlight
和:help highlight-groups
)。cursorline
选项不依赖于任何特定平台的功能;它在任何编译了+syntax
特性的Vim实例中都可用(通常情况下都是这样)。 - ib.不确定是否有其他人在按下 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"
但是,正如您所看到的,在按下ESC
键以退出插入模式返回普通模式并再次显示块作为光标时出现了延迟。因此,为了解决这个问题,我找到了以下内容:
set ttimeout
set ttimeoutlen=1
set ttyfast
现在它的效果非常好,你可以看到:
我希望它能帮助其他人!
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
要在不同模式下更改光标的形状,您可以将以下内容添加到.vimrc
文件中。
适用于GNOME终端(版本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终端中使用多个配置文件,则可能需要根据您的配置文件进行调整。
对于KDE4中的Konsole:
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
这适用于多个选项卡和窗口。
另请参阅:更改不同模式下的光标形状 在 Vim技巧Wiki 上。
set ttimeoutlen=0
。 - Bananach您可以尝试使用 Terminus Vim 插件:
在插入模式下,光标形状会变成细的垂直条。在替换模式下,它将变为下划线。返回到正常模式后,它将恢复为标准的“块”形状。
我发现仅在插入模式下让光标闪烁,并使其在其他模式下保持静态是很有用的。
set guicursor+=n-v-c:blinkon0
"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
该帖子中还包括其他操作系统的脚本。
我认为这并没有为其他人已经提供的答案增加很多内容,但我想以某种方式将事情总结在一个地方,并且还有相关引用的链接。
这是我.vimrc
中相关代码片段的样子:
" Cursor appearance
"
" See also: [1]'ANSI Control Functions Summary', [2]DECSCUSR, [3]xterm+tmux
" entry in terminfo.src.
" [1] https://www.vt100.net/docs/vt510-rm/chapter4.html
" [2] https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
" [3] https://raw.githubusercontent.com/mirror/ncurses/master/misc/terminfo.src
"
" On:
" - entered insert mode
let &t_SI = "^[[5 q^[]12;Magenta\007" " blinking bar (Ss) in magenta (Cs)
" - entered replace mode
let &t_SR = "^[[0 q^[]12;Red\007" " blinking block (Ss) in red (Cs)
" - leaving insert/replace mode
let &t_EI = "^[[2 q^[]112\007" " terminal power-on style (Se) and colour (Cr)
^['
'字符实际上是一个ESC
(转义序列)控制字符。nvim
并想要实现这个目标,你可以避免上面列出的一些花哨的解决方法。# ~/.tmux.conf
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q',w
" ~/.vimrc
" Sets cursor styles
" Block in normal, line in insert, underline in replace
set guicursor=n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20