资讯专栏INFORMATION COLUMN

不用vim-airline/lightline.vim, 如何使用纯手工制作一个漂亮的 vim 状态

darry / 3006人阅读

摘要:一些有用的信息,比如语法检查的内容信息。分别指的是与环境。文件完整路径后面采用橙色前景色显示的是语法检查的信息。

我将 space-vim 的状态栏多带带提取成为一个插件: https://github.com/liuchengxu... , 可直接安装试用。


首先看一下最后的效果:

知己知彼,百战不殆。先来分析一下使用 airline 与 lightline 有什么好处?

漂亮,酷炫,这毋庸置疑。

airline 与很多插件集成的非常好,真是省心又省力。

那有什么不足之处呢?

airline 可能会导致 100 ms 的启动延迟。具体可以看这里 https://github.com/liuchengxu..., 这里也有一篇关于 vim 启动优化非常好的文章。

定制性依旧不高,或者说深度定制的门槛有点高,不是那么容易上手。我曾经尝试过深入修改过 airline,不过并不顺利。

它们所提供的信息可能过于庞杂,显得有些冗余。

那么如何通过纯手工制作一个与 airline/lightline 相比也还不错的 statusline 呢?

什么叫不错?这个因人而异,按照我个人的审美而言,首先不能太单调(我只关心漂不漂亮),其次得显示出一些有用的信息。那么就会涉及到以下一些内容:

颜色转换,也就是各部分前景色,背景色之类的。

一些有用的信息,比如语法检查的内容信息。

为了漂亮,我们可能还会选择添加一些 Unicode 字符进去。

function! Buf_total_num()
    return len(filter(range(1, bufnr("$")), "buflisted(v:val)"))
endfunction
function! File_size(f)
    let l:size = getfsize(expand(a:f))
    if l:size == 0 || l:size == -1 || l:size == -2
        return ""
    endif
    if l:size < 1024
        return l:size." bytes"
    elseif l:size < 1024*1024
        return printf("%.1f", l:size/1024.0)."k"
    elseif l:size < 1024*1024*1024
        return printf("%.1f", l:size/1024.0/1024.0) . "m"
    else
        return printf("%.1f", l:size/1024.0/1024.0/1024.0) . "g"
    endif
endfunction
set statusline=%<%1*[B-%n]%*
" TOT is an abbreviation for total
set statusline+=%2*[TOT:%{Buf_total_num()}]%*
set statusline+=%3* %{File_size(@%)} %*
set statusline+=%4* %F %*
set statusline+=%5*『 %{exists("g:loaded_ale")?ALEGetStatusLine():""}』%{exists("g:loaded_fugitive")?fugitive#statusline():""}%*
set statusline+=%6* %m%r%y %*
set statusline+=%=%7* %{&ff} | %{"".(&fenc==""?&enc:&fenc).((exists("+bomb") && &bomb)?",B":"")." |"} %-14.(%l:%c%V%)%*
set statusline+=%8* %P %*
" default bg for statusline is 236 in space-vim-dark
hi User1 cterm=bold ctermfg=232 ctermbg=179
hi User2 cterm=None ctermfg=214 ctermbg=242
hi User3 cterm=None ctermfg=251 ctermbg=240
hi User4 cterm=bold ctermfg=169 ctermbg=239
hi User5 cterm=None ctermfg=208 ctermbg=238
hi User6 cterm=None ctermfg=246 ctermbg=237
hi User7 cterm=None ctermfg=250 ctermbg=238
hi User8 cterm=None ctermfg=249 ctermbg=240

简单介绍一下重点:%1*[foo]%*, hi User1 ......, 改变的便是 [foo] 部分的 style, 比如前景色,背景色,粗体等等。如果你也想要尝试自己定制一番,按照个人喜好照葫芦画瓢即可 :p.

上面的示例似乎有些复杂,下面给出一个简略版本:

set statusline+=%4* %F %* 
hi User4 cterm=bold ctermfg=169 ctermbg=239 

分两步:

%数字* + 后面跟上所要在 statusline 中显示的内容 +%*,圈出所要进行操作的范围,比如简略版本中为 %F , 即为 空格 文件的全路径 空格

hi User数字 cterm=bold ctermfg=111 ctermbg=111 gui=bold guifg=111 guibg=111 ,就会 highlight 上面圈出的范围。 cterm, gui 分别指的是 terminal 与 GUI 环境。 fg,bg 为前景,背景色。数字可以自己定义。 hi User1 ... 就会对 %1* ... %* 所圈中的 ... 进行 highlight 操作。

也可以不用数字,采用自定义名称。 比如%4* 可替换为%#highlightgroup#, highlightgroup 为一个自定义的名称,那么%4* %F %* 也可以写为 %#fullPath# %F %*hi fullPath ... 进行 highlight 就可以了。

至此你应该可以操作自己的 statusline 了。这里是 256 色对照表 , 这里 是我给出的示例出处。

如果你不喜欢 airline 可能导致 vim 启动延迟 100 ms, 或是喜欢无插件版本的 vim, 就可以使用这个方法来进行 statusline 的美化了。实际上,这同样也适用于 tabline.

顺便介绍一下 space-vim 的 statusline 值得关注的一些部分,[B-1] 代表 buffer 1, 1 为当前 buffer 对应的编号。[TOT 3], TOT 指的是 total, 当前共有多少 buffer,可以使用 Tab 快速切换。文件完整路径后面采用橙色前景色显示的是 ale 语法检查的信息。其他部分比较显然,值得关注的点也不多就不介绍了。

末了,说一下上面的缺点:所有 window 的 statusline 都是很相似的,可能不能像 airline/lightline 那样容易区分出哪个是当前光标所在的 window。 而且跟你的 colorscheme 可能不搭。不过我个人来讲,愿意接受这些不足。

仅仅是分享一个方案,如何选择取决于你自己。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24917.html

相关文章

  • css3漂亮checkbox和radio美化效果插件Pretty.css插件

    摘要:插件介绍是一款纯漂亮的和美化效果。可以和多种字体图标结合使用,对原生的和进行美化,还可以制作按钮点击时的动画效果。支持的图标库有安装可以使用,或来安装。 插件介绍 pretty.css是一款纯css3漂亮的checkbox和radio美化效果。pretty.css可以和多种字体图标结合使用,对原生的checkbox和radio进行美化,还可以制作按钮点击时的动画效果。 showImg(...

    eechen 评论0 收藏0
  • javascript功能插件大集合 前端常用插件 js常用插件

    摘要:转载来源包管理器管理着库,并提供读取和打包它们的工具。能构建更好应用的客户端包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。很棒的组件集合。隐秘地使用和用户数据。 转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具。•npm – npm 是 javasc...

    netmou 评论0 收藏0
  • javascript功能插件大集合 前端常用插件 js常用插件

    摘要:转载来源包管理器管理着库,并提供读取和打包它们的工具。能构建更好应用的客户端包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。很棒的组件集合。隐秘地使用和用户数据。 转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具。•npm – npm 是 javasc...

    Hydrogen 评论0 收藏0
  • javascript功能插件大集合,写前端亲们记得收藏

    摘要:一个专注于浏览器端和兼容的包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。完全插件化的工具,能在中识别和记录模式。健壮的优雅且功能丰富的模板引擎。完整的经过充分测试和记录数据结构的库。 【导读】:GitHub 上有一个 Awesome – XXX 系列的资源整理。awesome-javascript 是 sorrycc 发起维护的 JS 资源列表...

    cfanr 评论0 收藏0

发表评论

0条评论

darry

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<