mode: add several new modes

fixes #2499 #2498
This commit is contained in:
Christian Brabandt
2022-02-06 22:06:11 +01:00
parent 031e6ee4b2
commit 24f2878080
2 changed files with 74 additions and 38 deletions

View File

@@ -222,33 +222,33 @@ function! airline#check_mode(winnr)
if get(w:, 'airline_active', 1)
let m = mode(1)
if m ==# "i"
let mode = ['insert']
elseif m[0] ==# "i"
let mode = ['insert']
elseif m ==# "Rv"
let mode =['replace']
elseif m[0] ==# "R"
let mode = ['replace']
elseif m[0] =~# '\v(v|V||s|S|)'
let mode = ['visual']
elseif m ==# "t"
let mode = ['terminal']
elseif m[0] ==# "c"
let mode = ['commandline']
elseif m ==# "no" " does not work, most likely, Vim does not refresh the statusline in OP mode
let mode = ['normal']
elseif m[0:1] ==# 'ni'
let mode = ['insert']
let m = 'ni'
" Refer :help mode() to see the list of modes
" NB: 'let mode' here refers to the display colour _groups_,
" not the literal mode's code (i.e., m). E.g., Select modes
" v, S and ^V use 'visual' since they are of similar ilk.
" Some modes do not get recognised for status line purposes:
" no, nov, noV, no^V, !, cv, and ce.
" Mode name displayed is handled in init.vim (g:airline_mode_map).
"
if m[0] ==# "i"
let mode = ['insert'] " Insert modes + submodes (i, ic, ix)
elseif m[0] == "R"
let mode = ['replace'] " Replace modes + submodes (R, Rc, Rv, Rx) (NB: case sensitive as 'r' is a mode)
elseif m[0] =~ '\v(v|V||s|S|)'
let mode = ['visual'] " Visual and Select modes (v, V, ^V, s, S, ^S))
elseif m ==# "t"
let mode = ['terminal'] " Terminal mode (only has one mode (t))
elseif m[0] =~ '\v(c|r|!)'
let mode = ['commandline'] " c, cv, ce, r, rm, r? (NB: cv and ce stay showing as mode entered from)
else
let mode = ['normal']
let mode = ['normal'] " Normal mode + submodes (n, niI, niR, niV; plus operator pendings no, nov, noV, no^V)
endif
if exists("*VMInfos") && !empty(VMInfos())
" Vim plugin Multiple Cursors https://github.com/mg979/vim-visual-multi
let m = 'multi'
endif
if index(['Rv', 'no', 'ni', 'ix', 'ic', 'multi'], m) == -1
" Adjust to handle additional modes, which don't display correctly otherwise
if index(['niI', 'niR', 'niV', 'ic', 'ix', 'Rc', 'Rv', 'Rx', 'multi'], m) == -1
let m = m[0]
endif
let w:airline_current_mode = get(g:airline_mode_map, m, m)