Vim:在终端,我怎样才能拥有更好的游标?

时间:2012-12-25 13:16:11

标签: cursor vim macvim

我注意到当我使用终端时光标不是我配置它。

换句话说,在GUI中它看起来很完美,光标就是,但在终端中需要时间来更新,它看起来不像我配置它等。

以下是我对光标的设置:

set guicursor=n-v-c:block-Cursor-blinkon0
set guicursor+=ve:ver35-Cursor
set guicursor+=o:hor50-Cursor-blinkwait175-blinkoff150-blinkon175
set guicursor+=i-ci:ver20-Cursor
set guicursor+=r-cr:hor20-Cursor
set guicursor+=sm:block-Cursor-blinkwait175-blinkoff150-blinkon175

我注意到它被称为guicursor设置,但是在终端中,其中一些确实生效了,它们只是没有完全生效。

此外,似乎光标没有得到很多更新。例如,如果我进入插入模式,则放置正确的光标,但如果我离开,则使用相同的光标,直到我移动或其他东西然后更新为正常模式光标。

你对此有什么建议吗?或者我只需忍受它?

修改

我的操作系统是安装了Mountain Lion的Mac Mini。我使用iTerm2和xterm-color256作为终端。

重新措辞问题:如何在终端中更快地重绘光标,如何才能使其采用上面的设置?我已经尝试过ttyfastlazyredraw

4 个答案:

答案 0 :(得分:6)

您的设置适用于GUI Vim。您不能期望它们在CLI Vim中工作。如果您不喜欢CLI Vim的工作方式,请使用MacVim。

我在~/.vimrc

中执行了此功能略有不同的版本
" changes the cursor shape/color
" in the terminal depending on the mode
" see http://code.google.com/p/iterm2/issues/detail?id=710&q=cursor
function! SetCursorStyle()
  if &term =~ "xterm\\|rxvt"
    " use a | cursor in insert mode
    let &t_SI = "\<Esc>]50;CursorShape=1\x7"

    " use a rectangle cursor otherwise
    let &t_EI = "\<Esc>]50;CursorShape=0\x7"

    " reset cursor when vim exits
    autocmd VimLeave * silent !echo -ne "\<Esc>]50;CursorShape=0\x7"

  endif
endfunction

答案 1 :(得分:1)

我使用Cygwin,我使用上面的设置,但Cygwin的xterm可能无法识别“\] 50; CursorShape = 1 \ x7”

所以我试试这个,它可以工作

if &term =~ "xterm\\|rxvt"
  " use a | cursor in insert mode
  let &t_SI = "\<Esc>[5 q"

  " use a rectangle cursor otherwise
  let &t_EI = "\<Esc>[1 q"
endif

然后,我将此添加到.bashrc中将术语光标更改为阻止,这对我来说非常完美。

# change cursor to blinking block
echo -ne "\x1b[1 q"

答案 2 :(得分:0)

你试过这个吗?

:help 'ttyfast'

如果光标有延迟,请尝试此操作(启用ttyfast

:set ttyfast

答案 3 :(得分:0)

使用terminfo

如果echo $TERM在您的计算机上提供linux,您可以使用terminfo为Vim定义光标。

我们可以通过在terminfo数据库中更改它来设置游标:

infocmp -A /usr/share/terminfo linux > linux_terminfo

然后使用您喜欢的编辑器编辑linux_terminfo; cnorm条目是普通光标的条目。这会将光标设置为不闪烁的绿色矩形:

clear=\E[H\E[J, cnorm=\E[?25h\E[?48;0;32c, cr=^M,

将更改写回terminfo数据库:

tic linux_terminfo

然后,一旦你用Vim打开一个文件,你就会看到新光标。

terminfo的颜色

c之前的数字(例如32c)定义了光标的颜色。光标背景颜色以16为增量更改。要使光标下的字符突出显示,请在数字上添加8。例如:16给出一个蓝色光标而不突出显示光标下的字符。要激活突出显示,请在数字中添加8:24

初步颜色列表:

0  → gray
16 → blue
32 → green
48 → cyan
64 → red
80 → magenta
96 → brown
112 → gray
128 → ivory
144 → light blue
160 → lime
176 → light cyan
194 → pale red
212 → pink
228 → yellow
...

terminfo和Bash

要使正常光标的terminfo配置在Bash启动时生效,请将其放在.bash_profile中:

tput cnorm

这样,你在Vim和Bash中拥有相同的光标。