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?


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"

Found here: Change cursor shape in different modes.


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

  • +1 Awesome. Thanks. I'm just seeing how well it plays with different use cases. I'm also getting a lag on conversion back to normal mode. Perhaps I have some mystery key binding to Escape and then something. – Jeromy Anglim May 14 '11 at 8:14
  • 2
    I guess the main issue as noted in the article is that this setting is system-wide, rather than being specific to one Vim session. Thus, any external consoles will be affected. – Jeromy Anglim May 14 '11 at 8:22
  • gnome uses dconf now and this no longer works. There is now a better solution. (answer from Josh) – r03 Mar 27 at 9:03

For gnome terminal version>3.15
Add this to your ~/.vimrc.

if has("autocmd")
  au VimEnter,InsertLeave * silent execute '!echo -ne "\e[2 q"' | redraw!
  au InsertEnter,InsertChange *
\ if v:insertmode == 'i' | 
\   silent execute '!echo -ne "\e[6 q"' | redraw! |
\ elseif v:insertmode == 'r' |
\   silent execute '!echo -ne "\e[4 q"' | redraw! |
\ endif
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!

You will get a block cursor in normal mode and a thin one in insert mode.


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).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.