mirror of
https://github.com/amix/vimrc
synced 2025-07-04 14:56:29 +08:00
prefinal
This commit is contained in:
256
sources_non_forked/vim-statline/plugin/statline.vim
Normal file
256
sources_non_forked/vim-statline/plugin/statline.vim
Normal file
@ -0,0 +1,256 @@
|
||||
" ============================================================================
|
||||
" File: statline.vim
|
||||
" Maintainer: Miller Medeiros <http://blog.millermedeiros.com/>
|
||||
" Description: Add useful info to the statusline and basic error checking.
|
||||
" Last Change: 2011-11-10
|
||||
" License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
" ============================================================================
|
||||
|
||||
if exists("g:loaded_statline_plugin")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_statline_plugin = 1
|
||||
|
||||
|
||||
" always display statusline (iss #3)
|
||||
set laststatus=2
|
||||
|
||||
|
||||
" ====== colors ======
|
||||
|
||||
" using link instead of named highlight group inside the statusline to make it
|
||||
" easier to customize, reseting the User[n] highlight will remove the link.
|
||||
" Another benefit is that colors will adapt to colorscheme.
|
||||
|
||||
"filename
|
||||
hi default link User1 Identifier
|
||||
" flags
|
||||
hi default link User2 Statement
|
||||
" errors
|
||||
hi default link User3 Error
|
||||
" fugitive
|
||||
hi default link User4 Special
|
||||
|
||||
|
||||
|
||||
" ====== basic info ======
|
||||
|
||||
" ---- number of buffers : buffer number ----
|
||||
|
||||
function! StatlineBufCount()
|
||||
if !exists("s:statline_n_buffers")
|
||||
let s:statline_n_buffers = len(filter(range(1,bufnr('$')), 'buflisted(v:val)'))
|
||||
endif
|
||||
return s:statline_n_buffers
|
||||
endfunction
|
||||
|
||||
if !exists('g:statline_show_n_buffers')
|
||||
let g:statline_show_n_buffers = 1
|
||||
endif
|
||||
|
||||
if g:statline_show_n_buffers
|
||||
set statusline=[%{StatlineBufCount()}\:%n]\ %<
|
||||
" only calculate buffers after adding/removing buffers
|
||||
augroup statline_nbuf
|
||||
autocmd!
|
||||
autocmd BufAdd,BufDelete * unlet! s:statline_n_buffers
|
||||
augroup END
|
||||
else
|
||||
set statusline=[%n]\ %<
|
||||
endif
|
||||
|
||||
|
||||
" ---- filename (relative or tail) ----
|
||||
|
||||
if exists('g:statline_filename_relative')
|
||||
set statusline+=%1*[%f]%*
|
||||
else
|
||||
set statusline+=%1*[%t]%*
|
||||
endif
|
||||
|
||||
|
||||
" ---- flags ----
|
||||
|
||||
" (h:help:[help], w:window:[Preview], m:modified:[+][-], r:readonly:[RO])
|
||||
set statusline+=%2*%h%w%m%r%*
|
||||
|
||||
|
||||
" ---- filetype ----
|
||||
|
||||
set statusline+=\ %y
|
||||
|
||||
|
||||
" ---- file format → file encoding ----
|
||||
|
||||
if &encoding == 'utf-8'
|
||||
let g:statline_encoding_separator = '→'
|
||||
else
|
||||
let g:statline_encoding_separator = ':'
|
||||
endif
|
||||
|
||||
if !exists('g:statline_show_encoding')
|
||||
let g:statline_show_encoding = 1
|
||||
endif
|
||||
if !exists('g:statline_no_encoding_string')
|
||||
let g:statline_no_encoding_string = 'No Encoding'
|
||||
endif
|
||||
if g:statline_show_encoding
|
||||
set statusline+=[%{&ff}%{g:statline_encoding_separator}%{strlen(&fenc)?&fenc:g:statline_no_encoding_string}]
|
||||
endif
|
||||
|
||||
|
||||
" ---- separation between left/right aligned items ----
|
||||
|
||||
set statusline+=%=
|
||||
|
||||
|
||||
" ---- current line and column ----
|
||||
|
||||
" (-:left align, 14:minwid, l:line, L:nLines, c:column)
|
||||
set statusline+=%-14(\ L%l/%L:C%c\ %)
|
||||
|
||||
|
||||
" ---- scroll percent ----
|
||||
|
||||
set statusline+=%P
|
||||
|
||||
|
||||
" ---- code of character under cursor ----
|
||||
|
||||
if !exists('g:statline_show_charcode')
|
||||
let g:statline_show_charcode = 0
|
||||
endif
|
||||
if g:statline_show_charcode
|
||||
" (b:num, B:hex)
|
||||
set statusline+=%9(\ \%b/0x\%B%)
|
||||
endif
|
||||
|
||||
|
||||
|
||||
" ====== plugins ======
|
||||
|
||||
|
||||
" ---- RVM ----
|
||||
|
||||
if !exists('g:statline_rvm')
|
||||
let g:statline_rvm = 0
|
||||
endif
|
||||
if g:statline_rvm
|
||||
set statusline+=%{exists('g:loaded_rvm')?rvm#statusline():''}
|
||||
endif
|
||||
|
||||
|
||||
" ---- rbenv ----
|
||||
|
||||
if !exists('g:statline_rbenv')
|
||||
let g:statline_rbenv = 0
|
||||
endif
|
||||
if g:statline_rbenv
|
||||
set statusline+=%{exists('g:loaded_rbenv')?rbenv#statusline():''}
|
||||
endif
|
||||
|
||||
|
||||
" ---- Fugitive ----
|
||||
|
||||
if !exists('g:statline_fugitive')
|
||||
let g:statline_fugitive = 0
|
||||
endif
|
||||
if g:statline_fugitive
|
||||
set statusline+=%4*%{exists('g:loaded_fugitive')?fugitive#statusline():''}%*
|
||||
endif
|
||||
|
||||
|
||||
" ---- Syntastic errors ----
|
||||
|
||||
if !exists('g:statline_syntastic')
|
||||
let g:statline_syntastic = 1
|
||||
endif
|
||||
if g:statline_syntastic
|
||||
set statusline+=\ %3*%{exists('g:loaded_syntastic_plugin')?SyntasticStatuslineFlag():''}%*
|
||||
endif
|
||||
|
||||
|
||||
|
||||
" ====== custom errors ======
|
||||
|
||||
|
||||
" based on @scrooloose whitespace flags
|
||||
" http://got-ravings.blogspot.com/2008/10/vim-pr0n-statusline-whitespace-flags.html
|
||||
|
||||
|
||||
" ---- mixed indenting ----
|
||||
|
||||
if !exists('g:statline_mixed_indent')
|
||||
let g:statline_mixed_indent = 1
|
||||
endif
|
||||
|
||||
if !exists('g:statline_mixed_indent_string')
|
||||
let g:statline_mixed_indent_string = '[mix]'
|
||||
endif
|
||||
|
||||
"return '[&et]' if &et is set wrong
|
||||
"return '[mixed-indenting]' if spaces and tabs are used to indent
|
||||
"return an empty string if everything is fine
|
||||
function! StatlineTabWarning()
|
||||
if !exists("b:statline_indent_warning")
|
||||
let b:statline_indent_warning = ''
|
||||
|
||||
if !&modifiable
|
||||
return b:statline_indent_warning
|
||||
endif
|
||||
|
||||
let tabs = search('^\t', 'nw') != 0
|
||||
|
||||
"find spaces that arent used as alignment in the first indent column
|
||||
let spaces = search('^ \{' . &ts . ',}[^\t]', 'nw') != 0
|
||||
|
||||
if tabs && spaces
|
||||
let b:statline_indent_warning = g:statline_mixed_indent_string
|
||||
elseif (spaces && !&et) || (tabs && &et)
|
||||
let b:statline_indent_warning = '[&et]'
|
||||
endif
|
||||
endif
|
||||
return b:statline_indent_warning
|
||||
endfunction
|
||||
|
||||
if g:statline_mixed_indent
|
||||
set statusline+=%3*%{StatlineTabWarning()}%*
|
||||
|
||||
" recalculate when idle and after writing
|
||||
augroup statline_indent
|
||||
autocmd!
|
||||
autocmd cursorhold,bufwritepost * unlet! b:statline_indent_warning
|
||||
augroup END
|
||||
endif
|
||||
|
||||
|
||||
" --- trailing white space ---
|
||||
|
||||
if !exists('g:statline_trailing_space')
|
||||
let g:statline_trailing_space = 1
|
||||
endif
|
||||
|
||||
function! StatlineTrailingSpaceWarning()
|
||||
if !exists("b:statline_trailing_space_warning")
|
||||
if search('\s\+$', 'nw') != 0
|
||||
let b:statline_trailing_space_warning = '[\s]'
|
||||
else
|
||||
let b:statline_trailing_space_warning = ''
|
||||
endif
|
||||
endif
|
||||
return b:statline_trailing_space_warning
|
||||
endfunction
|
||||
|
||||
if g:statline_trailing_space
|
||||
set statusline+=%3*%{StatlineTrailingSpaceWarning()}%*
|
||||
|
||||
" recalculate when idle, and after saving
|
||||
augroup statline_trail
|
||||
autocmd!
|
||||
autocmd cursorhold,bufwritepost * unlet! b:statline_trailing_space_warning
|
||||
augroup END
|
||||
endif
|
Reference in New Issue
Block a user