Vim Tips Wiki
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)