我想知道,如果可能的话,如何根据你所处的模式改变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)
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)
Int*_*tss 16
如果在OSX上使用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
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
小智 9
“要在不同模式下更改光标的形状,您可以将以下内容添加到 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)
不确定在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)
现在它工作得很好,你可以看到:
我希望它可以帮助任何其他人!