11

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?

3 Answers 3

8

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

1
6

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.

3
  • +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. May 14, 2011 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. May 14, 2011 at 8:22
  • 1
    gnome uses dconf now and this no longer works. There is now a better solution. (answer from Josh)
    – roeland
    Mar 27, 2019 at 9:03
1

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!
endif

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .