Vim Tips Wiki

Align endif with corresponding if or ifdef directive

Redirected from VimTip251

1,625pages on
this wiki
Add New Page
Talk0 Share
Tip 251 Printable Monobook Previous Next

created May 24, 2002 · complexity basic · author Kartik Agaram · version 5.7

If you try to impose any sort of alignment on your preprocessor directives, rather than just starting them on column 0, this mapping will align the #endif 'correctly' when you type '#en', start a new line, and bring you back to the correct alignment to edit code.

inoremap <buffer> #en X<BS><Esc>?#if<CR>"zy0^Og0"zpDa#endif<CR>X<BS><Esc>?#end?-1<CR>^"zy0^O0"zpDa


This tip is currently at -1/1 - I'm not sure why, since I use it a lot. In any case, here's an updated version that handles nested #if blocks.

inoremap #en #endif<Esc>bbd0%y0<C-o>0PA

I've stopped positioning the cursor on the next line because I found myself doing <Esc>dd too often.

In a perfect world, we wouldn't have to deal with code with such a high density of preprocessor directives as to make indenting them, and therefore this tip, useful.

This would probably better implemented as an indentexpr (or an extension to an existing c++ indentexpr) instead of a map. (Although I'm not sure if you could use the same logic to do so.) But that would let you use the same logic for =. --Pydave 19:16, April 30, 2012 (UTC)

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.