http://nano-chicken.blogspot.tw/2014/07/vim-statusline.html
http://blog.csdn.net/simple_the_best/article/details/53906553
简单介绍一下重点:%1*[foo]%*
, hi User1 ......
, 改变的便是 [foo] 部分的 style, 比如前景色,背景色,粗体等等。如果你也想要尝试自己定制一番,按照个人喜好照葫芦画瓢即可 :p.
上面的示例似乎有些复杂,下面给出一个简略版本:
set statusline+=%4*\ %F\ %*
hi User4 cterm=bold ctermfg=169 ctermbg=239
分两步:
1. %数字*
+ 后面跟上所要在 statusline 中显示的内容 +%*
,圈出所要进行操作的范围,比如简略版本中为 \ %F \
, 即为 空格 文件的全路径 空格
。 对空格进行转义
2. 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 就可以了。
实际测试下来的颜色对照表
0:白色
1:红色
2:蓝色
7:灰色
超过9就没用了
status line會在vim底下有一個視窗,用以顯示狀態,透過laststatus=0關閉status line,或laststatus=2永遠開啟status line。
透過statusline設定要顯示那些東西,以及如何顯示,基本上就是"%"加上修飾字(vim的document稱為item),
如%F會顯示含路徑檔案名稱,%f顯示不含路徑檔案名稱,其他一般文字會被直接顯示,如set statusline=%l/%L,就會顯示"目前所在行數/全部行數",如8/50之類的字眼。而空白要用"\"escape。
有幾個特別的修飾字(item),如"*"是設定highlight group,根據group number設定前景與背景顏色,如
set statusline=%2*%F hi User2 ctermfg=3 ctermbg=0
會將%F(顯示含路徑檔案名稱)顯示前景為黃色的字體。
修飾字(item)"<"則會截去過長的字串。修飾字(item)"="會把status分成左右兩部分,即靠左靠右對齊。其餘的翻翻document吧。
以下是我常用的vim設定,
set statusline= set statusline+=%1*\[%n] "buffernr set statusline+=%2*\ %<%f\ "File+path "set statusline+=%0*\ %=\ %{''.(&fenc!=''?&fenc:&enc).''}\ "Encoding "set statusline+=%4*\ %{(&bomb?\",BOM\":\"\")}\ "Encoding2 set statusline+=%0*\ [format:%{&ff}]\ "FileFormat (dos/unix..) set statusline+=%0*\ %=\ %6*row:%l/%L\ col:%03c\ (%03p%%)\ "Rownumber/total (%) set statusline+=%0*\ \ %m%r%w\ %P\ \ "Modified? Readonly? Top/bot. "hi User2 ctermfg=3 ctermbg=0 "颜色的定义,对应上面的%2* "hi User6 ctermfg=3 ctermbg=4 "颜色的定义,对应上面的%6* set laststatus=2 "" " set ls=2 " 始终显示状态行 hi User1 cterm=bold ctermfg=2 ctermbg=1 hi User2 cterm=bold ctermfg=2 ctermbg=2 hi User3 cterm=bold ctermfg=2 ctermbg=1 hi User4 cterm=bold ctermfg=2 ctermbg=1 hi User5 cterm=bold ctermfg=2 ctermbg=1 hi User6 cterm=bold ctermfg=3 ctermbg=4
如果想显示绝对路径用
set statusline=%F
显示相对路径用
set statusline=%f
也可以直接使用ctrl+g来调出来。
http://yyq123.blogspot.tw/2009/10/vim-statusline.html
Vim默认的状态行,左侧显示当前打开的文件名,右侧显示当前所处的行列位置。当你执行Vim命令时,状态行将消失并显示命令输入及输出。
通常状态行用反色显示。你可以通过修改highlight选项中的s字符来改变。例如,sb设置为粗体字。如果状态行没有启用高亮 (sn),那么字符^表示当前窗口,字符=表示其它窗口。如果支持鼠标并且已经通过设置mouse选项使之启动,那么你可以用鼠标拖动状态行以改变窗口的大小。
定制状态行
我们可以使用以下命令来定义状态行:
:set statusline format
例如以下命令,将在状行中包含文件名:
:set statusline=The file is"%f"
选项包含printf风格的%项目,中间可以间杂普通文本。内容默认为右对齐,如果希望左对齐,那么可以在%后面加上-。数字内容是忽略开头0显示的,如果需要显示前导0,那么可以在%后加上一个"0"。单个百分号可以用"%%"给出。最多可给出80个项目。
如果此选项以%!开始,它用作表达式。计算此表达式的结果用作选项值。
%(...%) | 定义一个项目组。 |
%{n}* | %对其余的行使用高亮显示组Usern,直到另一个%n*。数字n必须从1到9。用%*或%0*可以恢复正常的高亮显示。 |
%< | 如果状态行过长,在何处换行。缺省是在开头。 |
%= | 左对齐和右对齐项目之间的分割点。 出现在这个符号之前的设置左对齐,出现在这个符号右边的设置右对齐 |
% | 字符% |
%B | 光标下字符的十六进制形式 |
%F | 缓冲区的文件完整路径 |
%H | 如果为帮助缓冲区则显示为HLP |
%L | 缓冲区中的行数 |
%M | 如果缓冲区修改过则显示为+ |
%N | 打印机页号 |
%O | 以十六进制方式显示文件中的字符偏移 |
%P | 文件中光标前的% |
%R | 如果缓冲区只读则为RO |
%V | 列数。如果与%c相同则为空字符串 |
%W | 如果窗口为预览窗口则为PRV |
%Y | 缓冲区的文件类型,如vim |
%a | 如果编辑多行文本,这个字行串就是({current} of {arguments}),例如:(5 of 18)。如果在命令行中只有一行,这个字符串为空 |
%b | 光标下的字符的十进制表示形式 |
%c | 列号 |
%f | 缓冲区的文件路径 |
%h | 如果为帮助缓冲区显示为[Help] |
%l | 行号 |
%m | 如果缓冲区已修改则表示为[+] |
%n | 缓冲区号 |
%o | 在光标前的字符数(包括光标下的字符) |
%p | 文件中所在行的百分比 |
%r | 如果缓冲区为只读则表示为[RO] |
%t | 文件名(无路径) |
%v | 虚列号 |
%w | 如果为预览窗口则显示为[Preview] |
%y | 缓冲区的文件类型,如[vim] |
%{expr} | 表达式的结果 |
显示/隐藏状态行
即使已经使用以上命令设置选项,状态行还是保持原样,这是因为Vim在默认情况下是不显示状态行的,而仅显示命令缓冲区等极少的信息。我们可以使用以下命令,将状态行显示在窗口底部倒数第二行:
:set laststatus=2
你也可以使用以下命令,移去状态行:
:set laststatus=0
状态行实例
利用以下命令,可以在状态行中显示:当前文件名,文件格式(DOS, Unix),文件类型 (XHTML),当前位置和文件总行数。
:set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
实际效果如下图所示:
除了显示的内容,你还可以使用以下命令定义显示的颜色。
:set statusline=%2*%n%m%r%h%w%*\ %F\ %1*[FORMAT=%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]\ [TYPE=%2*%Y%1*]\ [COL=%2*%03v%1*]\ [ROW=%2*%03l%1*/%3*%L(%p%%)%1*]\
需要使用以下命令,自定义高亮显示颜色。
hi User1 guifg=gray
hi User2 guifg=red
hi User3 guifg=white
实际效果如下图所示:
你还可以通过在_vimrc文件中包括以下命令,使状态行根据状态的不同,显示不同的颜色。
function! InsertStatuslineColor(mode)
if a:mode == 'i'
hi statusline guibg=peru
elseif a:mode == 'r'
hi statusline guibg=blue
else
hi statusline guibg=black
endif
endfunction
au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi statusline guibg=orange guifg=white
hi statusline guibg=black
如下图所示,状态行的文件名部分,在插入状态时显示为橘色背景,这样就能很明显地提醒我们所处的状态:
:set statusline format |
定制状态行 |
:set laststatus |
显示/隐藏状态行 |
參考資料
- vim document - statusline, http://vimdoc.sourceforge.net/htmldoc/options.html#'statusline'
- vim document - status-line, http://vimdoc.sourceforge.net/htmldoc/windows.html#status-line
- Learn Vimscript the Hard Way, Status Lines