lightline
lightlineは
Vimのステータスラインを綺麗に表示させてくれるプラグインです。
Vimには元々vim-powerline
(とその後継のpowerline)
というPythonを使ったプラグインがありましたが、
最近、vim-airline
というプラグインが出来て、純粋Vim Scriptなので速いし、
他のプラグインとの融合等もあって嬉しい、
ということで移行した、と言う人が増えていました。
元々vim-powerlineはもっさりする気がして一度入れてから外してましたが、
すごい話題になってたのでまずvim-airlineを入れてみました。
そんな中、lightline
というプラグインが登場。
vim-airlineをさらに拡張性高くしたような感じで、さらに
作者の方のブログ
1ではその設計思想まで熱く語られています。
ということで、vim-airlineを導入したばかりでしたが、
lightlineも試してみることに。
ちょっと使ってみてとても拡張性が高いのが楽しい所です。
追記: 2017/09/24
下の方法だとちょっと表示順などをきちんと考えられてないので
もうちょっとちゃんとしたのに変更しています。
追記ここまで
取り敢えず置いてみた設定はこんな感じ。
lightline_settings.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| " lightline.vim {{{
if ! empty(neobundle#get("lightline.vim"))
let g:lightline = {
\"colorscheme": "jellybeans",
\"active": {
\"left": [["mode", "filename"], ["fugitive"]],
\"right": [["lineinfo"], ["fileinfo"]]},
\"component_visible_condition": {
\"fugitive": '(exists("*fugitive#head") && ""!=fugitive#head())'},
\'component_function': {
\'mode': 'MyMode',
\'filename': 'MyFileName',
\'fugitive': 'MyFugitive',
\'fileinfo': 'MyFileInfo',
\'lineinfo': 'MyLineInfo',
\},
\ 'separator': { 'left': '', 'right': '' },
\ 'subseparator': { 'left': '', 'right': '' }
\}
let g:lightline.inactive = g:lightline.active
function! MyMode()
let l:ps = ''
if &paste
let l:ps = " P"
endif
return lightline#mode() . l:ps
endfunction
function! MyFileName()
let l:fn = expand("%:t")
let l:ro = &ft !~? 'help' && &readonly ? " RO" : ""
let l:mo = &modifiable && &modified ? " +" : ""
return l:fn . l:ro . l:mo
endfunction
function! MyFugitive()
let l:fu = exists('*fugitive#head') ? fugitive#head() : ''
return winwidth('.') >=
\ strlen(MyMode()) + 2
\+ strlen(MyFileName()) + 2
\+ strlen(l:fu) + 2
\+ strlen(MyLineInfo()) + 2
\? l:fu : ''
endfunction
function! MyFileInfo()
let l:ff = &fileformat
let l:fe = (strlen(&fenc) ? &fenc : &enc)
let l:ft = (strlen(&filetype) ? &filetype : 'no')
let l:fi = l:ff . " " . l:fe . " " . l:ft
return winwidth('.') >=
\ strlen(MyMode()) + 2
\+ strlen(MyFileName()) + 2
\+ strlen(MyFugitive())
\+ ((exists("*fugitive#head") && ""!=fugitive#head()) ? 2 : 0)
\+ strlen(l:fi) + 2
\+ strlen(MyLineInfo()) + 2
\? l:fi : ''
endfunction
function! MyLineInfo()
let l:cl = line(".")
let l:ll = line("$")
let l:cc = col(".")
let l:li = printf("%4d/%d:%3d", l:cl, l:ll, l:cc)
return winwidth('.') >=
\ strlen(MyFileName()) + 2
\+ strlen(l:li) + 2
\? l:li : ''
endfunction
endif
"}}} lightline.vim
|
プラグインのhelpや
レポジトリにあるREADME
がかなり詳しいので、取り敢えず追ってくだけでも色々出来るようになります。
上のも関数などはREADMEを追って作ったものを変更したりしています。
ちょっと工夫してるところとしては、表示幅によって表示する項目を変えれるよう、各関数で表示幅とすべての表示文字数を比較して表示するかどうか決めています。
こんな感じで最後までファイル名は残るように。
表示の優先度などが全部の関数がお互いに上手く対応出来るように
書かないといけない様に関数を作ってしまっているので
もうちょっと上手く書けないかな、と思うところですが、
取り敢えずは良い感じに欲しい情報を載せる事が出来ました。
ちなみに、上のgifアニメでは、
vim-submode
を使ってWindowを動かしています
2。
作者の方のブログでは加えて、作者が教える!
シリーズもやってくれるみたいで、今後も追っていきたい所です。