如果我在插入模式或正常模式下,如何更改vim中的光标样式?

时间:2015-12-13 13:26:27

标签: vim zsh tmux gnome-terminal

我曾经使用过gvim,但我想使用vim + tmux的好处。因此我想改为vim。但是在vim中,光标样式不会改变,这取决于我是哪种模式,这是gvim的一个有用特性。我使用zsh(oh-my-zsh)和gnome-terminal下面。

我尝试了这个答案:http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes

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

但是这会将游标更改为globaly。绝对是我不想要的东西

接下来我尝试了这个插件:http://www.vim.org/scripts/script.php?script_id=4403,但它既没有效果。

3 个答案:

答案 0 :(得分:2)

可能你需要wincent/terminus vim插件:

  

在插入模式下,光标形状变为细垂直条。在替换模式下,它会变为下划线。返回正常模式时,它将恢复为标准“块”形状。提供配置选项以在不同形状中进行选择。

答案 1 :(得分:0)

对于颜色,我使用的是:

let &t_SI = "\<Esc>]12;yellow\x7"
let &t_SR = "\<Esc>]12;red\x7"
let &t_EI = "\<Esc>]12;blue\x7"

其他选择:

" solid underscore
"  let &t_SI .= "\<Esc>[4 q"

" solid block
" let &t_EI .= "\<Esc>[1 q"
  " 1 or 0 -> blinking block
  " 3 -> blinking underscore
  " Recent versions of xterm (282 or above) also support
  " 5 -> blinking vertical bar
  " 6 -> solid vertical bar

这些是termcap代码,请参阅help termcap-cursor-color。代码本身是console_codes(4)。因此,这些是与终端本身的交互,而不是vim会话。

遗憾的是,我没有解决有关离开Vim并返回原始光标颜色的问题。我尝试了以下及其中的许多变体:

au VimLeave    * let &t_EI = "\<Esc>]12;white\x7"
au VimLeavePre * :!echo -ne "\033]12;white\000"
au VimLeavePre * let &t_SI = "\<Esc>]12;white\x7"

但没有成功。无论如何,这是如何改变与编辑模式相关的光标形状和颜色。

对于更改模式的更一般的更改(例如,colorscheme更改),我使用

au InsertEnter * call ColoursBasedOnMode(v:insertmode)
au InsertLeave * call ColoursBasedOnMode('n')
autocmd BufWinEnter,BufNew * call ColoursBasedOnMode('n')

我有:

   :
   :
elseif a:mode == 'i'
    "echo " ColoursBasedOnMode insert mode"
    "set nonumber
    "set norelativenumber

    colorscheme railscasts 
         :
         :

答案 2 :(得分:0)

仅为此终端仿真器设置终端选项。 正如此处指出:https://stackoverflow.com/a/25327689/2544873

 let &t_SI = "\<Esc>]12;orange\x7"
 let &t_EI = "\<Esc>]12;red\x7"
 autocmd VimLeave * silent !echo -ne "\033]112\007"
  1. 将终端光标设置为输入插入模式
  2. 将终端光标设置为离开插入模式
  3. 重置保留vim上的默认(灰色)颜色