今天又再捣鼓vimrc,
思考怎么让tab实现如下功能呢?
1.如果当前行为空行: 跳到与上行对齐的位置
2.如果当前行不为空且光标在行首空串内:格式当前行
3.在其它位置: 原本的tab功能
想了很久,终于找到一个方法
imap <tab> <esc>:call SmartTAB()<cr><F3>
func! SmartTAB()
if nextnonblank('.')!=line('.')
exec "set ve=all"
let a:int=indent(line(".")-1)
if a:int>4
call cursor(line("."),a:int-4)
endif
noremap <F3> a<tab><esc>:set ve="<cr>a
elseif virtcol('.')<indent('.')
noremap <F3> ==i
elseif virtcol('.')==1
noremap <F3> i<tab>
else
noremap <F3> a<tab>
endif
endfunc!
简单来说就是
1.找一个不用的键如:F3
2.在函数中根据不同的条件,把F3改成不同的语句
3.在原来的imap中调用F3
注: 第一个map不要加nore不然F3不能被替换
函数内的map一定要加nore,不然它会替换<tab>造成死循环
函数内的map要根据具体的mode使用,像我的因为之前<Esc>了所以是noremap
vim函数列表:http://blog.csdn.net/inu1255/article/details/10548165