views:

235

answers:

5

I used textmate to work with ruby code for over one year. Recently I switched to using mvim. When I open some of the files in mvim I get empty blocks. Look at this picture to get a feel for it.

Any idea on how to get rid of them?

Thanks

+2  A: 

It looks like you might have a search pattern stored that highlights spaces at the beginning of the line: /^ + and your highlight color is light gray.

To get rid of it, try searching for something else: /asdf<ENTER>.

Seth Johnson
+1  A: 

If you want to get rid of hanging spaces on the ends of lines (they always annoy the hell out of me, honestly), this command will strip them from a given file:

:%s/  *$//
chaos
Just to throw in an alternative (although it doesn't save any characters), you can also use :%s/ \+$//. '\+' is "one or more" where '*' is "zero or more".
Al
+3  A: 

It's looks like highlighting of redundant whitespace (see line 214 for example)

Is there anything in your .vimrc along the lines of..

highlight RedundantSpaces ctermbg=grey guibg=grey
match     RedundantSpaces /\s\+$\| \+\ze\t/

..try commenting it out, and seeing if this fixes the problem

I guess the reason it's highlighting the indentation is vim is configured to expect tabs, no spaces (or vice versa) - again make sure your .vimrc is setup correctly (say, using soft-tabs)

dbr
A: 

As Seth mentioned, these are spaces. Essentially, mvim is showing you the spaces that are placed in your file by coloring them grey instead of black.

Personally, I think this is a feature, you can use this highlighting scheme to identify where you may have trailing spaces, and can use it to make your code look neater.

You could probably get it to go away by adjusting the highlighting options.

sheepsimulator
+9  A: 

Others have explained that this could either be a search highlighting spaces or tabs or (more likely) it could be highlight designed to show up mixed indentation (particularly useful in python for what it's worth). I find this very useful personally.

Anyway, there are a number of options to sort out your highlighting depending on the cause:

To clean end of line spaces (as mentioned by chaos), use something like:

:%s/ \+//

Probably the most useful one: tidy up the tabbing:

If you're using spaces for indentation:

:set expandtab
:retab

If you're using tabs:

:set noexpandtab
:retab!

If you're using tabs for indentation and spaces elsewhere:

:set expandtab
:retab
:set noexpandtab
:execute '%s@^\( \{'.&ts.'}\)\+@\=repeat("\t", len(submatch(0))/'.&ts.')@'

I have the last line mapped to a command called :RetabIndents. All of those assume that your tabstop setting is correct (it should be set with set ts=2 based on your picture). Personally, I'd also recommend keeping shiftwidth equal to tabstop, so set ts=2 sw=2.

You may also be able to get away with a simple gg=G (auto-indent the whole file). However, this won't work in some languages (in particular python as there's no way for any editor to know which lines should be indented to which level).

To switch off search-based highlighting temporarily:

:noh

Or permanently (put this in .vimrc):

:set nohlsearch

Or a quick shortcut for when you've used it and don't want it anymore:

:nnoremap <ESC> :noh<CR><ESC>

To switch off indent highlighting, you'll have to identify which highlighting group is used, which is a little complicated and is probably easiest to just read your .vimrc, but if you really want to search for it, move the cursor to one of the highlighted characters and enter (taken from here):

:echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>

You can then clear the highlighting group by searching for the name that is reported on the command line in your .vim/.vimrc/_vimrc/vimfiles configuration and commenting out anything relevant.

For more information

:help :s
:help 'expandtab'
:help :retab
:help :execute
:help 'tabstop'

:help :noh
:help 'hlsearch'
Al
+1, great explanation
technomalogical