This plugin adds mode-specific coloring to your existing statusline so you can visually distinguish (screenshots below) which mode Vim is currently in.
Install this plugin using your favorite Vim plugin manager and restart Vim. Now change Vim modes and observe the statusline changing colors accordingly. That's all! For customization, read about Variables and Functions below.
You can redefine any of these variables per your customization needs.
You can define your own custom statusline (the default one is shown below) and this plugin will automatically add mode-specific colors & labels to it.
By default, this variable is defined as follows, unless you override it:
set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
You can assign 0 to this variable to prevent this plugin from changing the
laststatus
setting to always show the statusline for bottom-most windows:
let g:modusline_set_ls = 0
A dictionary that maps mode()
values to %#HLname#
statusline colors.
If there is no entry for a particular mode()
value in the dictionary,
then this plugin falls back to using jarring %#ErrorMsg#
as the color.
For a list of possible HLname values, run the Vim :highlight
command.
By default, this variable is defined as follows, unless you override it:
let g:modusline_colors = {} " see :help mode()
let g:modusline_colors['n'] = '' " Normal
let g:modusline_colors['no'] = '%#DiffChange#' " Operator-pending
let g:modusline_colors['v'] = '%#DiffText#' " Visual by character
let g:modusline_colors['V'] = '%#DiffText#' " Visual by line
let g:modusline_colors["\<C-V>"] = '%#DiffText#' " Visual blockwise
let g:modusline_colors['s'] = '%#WildMenu#' " Select by character
let g:modusline_colors['S'] = '%#WildMenu#' " Select by line
let g:modusline_colors["\<C-S>"] = '%#WildMenu#' " Select blockwise
let g:modusline_colors['i'] = '%#DiffAdd#' " Insert
let g:modusline_colors['R'] = '%#DiffDelete#' " Replace |R|
let g:modusline_colors['Rv'] = '%#DiffDelete#' " Virtual Replace |gR|
let g:modusline_colors['c'] = '%#Search#' " Command-line
let g:modusline_colors['cv'] = '%#MatchParen#' " Vim Ex mode |gQ|
let g:modusline_colors['ce'] = '%#MatchParen#' " Normal Ex mode |Q|
let g:modusline_colors['r'] = '%#Todo#' " Hit-enter prompt
let g:modusline_colors['rm'] = '%#Todo#' " The -- more -- prompt
let g:modusline_colors['r?'] = '%#Todo#' " A |:confirm| query of some sort
let g:modusline_colors['!'] = '%#IncSearch#' " Shell or external command is executing
let g:modusline_colors['t'] = '%#DiffAdd#' " Terminal mode: keys go to the job
let g:modusline_colors['ic'] = '%#DiffChange#' " see :help ins-completion
let g:modusline_colors['Rc'] = '%#DiffChange#' " see :help ins-completion
A dictionary that maps mode()
values to user-friendly labels (strings).
If there is no entry for a particular mode()
value in the dictionary,
then this plugin falls back to using that mode()
value as the label.
By default, this variable is defined as follows, unless you override it:
let g:modusline_labels = {}
You can redefine any of these functions per your customization needs.
Adds mode-specific colors and labels to the given statusline and returns
a new statusline expression that you can assign via :set statusline=
.
function! Modusline(statusline) abort
let modus = mode(1)
let color = ModuslineColor(modus)
let label = ModuslineLabel(modus)
return ModuslineMerge(a:statusline, modus, color, label)
endfunction
Returns a %#HLname#
statusline color for the given mode()
value by
referencing the g:modusline_colors
dictionary, as described earlier:
If there is no entry for a particular mode()
value in the dictionary,
then this plugin falls back to using jarring %#ErrorMsg#
as the color.
function! ModuslineColor(modus) abort
return get(g:modusline_colors, a:modus, '%#ErrorMsg#')
endfunction
Returns a user-friendly label (string) for the given mode()
value by
referencing the g:modusline_labels
dictionary, as described earlier:
If there is no entry for a particular mode()
value in the dictionary,
then this plugin falls back to using that mode()
value as the label.
function! ModuslineLabel(modus) abort
return get(g:modusline_labels, a:modus, a:modus)
endfunction
Returns a statusline expression built up from all the pieces passed in.
function! ModuslineMerge(statusline, modus, color, label) abort
return a:color .'‹'. a:label .'› '. a:statusline
endfunction
- https://hackernoon.com/the-last-statusline-for-vim-a613048959b2
- https://www.reddit.com/r/vim/comments/6b7b08/my_custom_statusline
Like my work? 👍 Please spare a life today as thanks! :cow::pig::chicken::fish::speak_no_evil::v::revolving_hearts:
Copyright 2018 Suraj N. Kurapati https://github.com/sunaku
Distributed under the same terms as Vim itself.