vim 状态行不会改变模式文本
The vim statusline wouldn't change mode text
我自己写了一个简单的vim状态栏插件,只是在状态栏中添加颜色和模式,完成后一切顺利,但现在状态栏不会随着我的切换而改变模式。
我把脚本文件放在 ~/.vim/plugin/
vim 版本是 7.4 巨大
我用 centos7 OS 在虚拟数学中做了这个
这是我的代码:
hi NormalColor guifg=Black guibg=Green ctermbg=46 ctermfg=0
hi InsertColor guifg=Black guibg=Cyan ctermbg=51 ctermfg=0
hi ReplaceColor guifg=Black guibg=maroon1 ctermbg=165 ctermfg=0
hi VisualColor guifg=Black guibg=Orange ctermbg=202 ctermfg=0
hi DefaultColor guifg=Black guibg=Orange ctermbg=202 ctermfg=0
hi DefaultLineColor guifg=Black guibg=Orange ctermbg=187 ctermfg=0
let s:mode_map = {
\ 'n': ' NORMAL ',
\ 'i': ' INSERT ',
\ 'R': ' REPLACE ',
\ 'v': ' VISUAL ',
\ 'V': ' V-LINE ',
\ "\<C-v>": ' V-BLOCK ',
\ 'c': ' COMMAND ',
\ 's': ' SELECT ',
\ 'S': ' S-LINE ',
\ "\<C-s>": ' S-BLOCK ',
\ 't': ' TERMINAL '
\ }
let s:mode_color = {
\ 'n': '%#NormalColor#',
\ 'i': '%#InsertColor#',
\ 'R': '%#ReplaceColor#',
\ 'v': '%#VisualColor#',
\ 'V': '%#VisualLineColor#',
\ "\<C-v>": '%#VisualBlockColor#',
\ 'c': '%#CommandColor#',
\ 's': '%#SelectColor#',
\ 'S': '%#SelectLineColor#',
\ "\<C-s>": '%#SelectBlockColor#',
\ 't': '%#TerminalColor#'
\ }
let s:line_default_color = '%#DefaultLineColor#'
let s:default_statusline_label = ' %f %M %y%=%3l/%-5L %p%% '
function! SetDefaultStatuslineLabel()
return ' %f %M %y%=%3l/%-5L %p%% '
endfunction
function! GetModeName()
return get(s:mode_map, mode(), '')
endfunction
function! GetModeColor()
return get(s:mode_color, mode(), 'DefaultColor')
endfunction
let s:mode_partition = GetModeColor().GetModeName()
function! ConcatAll()
return s:mode_partition.
\ s:line_default_color.
\ s:default_statusline_label
endfunction
" set statusline=%!ConcatAll()
augroup Statusline
autocmd!
autocmd VimEnter,WinEnter,BufWinEnter * set statusline=%!ConcatAll()
augroup END
您正在设置执行 autocmd 时的模式名称。
如果您想使用您的自定义函数动态更新模式,您需要在运行时调用它们。为此,将调用包装在 %{}
中,例如let s:mode_partition = '%{ GetModeColor().GetModeName() }'
我自己写了一个简单的vim状态栏插件,只是在状态栏中添加颜色和模式,完成后一切顺利,但现在状态栏不会随着我的切换而改变模式。 我把脚本文件放在 ~/.vim/plugin/ vim 版本是 7.4 巨大 我用 centos7 OS 在虚拟数学中做了这个 这是我的代码:
hi NormalColor guifg=Black guibg=Green ctermbg=46 ctermfg=0
hi InsertColor guifg=Black guibg=Cyan ctermbg=51 ctermfg=0
hi ReplaceColor guifg=Black guibg=maroon1 ctermbg=165 ctermfg=0
hi VisualColor guifg=Black guibg=Orange ctermbg=202 ctermfg=0
hi DefaultColor guifg=Black guibg=Orange ctermbg=202 ctermfg=0
hi DefaultLineColor guifg=Black guibg=Orange ctermbg=187 ctermfg=0
let s:mode_map = {
\ 'n': ' NORMAL ',
\ 'i': ' INSERT ',
\ 'R': ' REPLACE ',
\ 'v': ' VISUAL ',
\ 'V': ' V-LINE ',
\ "\<C-v>": ' V-BLOCK ',
\ 'c': ' COMMAND ',
\ 's': ' SELECT ',
\ 'S': ' S-LINE ',
\ "\<C-s>": ' S-BLOCK ',
\ 't': ' TERMINAL '
\ }
let s:mode_color = {
\ 'n': '%#NormalColor#',
\ 'i': '%#InsertColor#',
\ 'R': '%#ReplaceColor#',
\ 'v': '%#VisualColor#',
\ 'V': '%#VisualLineColor#',
\ "\<C-v>": '%#VisualBlockColor#',
\ 'c': '%#CommandColor#',
\ 's': '%#SelectColor#',
\ 'S': '%#SelectLineColor#',
\ "\<C-s>": '%#SelectBlockColor#',
\ 't': '%#TerminalColor#'
\ }
let s:line_default_color = '%#DefaultLineColor#'
let s:default_statusline_label = ' %f %M %y%=%3l/%-5L %p%% '
function! SetDefaultStatuslineLabel()
return ' %f %M %y%=%3l/%-5L %p%% '
endfunction
function! GetModeName()
return get(s:mode_map, mode(), '')
endfunction
function! GetModeColor()
return get(s:mode_color, mode(), 'DefaultColor')
endfunction
let s:mode_partition = GetModeColor().GetModeName()
function! ConcatAll()
return s:mode_partition.
\ s:line_default_color.
\ s:default_statusline_label
endfunction
" set statusline=%!ConcatAll()
augroup Statusline
autocmd!
autocmd VimEnter,WinEnter,BufWinEnter * set statusline=%!ConcatAll()
augroup END
您正在设置执行 autocmd 时的模式名称。
如果您想使用您的自定义函数动态更新模式,您需要在运行时调用它们。为此,将调用包装在 %{}
中,例如let s:mode_partition = '%{ GetModeColor().GetModeName() }'