Minha solução é vincular-se ao mecanismo de sintaxe, o que significa que somente funcionará se você tiver o realce de sintaxe ativado. Tente isto:
iab <buffer> <expr> for <SID>CodeInsert("for", "for<Space>(<Space>{{<Esc>kA<Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>")
function! s:CodeInsert(abbr,str)
let syn = synIDattr(synIDtrans(synID(line('.'), col('.') - 1, 1)), 'name')
if syn ==? 'comment' || syn ==? 'constant'
return a:abbr
else
return a:str
endif
endfunction