diff options
Diffstat (limited to 'vim/plugin/detect_indent.vim')
-rw-r--r-- | vim/plugin/detect_indent.vim | 72 |
1 files changed, 13 insertions, 59 deletions
diff --git a/vim/plugin/detect_indent.vim b/vim/plugin/detect_indent.vim index 8bffde42..fef4b65e 100644 --- a/vim/plugin/detect_indent.vim +++ b/vim/plugin/detect_indent.vim @@ -1,59 +1,13 @@ -function s:CompareNumeric(a, b) - return a:a > a:b ? 1 : -1 -endfunction - -function Count() abort - - let spaces = { - \ 'hist': {}, - \ 'total': 0, - \} - let tabs = 0 - let total = max([line('$'), 1024]) - - for lnum in range(1, total) - let line = getline(lnum) - let tabs += matchstr(line, '^\t*') != '' - let indent = strlen(matchstr(line, '^ *')) - if indent == 0 - continue - endif - if !has_key(spaces['hist'], indent) - let spaces['hist'][indent] = 0 - endif - let spaces['hist'][indent] += 1 - let spaces['total'] += 1 - endfor - - if &expandtab == (spaces['total'] > tabs) - return - endif - - if &expandtab - setlocal noexpandtab softtabstop=0 - let &l:shiftwidth = &tabstop - else - setlocal expandtab - let shiftwidth = 0 - let indents = keys(spaces['hist']) - call map(indents, 'str2nr(v:val)') - call sort(indents, 's:CompareNumeric') - for shiftwidth in indents - if spaces['hist'][shiftwidth] * 100 / spaces['total'] >= 5 - break - endif - endfor - let &l:shiftwidth = shiftwidth - let &l:softtabstop = shiftwidth - endif - - let undo_indent = 'setlocal expandtab? shiftwidth? softtabstop?' - if exists('b:undo_indent') - let b:undo_indent .= '|'.undo_indent - else - let b:undo_indent = undo_indent - endif - -endfunction - -autocmd FileType * call Count() +if exists('loaded_detect_indent') || &compatible + finish +endif +let loaded_detect_indent = 1 + +command! -bar DetectIndent + \ call detect_indent#() + +augroup detect_indent + autocmd! + autocmd FileType * + \ DetectIndent +augroup END |