107

Some GUI text editors have a vertical line which serves as line length marker (it helps keeping lines shorter than 80 chars in source code files).

Is is possible to have something similar in vim/gvim? I know about ruler vim option, but it is not very handy to follow it visually on a big screen.

Edit: when googling for "colorcolumn" to learn more, I have found that this question is a duplicate of https://stackoverflow.com/questions/235439/vim-80-column-layout-concerns

1

4 Answers 4

171

Just execute this

:set colorcolumn=72

You can also prefix the argument with - or + to put the marker that many columns to the left or right of textwidth, and it accepts a comma-separated list of columns. I think the colorcolumn option is only in Vim 7.3. See

:help colorcolumn
4
  • 11
    Wow, vim never ceases to amaze me!
    – Myer
    Jun 21, 2011 at 2:38
  • 8
    Nice! Also useful when columns=80, wrap is set and colorcolumn=81,161,241,321,401,481,561,641,721,801 – shows up to 10 wrapped lines with the first column highlighted.
    – Amir
    Jun 11, 2012 at 15:45
  • 1
    To unset, run set colorcolumn= or set cc=
    – Jon Church
    Mar 13, 2020 at 17:49
  • to set the marker line color, run :highlight ColorColumn ctermbg=grey, run :help ctermbg to see the color list
    – Bo Lu
    Mar 6 at 6:03
27

From Damian Conway's "More Instantly Better Vim" talk at OSCON 2013:

highlight ColorColumn ctermbg=magenta
call matchadd('ColorColumn', '\%81v', 100)

This results in the character being highlighted in magenta (the screenshot is in DarkCyan) when the line goes over the 80-character maximum.

vim with highlighting enabled

For gVim: it's best to move those 2 lines to the last part of your .vimrc file to ensure it works.

4
  • Huh! I just answered your very similar question about this... small world! superuser.com/questions/771558/…
    – lornix
    Jun 21, 2014 at 5:29
  • I put this answer in, then remembered I couldn't do it in gVim, so I asked. ;)
    – Isxek
    Jun 21, 2014 at 6:18
  • Wow, this is really great! This is the kind of feature I wouldn't even know to look for. I'm using the pattern '\$81v\S' which matches only non-whitespace characters. This means the highlight will not show when the line is exactly 80 characters long (which is something that really bothered me). See this for more info stackoverflow.com/questions/12985042/…
    – fvgs
    May 8, 2016 at 8:39
  • 1
    Want to make a couple of corrections to my previous comment. The $ should have been a %. Likewise, I now use the pattern \%81v. since this ensures the 81st column will be highlighted for any character in the 81st column, which is probably what you want.
    – fvgs
    Jun 20, 2016 at 8:30
2

You could try this:

grep '.\{81\}' file

or

set colorcolumn=80

(or the shorthand equivalent)

set cc=80

or as aforementioned:

match ErrorMsg '\%>80v.\+'
0

Below is a clumsy trick from Hacking Vim: A Cookbook to get the Most out of the Latest Vim Editor by Kim Schultz.

It highlights with ErrorMsg (usually bright red) any lines that go over 80 characters. Works well for me.

function! RemoveWidthLimitWarnigns()
    silent! call matchdelete(4)
endfunction
function! InsertWidthLimitWarnings()
    call RemoveWidthLimitWarnigns()
    call matchadd("ErrorMsg", "\\%>79v.\\+", 10, 4)
endfunction
2
  • What am I supposed to do with this snippet? Just stick it into .vimrc?
    – vtest
    Feb 24, 2011 at 16:02
  • Trying first by just calling :call matchadd("ErrorMsg", "\\%>79v.\\+", 10, 4) suffices. But I wouldn't recommend this anymore since @garyjohn knew something better
    – mike3996
    Feb 24, 2011 at 17:40

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.