" Needed settings set laststatus=2 set timeoutlen=1000 ttimeoutlen=10 set noshowmode " call hlset([#{name: 'StatusLine', ctermfg: '252', ctermbg: '239'}]) " Logic let leftcap = '' let rightcap = '' let leftmcap = '' let rightmcap = '' set statusline= " Mode " Values are, in order, for: normal (default), insert, replace, visual modes " [ctermfg, ctermbg] let s:modecolors = [ \ ['236', '117'], \ ['236', '119'], \ ['236', '203'], \ ['236', '216'], \] let modestring = '' hi SLMode ctermfg=1 ctermbg=0 hi SLModeC ctermfg=1 ctermbg=0 function! SLModeSetter() let cm = mode() let ind = 0 if cm == 'i' let ind = 1 elseif cm == 'R' let ind = 2 let cm = 'r' elseif cm == 'v' let ind = 3 endif call hlset([#{name: 'SLMode', ctermfg: s:modecolors[l:ind][0], ctermbg: s:modecolors[l:ind][1]}]) call hlset([#{name: 'SLModeC', ctermfg: s:modecolors[l:ind][1], ctermbg: '239'}]) let g:modestring = l:cm return '' endfunction set statusline+=%{SLModeSetter()}%#SLModeC#%{leftcap}%#SLMode#%{modestring}%#SLModeC#%{rightcap} " \______leftcap______/\________mode_______/\______rightcap_____/ " Filename set statusline+=%#StatusLine#\ %f\ %{rightmcap} " File stat function! SLReadonly() return (&ft !~? 'vimfiler' && &readonly) ? ' ' : '' endfunction function! SLModified() return (&ft =~ 'vimfiler') ? '' : (&modified ? '' : (&modifiable ? '' : '')) endfunction set statusline+=\ %{SLReadonly()}%{SLModified()}\ " Middle separator set statusline+=%= " Filetype set statusline+=%{leftmcap}\ %{WebDevIconsGetFileTypeSymbol()}\ %{&ft}\ " Line and column count hi SLRowCol ctermfg=238 ctermbg=244 hi SLRowColC ctermfg=244 ctermbg=239 set statusline+=%#SLRowColC#%{leftcap}%#SLRowCol#%l:%c%#SLRowColC#%{rightcap}