How to make cursor change from thin line to block based on normal or insert mode in Console Vim on Gnome Terminal

I am switching from Gvim to using Console Vim using the Gnome Terminal 2.32.1.

I really liked in Gvim how the cursor would be a solid square when in normal mode and thin line when in insert mode.

  • Is there a way of producing this functionality when running console Vim in the Gnome terminal?

  • If it's not possible, what tricks are there for knowing what mode you are in? I know there is the mode displayed at the bottom of the screen, but that doesn't seem to be as helpful as the cursor (which is where my eyes are looking). Or do you just get used to it with practice?


There's no need to use autocommands or gconftool for this – Vim now supports it natively.

Insert the following lines into your vimrc:

let &t_SI = "\<esc>[5 q"  " blinking I-beam in insert mode
let &t_SR = "\<esc>[3 q"  " blinking underline in replace mode
let &t_EI = "\<esc>[ q"  " default cursor (usually blinking block) otherwise

These sequences should work in all VTE-based terminal emulators since VTE version 0.39, released at the end of 2014, as well as in xterm. If you'd like to stop the cursor blinking, add one to each of the numbers, and insert a 2 into the sequence for t_EI (the possible sequences are listed in this answer; see also the VT510 manual).


For gnome-terminal, add this to your ~/.vimrc (to be created if missing):

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

Found here: Change cursor shape in different modes.

EDIT

Change the last ibeam to block, to leave with a block cursor.