Vim Tips Wiki
Register
(Mention the cursor reset escape sequence)
(Add info on changing xterm cursor shape)
Line 30: Line 30:
 
Line 1 defines the color highlighting used for <tt>n-v-c</tt> modes (set in line 3), and line 2 defines a different color for insert mode (set in line 4). Line 5 disables blinking (<tt>blinkon</tt> value <tt>0</tt>) for <tt>n-v-c</tt> modes, and line 6 increases the default blink rate for insert mode. Line 4 also sets the cursor shape to a 100% sized vertical bar for insert mode (the default is <tt>ver25</tt>, a 25% vertical bar).
 
Line 1 defines the color highlighting used for <tt>n-v-c</tt> modes (set in line 3), and line 2 defines a different color for insert mode (set in line 4). Line 5 disables blinking (<tt>blinkon</tt> value <tt>0</tt>) for <tt>n-v-c</tt> modes, and line 6 increases the default blink rate for insert mode. Line 4 also sets the cursor shape to a 100% sized vertical bar for insert mode (the default is <tt>ver25</tt>, a 25% vertical bar).
   
It is possible to change the cursor color in the terminal if the terminal understands the following escape sequences. Not all terminals support this, but <tt>xterm</tt>, <tt>rxvt</tt> and Terminator do. Add the following to <tt>~/.vimrc</tt>:
+
It is possible to change the cursor color and style in the terminal if it understands the following escape sequences. Not all terminals support this, but <tt>xterm</tt>, <tt>rxvt</tt> and Terminator do. Recent versions of gnome-terminal support the sequence to change color, but not the one to restore the color to the default. Add the following to <tt>~/.vimrc</tt>:
 
<pre>
 
<pre>
" Use an orange cursor in insert mode, and a red cursor otherwise.
 
" Works in the terminals xterm, rxvt and Terminator.
 
" Does NOT work in Gnome terminal, Konsole and xfce4-terminal.
 
 
if &term =~ "xterm\\|rxvt"
 
if &term =~ "xterm\\|rxvt"
 
" use an orange cursor in insert mode
 
" use an orange cursor in insert mode
Line 42: Line 39:
 
silent !echo -ne "\033]12;red\007"
 
silent !echo -ne "\033]12;red\007"
 
" reset cursor when vim exits
 
" reset cursor when vim exits
autocmd VimLeave * silent !echo -ne "\033]112\007"
+
"autocmd VimLeave * silent !echo -ne "\033]112\007"
  +
" use \003]12;gray\007 for gnome-terminal
  +
endif
  +
</pre>
  +
  +
And changing the cursor shape.
  +
  +
<pre>
  +
if &term =~ '^xterm'
  +
" solid underscore
  +
let &t_SI .= "\<Esc>[4 q"
  +
" solid block
  +
let &t_EI .= "\<Esc>[2 q"
  +
" 1 or 0 -> blinking block
  +
" 3 -> blinking underscore
 
endif
 
endif
 
</pre>
 
</pre>

Revision as of 15:20, 31 August 2011

Tip 746 Printable Monobook Previous Next

created 2004 · complexity basic · author legba · version 6.0


Vim allows the cursor shape, blink rate, and color to be customized, if supported by the underlying system. Depending upon your system, you can make the cursor more prominent using blinking and a distinctive color, or you can make the cursor less distracting by disabling blinking and using a bland color. In the GUI (gvim), the cursor can be fully customized. For example, the cursor color can be changed when entering insert mode to clarify whether you are in normal or insert mode.

Changing the cursor color in insert mode

You may start typing, thinking you are in insert mode, but find that the characters are interpreted as commands because you are actually in normal mode. To help avoid that problem, you can specify that the cursor color and blink rate change when entering insert mode.

Using gvim with the defaults, the cursor shape is a block when in n-v-c modes (normal mode, or visual selection mode, or command mode while entering a colon command), and the shape changes to a vertical bar when in i (insert) mode. The color and blink rates do not change.

Here is an example for gvim showing how to customize the cursor properties (see :help 'guicursor'):

highlight Cursor guifg=white guibg=black
highlight iCursor guifg=white guibg=steelblue
set guicursor=n-v-c:block-Cursor
set guicursor+=i:ver100-iCursor
set guicursor+=n-v-c:blinkon0
set guicursor+=i:blinkwait10

Line 1 defines the color highlighting used for n-v-c modes (set in line 3), and line 2 defines a different color for insert mode (set in line 4). Line 5 disables blinking (blinkon value 0) for n-v-c modes, and line 6 increases the default blink rate for insert mode. Line 4 also sets the cursor shape to a 100% sized vertical bar for insert mode (the default is ver25, a 25% vertical bar).

It is possible to change the cursor color and style in the terminal if it understands the following escape sequences. Not all terminals support this, but xterm, rxvt and Terminator do. Recent versions of gnome-terminal support the sequence to change color, but not the one to restore the color to the default. Add the following to ~/.vimrc:

if &term =~ "xterm\\|rxvt"
  " use an orange cursor in insert mode
  let &t_SI = "\<Esc>]12;orange\x7"
  " use a red cursor otherwise
  let &t_EI = "\<Esc>]12;red\x7"
  silent !echo -ne "\033]12;red\007"
  " reset cursor when vim exits
  "autocmd VimLeave * silent !echo -ne "\033]112\007"
  " use \003]12;gray\007 for gnome-terminal
endif

And changing the cursor shape.

if &term =~ '^xterm'
  " solid underscore
  let &t_SI .= "\<Esc>[4 q"
  " solid block
  let &t_EI .= "\<Esc>[2 q"
  " 1 or 0 -> blinking block
  " 3 -> blinking underscore
endif

Disabling cursor blinking

The 'guicursor' option can be used to set the cursor properties when working in a GUI (gvim). The following commands illustrate how to disable blinking for all modes (the "a" specifies all modes, and the 0 value for blinkon disables blinking):

" Disable all blinking:
:set guicursor+=a:blinkon0
" Remove previous setting:
:set guicursor-=a:blinkon0
" Restore default setting:
:set guicursor&

You can also enter a command to directly set guicursor to disable blinking for the n-v-c modes. Type the following:

:set guicursor=

then press the Tab key (see :help 'wildchar') to have the current value of 'guicursor' displayed in the command line. You should see something like this (the ... indicates text omitted from this example):

:set guicursor=n-v-c:block-Cursor/lCursor,...

After the first colon, add "blinkon0-" so it reads:

:set guicursor=n-v-c:blinkon0-block-Cursor/lCursor,...

Alternatively, you can use the :let command with the &guicursor variable to set the 'guicursor' option. The following command inserts the "blinkon0-" using a substitute (in the replacement, & represents the original text, that is, 'n-v-c:'):

let &guicursor = substitute(&guicursor, 'n-v-c:', '&blinkon0-', '')

See also

Comments