statusline.vim (2713B)
1 " Courtesy for tutorial: https://irrellia.github.io/blogs/vim-statusline/ 2 " Colours for the statusline 3 " Modi colours are defined further down 4 autocmd ColorScheme * 5 \ if &background == "dark"| 6 \ hi Base ctermbg=238 ctermfg=7| 7 \ hi Mode ctermbg=240 ctermfg=7 cterm=bold| 8 \ hi Git ctermbg=240 ctermfg=7| 9 \ hi Filetype ctermbg=240 ctermfg=7| 10 \ hi LineCol ctermbg=238 ctermfg=7| 11 \ hi Warn ctermbg=238 ctermfg=9 cterm=bold| 12 \ else| 13 \ hi Base ctermbg=252 ctermfg=0| 14 \ hi Mode ctermbg=254 ctermfg=0 cterm=bold| 15 \ hi Git ctermbg=254 ctermfg=0| 16 \ hi Filetype ctermbg=254 ctermfg=0| 17 \ hi LineCol ctermbg=252 ctermfg=0| 18 \ hi Warn ctermbg=252 ctermfg=9 cterm=bold| 19 \ endif 20 21 let g:modes={ 22 \'n' : 'Normal ', 23 \'no' : 'N·Operator Pending ', 24 \'v' : 'Visual ', 25 \'V' : 'V·Line ', 26 \'^V' : 'V·Block ', 27 \'s' : 'Select ', 28 \'S' : 'S·Line ', 29 \'^S' : 'S·Block ', 30 \'i' : 'Insert ', 31 \'R' : 'Replace ', 32 \'Rv' : 'V·Replace ', 33 \'c' : 'Command ', 34 \'cv' : 'Vim Ex ', 35 \'ce' : 'Ex ', 36 \'r' : 'Prompt ', 37 \'rm' : 'More ', 38 \'r?' : 'Confirm ', 39 \'!' : 'Shell ', 40 \'t' : 'Terminal ' 41 \} 42 43 " Determine current mode 44 function! CurrentMode() abort 45 let l:currentmode = mode() 46 let l:modelist = toupper(get(g:modes, l:currentmode, 'V·Block ')) 47 let l:current_status_mode = l:modelist 48 return l:current_status_mode 49 endfunction 50 51 function! CheckModified(modi) 52 if a:modi == 1 53 if &background == "dark" 54 hi Modi ctermbg=238 ctermfg=7 cterm=bold 55 else 56 hi Modi ctermbg=252 ctermfg=0 cterm=bold 57 endif 58 if expand('%') == "" 59 return '[New File]'.'*' 60 else 61 return expand('%:t').'*' 62 endif 63 else 64 if &background == "dark" 65 hi Modi ctermbg=238 ctermfg=7 cterm=NONE 66 else 67 hi Modi ctermbg=252 ctermfg=0 cterm=NONE 68 endif 69 if expand('%') == "" 70 return '[New File]' 71 else 72 return expand('%:t') 73 endif 74 endif 75 endfunction 76 77 function! CheckFileType(filetype) 78 if a:filetype == '' 79 return '-' 80 else 81 return tolower(a:filetype) 82 endif 83 endfunction 84 85 function! CheckRO(roflag) 86 if a:roflag == 0 87 return '' 88 else 89 return '⊖' 90 endif 91 endfunction 92 93 " Statusline format and layout 94 function! StatusLine() 95 let statusline = "" 96 let statusline .= "%#Base#" 97 let statusline .= "%#Mode# %{CurrentMode()}" 98 let statusline .= "%#Warn#%( %{CheckRO(&readonly)}%w%)" 99 let statusline .= "%#Modi# %{CheckModified(&modified)} " 100 let statusline .= "%#Base#" 101 let statusline .= "%=" 102 let statusline .= "%{gutentags#statusline('[', ']')} " 103 let statusline .= "%#FileType# %{CheckFileType(&filetype)} " 104 let statusline .= "%#LineCol# %p%% Ln %l/%L : %c " 105 return statusline 106 endfunction 107 108 " Activate the custom statusline 109 augroup enableStatusLine 110 autocmd! 111 autocmd VimEnter * set statusline=%!StatusLine() 112 augroup END