created 2006 · complexity intermediate · author Yakov Lerner · version 6.0
This tip is for those who edit Makefiles by hand.
Makefiles punish you if instead of single tab somebody puts eight spaces in your makefile (happens when pasting between Makeiles). This script guards against this annoying pitfall.
The following script auto-converts 8 spaces at the beginning of line (only in Makefiles, and only at the beginning of line) into tab, as you type or paste. It is suggested to have
:set list in Makefiles, too. This script will only work if
:set nopaste is set.
" In Makefile, automatically convert eight spaces at the beginning " of line to tab, as you type (or paste). au FileType make :inoremap <buffer><silent><Space> <Space><c-o>:call MapSpaceInMakefile()<CR> function! MapSpaceInMakefile() " if this space is 8th space from the beginning of line, replace 8 spaces with " one tab (only at the beginning of file) let line = getline('.') let col = col('.') if strpart(line, 0, 8) == ' ' let new = "\t" . strpart(line,8) call setline('.', new ) endif return "" endfunction