在vim中如何创建更有用的状态栏?

154

我想让vim的状态栏更加丰富有趣,为此我需要一些想法。您如何自定义状态栏?


1
这个问题不适合在SO上,但可能适合Vim.SE。这个问题太旧了,无法迁移。 - Machavity
7个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
135

注:vim-airline 在 vimscript 选项中越来越受欢迎,因为 powerline 已经改用 python。


看起来现在是powerline 的时代了:

正常状态行

powerline

其他插件(例如ctrlp)的自定义状态行

powerline


63

这是我的代码:

set statusline=
set statusline +=%1*\ %n\ %*            "buffer number
set statusline +=%5*%{&ff}%*            "file format
set statusline +=%3*%y%*                "file type
set statusline +=%4*\ %<%F%*            "full path
set statusline +=%2*%m%*                "modified flag
set statusline +=%1*%=%5l%*             "current line
set statusline +=%2*/%L%*               "total lines
set statusline +=%1*%4v\ %*             "virtual column number
set statusline +=%2*0x%04B\ %*          "character under cursor

Vim 状态栏

这是我使用的颜色:

hi User1 guifg=#eea040 guibg=#222222
hi User2 guifg=#dd3333 guibg=#222222
hi User3 guifg=#ff66ff guibg=#222222
hi User4 guifg=#a0ee40 guibg=#222222
hi User5 guifg=#eeee40 guibg=#222222

1
"c实际上是字节数,即使在vim帮助中有时被称为列数。你可以使用v来获取通常所指的列号。" - Ludwig Weinzierl
11
我喜欢评论的清晰度,每个追加值都在自己的一行上。如果我7年前这样做了,当我进行最后一次干净的操作系统安装时就不会将它丢掉了。 - Bruno Bronosky
1
请注意,guifgguibg是针对gvim的。如果您在终端中运行vim,请尝试使用ctermfgctermbg。您还需要不同的颜色,数字1-16或1-256,这取决于您在vim中启用了多少种颜色。每个数字对应的颜色请参见相应颜色 - joelostblom
@alexzander,你可以将它们放在.gvimrc.vimrc中。如果你要设置guifg,请将它们放在.gvimrc中,因为它只适用于gvim,而ctermfg可以放在.vimrc中。 - Tassos
@alexzander 是的,只需将我的颜色中的 gui 部分替换为 cterm 并将它们放置在您的 .vimrc 中即可。您还可以设置喜欢的 guicterm 变体,以便同时满足您对 vim 和 gvim 的需求。 - Tassos
显示剩余6条评论

48

这是我使用的一个:

set statusline=
set statusline+=%7*\[%n]                                  "buffernr
set statusline+=%1*\ %<%F\                                "File+path
set statusline+=%2*\ %y\                                  "FileType
set statusline+=%3*\ %{''.(&fenc!=''?&fenc:&enc).''}      "Encoding
set statusline+=%3*\ %{(&bomb?\",BOM\":\"\")}\            "Encoding2
set statusline+=%4*\ %{&ff}\                              "FileFormat (dos/unix..) 
set statusline+=%5*\ %{&spelllang}\%{HighlightSearch()}\  "Spellanguage & Highlight on?
set statusline+=%8*\ %=\ row:%l/%L\ (%03p%%)\             "Rownumber/total (%)
set statusline+=%9*\ col:%03c\                            "Colnr
set statusline+=%0*\ \ %m%r%w\ %P\ \                      "Modified? Readonly? Top/bot.

高亮显示开启功能:

function! HighlightSearch()
  if &hls
    return 'H'
  else
    return ''
  endif
endfunction

颜色(改编自 ligh2011.vim):

hi User1 guifg=#ffdad8  guibg=#880c0e
hi User2 guifg=#000000  guibg=#F4905C
hi User3 guifg=#292b00  guibg=#f4f597
hi User4 guifg=#112605  guibg=#aefe7B
hi User5 guifg=#051d00  guibg=#7dcc7d
hi User7 guifg=#ffffff  guibg=#880c0e gui=bold
hi User8 guifg=#ffffff  guibg=#5b7fbb
hi User9 guifg=#ffffff  guibg=#810085
hi User0 guifg=#ffffff  guibg=#094afe

我的状态行


2
不错,这样就避免了需要使用花哨的状态行插件,至少对于我的用例来说,视觉效果很好 :) - Nishant
1
你如何让颜色正常工作? - trusktr
@trusktr 我不知道为什么在你的情况下它不起作用。 - Reman
1
你可以使用三元操作符来简化高亮搜索,而无需使用任何函数。例如echo &hls ? 'H' : ''。在我的情况下,代码如下:let &stl.="%6*%01(%{&hls?'H':''}%)%0* " - SergioAraujo
对我来说,它没有起作用,因为我正在使用终端,所以显然我必须设置ctermfg和ctermbg并使用命名颜色(蓝色,洋红色,绿色等),而不是guifg=hexnumber。 - Mirko
显示剩余6条评论

20

我发现很有用的一点是知道当前正在使用哪个复制/粘贴缓冲区(寄存器):%{v:register}。否则,我的完整状态行几乎与标准行完全相同。

:set statusline=%<%f\ %h%m%r\ %y%=%{v:register}\ %-14.(%l,%c%V%)\ %P

17

有时候少即是多,你在编码时真的需要知道你正在处理的文件百分之几以及文件类型吗?

set statusline=%F%m%r%h%w\ 
set statusline+=%{fugitive#statusline()}\    
set statusline+=[%{strlen(&fenc)?&fenc:&enc}]
set statusline+=\ [line\ %l\/%L]          
set statusline+=%{rvm#statusline()}       

状态栏

状态栏

我还喜欢使用尽可能少的颜色,以免分散注意力。

摘自:https://github.com/krisleech/vimfiles

注: rvm#statusline 是 Ruby 特定的,fugitive#statusline 是 git 特定的。


6

我目前使用的状态栏设置如下:

set laststatus=2
set statusline=\ %f%m%r%h%w\ %=%({%{&ff}\|%{(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\")}%k\|%Y}%)\ %([%l,%v][%p%%]\ %)

这是我的完整的 .vimrc 文件: http://gabriev82.altervista.org/projects/vim-configuration/

(说明:该段内容为一个链接,无需翻译)

4

设置状态行=%<%f%m\ \[%{&ff}:%{&fenc}:%Y]\ %{getcwd()}\ \ \[%{strftime('%Y/%b/%d\ %a\ %I:%M\ %p')}\]\ %=\ 行:%l\/%L\ 列:%c%V\ %P

这是我的,给出建议


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,