Background and problem

I've just discovered how to make the cursor a vertical line in insert mode. This works well with cursorline; even with the thinner cursor, I can still easily find my position.

autocmd InsertEnter * set cul
autocmd InsertLeave * set nocul

However, the default underline makes it hard to see literal underscore characters _.


  1. I know I can change the highlighting of CursorLine, which would make underscores visible again, but this breaks syntax highlighting.
  2. Another option is to highlight the underscore character itself in Insert mode. However, this seems like overkill, because I don't want every single underscore highlighted. Also, it doesn't work for areas that are syntax highlighted.
syn match underscore "_"
autocmd InsertEnter * hi underscore ctermbg=grey cterm=none ctermfg=black
autocmd InsertLeave * hi clear underscore
  1. I also know that I can change the cursorline to bold, italics, etc., but this is also visual overkill.

  2. An ideal solution would be to make the cursorline underline be a light colour, with the literal underscore a darker black, but it seems that cursorline always inherits ctermfg.

Is there a simple way to still see underscores, while using cursorline?

I'm using regular terminal vim (in Terminator generally), not gvim.

  • Have the cursor blink? Perhaps conditional on the line containing underscores? – B Layer Jun 20 at 3:39
  • Do you mean instead of using cursorline? I'm not a big fan of blinking things generally from a UX perspective. You have to wait half a cycle before anything is clear. – Sparhawk Jun 20 at 3:41
  • No offense but you've ruled out an awful lot of options. ;) – B Layer Jun 20 at 3:42
  • See if you can get any ideas from :h 'gcr'. – B Layer Jun 20 at 3:44
  • 1
    Thanks for your help @BLayer – Sparhawk Jun 20 at 5:40

Your Answer

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

Browse other questions tagged or ask your own question.