首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vim statusline不会更改模式文本

vim statusline不会更改模式文本
EN

Stack Overflow用户
提问于 2021-01-12 01:40:13
回答 1查看 28关注 0票数 0

我自己写了一个简单的vim statusline插件,只需在statusline中添加颜色和模式,完成后一切都很顺利,但现在statusline不会随着我切换模式而改变。我把脚本文件放在~/.vim/plugin/中,vim的版本是7.4,这是我用centos7操作系统在虚拟数学中做的,下面是我的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 02:04:24

您正在设置执行autocmd时的模式名称。

如果你想用你的自定义函数动态更新模式,你需要在运行时调用它们。要执行此操作,请在%{}中封装调用,例如let s:mode_partition = '%{ GetModeColor().GetModeName() }'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65671898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档