:inoremap <c-n><c-n> <esc>yyp^d$a
:inoremap <c-c><c-c> <esc>yyp^d$aend<esc>kyyp^d$a
------------------------------------------------------------------- no need something huge -------------------------- "============================================================================= " matlabFlowComplete.vim v0.0 " Author: Xianmin Hu <xianmin.hu@gmail.com> " http://scriptdemo.blogspot.com " Last Change: 19-Mar-2015. "============================================================================= " "key cc : to complete for, if and while flow "key nn : go to next line with proper indentation :function! CompleteMatlabFlow() " complete for, while and if flow control with proper indentation : let isValidForWhileIf=0 : let tmpline=substitute(getline(".")," \\+"," ","g") : let tmpline=substitute(tmpline," \\+$","","g") : call setline(".",tmpline) : let tmpline=substitute(tmpline,"^ \\+","","g") : let clinesp=split(tmpline," ") : unlet tmpline : execute "normal! o" : execute "normal! kk^" : if len(clinesp) > 1 : if clinesp[0] == "for" && len(clinesp)>2 : let isValidForWhileIf=1 : if len(clinesp)==3 : let newcline="for " . clinesp[1] . " = " . clinesp[2] . ":1:" . clinesp[2] : elseif len(clinesp)==4 : if clinesp[2]<clinesp[3] : let newcline=clinesp[0] . " " . clinesp[1] . " = " . clinesp[2] . ":" . clinesp[3] : else : let newcline=clinesp[0] . " " . clinesp[1] . " = " . clinesp[2] . ":-1:" . clinesp[3] : endif : elseif len(clinesp)>=5 : let newcline=clinesp[0] . " " . clinesp[1] . " = " . clinesp[2] . ":" . clinesp[3] . ":" . clinesp[4] : endif : let cpos = col(".") : let preline=split(getline(".")," ") : if len(preline) > 0 : if preline[0] == "for" : let cpos += 4 : elseif preline[0] == "while" : let cpos += 6 : elseif preline[0] == "if" : let cpos += 3 : endif : endif : while cpos > 1 : let newcline = " " . newcline : let cpos -= 1 : endwhile : execute "normal! j" : call setline(".",newcline) : execute "normal! yyp" : execute "normal! ^d$" : call setline(".",getline(".") . "end") : execute "normal! jdd" : execute "normal! kyykpd$i " : unlet newcline : unlet cpos : endif " : if (clinesp[0] == "if" || clinesp[0] == "while") && len(clinesp)>1 : let isValidForWhileIf=1 : let cpos = col(".") : let preline=split(getline(".")," ") : if len(preline) > 0 : if preline[0] == "for" : let cpos += 4 : elseif preline[0] == "while" : let cpos += 6 : elseif preline[0] == "if" : let cpos += 3 : endif : endif : let padStr="" : while cpos > 1 : let padStr = " " . padStr : let cpos -= 1 : endwhile : execute "normal! j^0d^" : call setline(".", padStr . getline(".")) : execute "normal! yyp^d$" : call setline(".",getline(".") . "end") : execute "normal! jdd" : execute "normal! kyykpd$i " : unlet padStr : unlet cpos : endif : unlet clinesp : endif : if isValidForWhileIf < 1 : execute "normal! u" : execute "normal! $" : endif : unlet isValidForWhileIf :endfunction :function! GoMatlabNext() " go next line and use same indent from previous line : execute "normal! yyp" : execute "normal! ^d$a" :endfunction :nmap cc :call CompleteMatlabFlow()<CR>a :nmap nn :call GoMatlabNext()<CR>a |
1) type "for a 1 4", then run cc in normal mode, ==>
for a = 1:4
end
2) type "for a 4 1", then run cc in normal mode, ==>
for a = 4:-1:4
end
3) type "for a 2 4 12", then run cc in normal mode, ==>
for a = 2:4:12
end
4) type "while a =4", then run cc in normal mode, ==>
while a=4
end
5) auto-indent
if you have"
%==============
if isLoop==1
for n loopStart loopStep loopEnd (run cc in normal mode)
end
it will result in:
%==============
if isLoop==1
for n = loopStart:loopStep:loopEnd
end
end