Answers:
指示切换到插入模式和从插入模式切换的流行选项是切换该cursorline
选项,该选项负责当前屏幕行是否突出显示(请参阅参考资料:help cursorline
):
:autocmd InsertEnter,InsertLeave * set cul!
或者,
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
修改CursorLine
突出显示组以将光标线的样式更改为您喜欢的样式(请参阅:help :highlight
和
:help highlight-groups
)。
cursorline
选项不依赖于任何特定于平台的功能;它可以在任何使用该+syntax
功能编译的Vim实例上使用(通常是这种情况)。
echo 'autocmd InsertEnter,InsertLeave * set cul!' >>~/.vimrc
以下在Linux上的xterm,urxvt和其他终端仿真器中起作用;macOS上的iTerm2;Windows上的带有ConEmu的Git Bash;以及更多(请参阅评论):
let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"
" Optionally reset the cursor on start:
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会跟踪正确的光标形状。
如果对您不起作用,请尝试TERM=xterm-256color
在启动tmux之前进行设置,或将其添加到您的菜单中.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'
在我的tmux配置中使用了。显然,如果将set
for用作terminal-overrides
不带-a
,它将覆盖设置,默认情况下该设置已经存在。
如果在macOS上使用tmux和iTerm2,
则以下将光标从块更改为光标并突出显示当前行
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
terminal-overrides
仅将tmux配置附加到其后,从而不会破坏的,*:Ss=\E[%p1%d q:Se=\E[2 q
一部分terminal-overrides
。所以我的配置看起来像set -sa terminal-overrides ",xterm-256color-italic:Tc"
(设置24位色可实现无践踏光标风格SS / SE。
要在不同模式下更改光标的形状,可以将以下内容添加到.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 Tips Wiki上的“ 在不同模式下更改光标形状 ” 。
set ttimeoutlen=0
您可以尝试一下terminus vim插件:
在插入模式下,光标形状变为细竖线。在替换模式下,它变为下划线。返回正常模式后,它将恢复为标准的“块”形状。
不知道其他人在击中后是否面临延迟 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 listchars=tab:>-,trail:~,extends:>,precedes:<,space:.
set ttyfast
现在,您可以看到它运行良好:
我希望它可以帮助其他任何人!👻
我认为这不会给其他人已经提供的答案增加太多,但我想以某种方式总结一下内容,并提供指向相关参考资料的链接。
这是我.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
(转义序列)控制字符。
这在xfce4-terminal上可以正常工作:
将以下脚本添加到您的 .vimrc
if has("autocmd")
au InsertEnter * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_BLOCK/TERMINAL_CURSOR_SHAPE_IBEAM/' ~/.config/xfce4/terminal/terminalrc"
au InsertLeave * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_IBEAM/TERMINAL_CURSOR_SHAPE_BLOCK/' ~/.config/xfce4/terminal/terminalrc"
au VimLeave * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_IBEAM/TERMINAL_CURSOR_SHAPE_BLOCK/' ~/.config/xfce4/terminal/terminalrc"
endif
简介:如您所知,xfce4-terminal将首选项保留在.config/xfce4/terminal/terminalrc
文件中。当您处于插入模式时,脚本将更TERMINAL_CURSOR_SHAPE_BLOCK
改为TERMINAL_CURSOR_SHAPE_IBEAM
;当您离开插入模式或vim时,脚本将返回至阻止状态。随意更改IBEAM
到任何你想要的(BLOCK
,IBEAM
并UNDERLINE
可用)。
如果您使用的是的现代版本,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
我设法通过从这两个来源获取的以下设置来使其工作。