mirror of
https://github.com/itchyny/lightline.vim.git
synced 2025-11-14 22:43:50 -05:00
284 lines
11 KiB
Markdown
284 lines
11 KiB
Markdown
# lightline.vim
|
|
A light and configurable statusline for Vim
|
|
|
|
### powerline theme (default)
|
|

|
|

|
|

|
|

|
|
|
|
### wombat (with font integration)
|
|
|
|

|
|

|
|

|
|

|
|
|
|
### jellybeans (with font integration)
|
|
|
|

|
|

|
|

|
|

|
|
|
|
### solarized theme (dark)
|
|
|
|

|
|

|
|

|
|

|
|
|
|
### solarized theme (light)
|
|
|
|

|
|

|
|

|
|

|
|
|
|
|
|
### landscape theme (with font integration)
|
|
|
|

|
|

|
|

|
|

|
|
With branch name, readonly mark and modified mark.
|
|

|
|
|
|
## Why yet another...?
|
|
+ vim-powerline is a nice plugin, but deprecated.
|
|
+ vim-airline is a nice plugin, but not configurable. Also, it does *too much* for other plugins, which should be done by users in .vimrc.
|
|
|
|
## Author
|
|
itchyny (https://github.com/itchyny)
|
|
|
|
## License
|
|
MIT License
|
|
|
|
## Installation
|
|
### Manually
|
|
1. Put all files under $VIM/.
|
|
|
|
### Vundle (https://github.com/gmarik/vundle)
|
|
1. Add the following configuration to your .vimrc.
|
|
|
|
Bundle 'itchyny/lightline.vim'
|
|
|
|
2. Install with `:BundleInstall`.
|
|
|
|
### NeoBundle (https://github.com/Shougo/neobundle.vim)
|
|
1. Add the following configuration to your .vimrc.
|
|
|
|
NeoBundle 'itchyny/lightline.vim'
|
|
|
|
2. Install with `:NeoBundleInstall`.
|
|
|
|
## Configuration tutorial
|
|
In default, the statusline looks like:
|
|

|
|
If you want a wombat colorscheme, add the folowing setting to your .vimrc (or \_vimrc in Windows):
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ }
|
|
```
|
|
to get:
|
|

|
|
|
|
If you have installed vim-fugitive, the branch status is automatically available:
|
|

|
|
but you find it annoying! So you add to your .vimrc:
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'readonly', 'filename', 'modified' ] ] }
|
|
\ }
|
|
```
|
|

|
|
OK. The branch section has been removed.
|
|
The `g:lightline.active.left` stands for the components which appears on the left hand side, for the active window.
|
|
|
|
You find the read-only mark is not cool:
|
|

|
|
So you add the component setting (the following setting is effective with the integrated font for vim-powerline):
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'readonly', 'filename', 'modified' ] ] },
|
|
\ 'component': {
|
|
\ 'readonly': '%{&readonly?"⭤":""}'
|
|
\ }
|
|
\ }
|
|
```
|
|

|
|
How nice!
|
|
|
|
But the boundaries are quadrilateral. You may miss the powerline.
|
|
You have installed a cool font for powerlines, so you can use it.
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'readonly', 'filename', 'modified' ] ] },
|
|
\ 'component': {
|
|
\ 'readonly': '%{&readonly?"⭤":""}'
|
|
\ },
|
|
\ 'separator': { 'left': '⮀', 'right': '⮂' },
|
|
\ 'subseparator': { 'left': '⮁', 'right': '⮃' }
|
|
\ }
|
|
```
|
|

|
|
Hurrah! Cool!
|
|
|
|
|
|
Now, you look into a help file to find the marks annoying.
|
|
Help files are read-only and no-modifiable? We know, of cource!
|
|

|
|
OK, so you again edit your .vimrc.
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'readonly', 'filename', 'modified' ] ] },
|
|
\ 'component': {
|
|
\ 'readonly': '%{&filetype!="help"&& &readonly?"⭤":""}',
|
|
\ 'modified': '%{&filetype=="help"?"":&modified?"+":&modifiable?"":"-"}'
|
|
\ },
|
|
\ 'separator': { 'left': '⮀', 'right': '⮂' },
|
|
\ 'subseparator': { 'left': '⮁', 'right': '⮃' }
|
|
\ }
|
|
```
|
|

|
|
Huh? Weird!
|
|
The component does not collapse even if it has no information!
|
|
In order to avoid this, you set expressions to component\_flag, which becomes 1 only when the corresponding components have information.
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'readonly', 'filename', 'modified' ] ] },
|
|
\ 'component': {
|
|
\ 'readonly': '%{&filetype!="help"&& &readonly?"⭤":""}',
|
|
\ 'modified': '%{&filetype=="help"?"":&modified?"+":&modifiable?"":"-"}'
|
|
\ },
|
|
\ 'component_flag': {
|
|
\ 'readonly': '(&filetype!="help"&& &readonly)',
|
|
\ 'modified': '(&filetype!="help"&&(&modified||!&modifiable))'
|
|
\ },
|
|
\ 'separator': { 'left': '⮀', 'right': '⮂' },
|
|
\ 'subseparator': { 'left': '⮁', 'right': '⮃' }
|
|
\ }
|
|
```
|
|

|
|
Okay. Works nice.
|
|
|
|
|
|
However, you may wonder we cannot gather these settings?
|
|
Or, if you want to do something more complicated?
|
|
|
|
|
|
In fact, the components can be created using functions.
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'readonly', 'filename', 'modified' ] ] },
|
|
\ 'component_func': {
|
|
\ 'readonly': 'MyReadonly',
|
|
\ 'modified': 'MyModified'
|
|
\ },
|
|
\ 'separator': { 'left': '⮀', 'right': '⮂' },
|
|
\ 'subseparator': { 'left': '⮁', 'right': '⮃' }
|
|
\ }
|
|
function! MyModified()
|
|
if &filetype == "help"
|
|
return ""
|
|
elseif &modified
|
|
return "+"
|
|
elseif &modifiable
|
|
return ""
|
|
else
|
|
return ""
|
|
endif
|
|
endfunction
|
|
function! MyReadonly()
|
|
if &filetype == "help"
|
|
return ""
|
|
elseif &readonly
|
|
return "⭤"
|
|
else
|
|
return ""
|
|
endif
|
|
endfunction
|
|
```
|
|

|
|
Fine and readable!
|
|
|
|
|
|
Finally, you come up with concatenating the three components:
|
|

|
|
Now you may know what to do.
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'colorscheme': 'wombat',
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'filename' ] ] },
|
|
\ 'component_func': {
|
|
\ 'filename': 'MyFilename',
|
|
\ 'readonly': 'MyReadonly',
|
|
\ 'modified': 'MyModified'
|
|
\ },
|
|
\ 'separator': { 'left': '⮀', 'right': '⮂' },
|
|
\ 'subseparator': { 'left': '⮁', 'right': '⮃' }
|
|
\ }
|
|
function! MyModified()
|
|
if &filetype == "help"
|
|
return ""
|
|
elseif &modified
|
|
return "+"
|
|
elseif &modifiable
|
|
return ""
|
|
else
|
|
return ""
|
|
endif
|
|
endfunction
|
|
function! MyReadonly()
|
|
if &filetype == "help"
|
|
return ""
|
|
elseif &readonly
|
|
return "⭤"
|
|
else
|
|
return ""
|
|
endif
|
|
endfunction
|
|
function! MyFilename()
|
|
return ('' != MyReadonly() ? MyReadonly() . ' ' : '') .
|
|
\ ('' != expand('%t') ? expand('%t') : '[No Name]') .
|
|
\ ('' != MyModified() ? ' ' . MyModified() : '')
|
|
endfunction
|
|
```
|
|
Define your own filename component. It has priority over the component lightline has.
|
|

|
|
Looks nice.
|
|
|
|
Of cource, you can name your component as you wish.
|
|
```vim
|
|
let g:lightline = {
|
|
\ 'active': {
|
|
\ 'left': [ [ 'mode', 'paste' ],
|
|
\ [ 'my_filename' ] ] },
|
|
\ 'component_func': {
|
|
\ 'my_filename': 'MyFilename', ...
|
|
```
|
|
|
|
This is the end of the tutorial. Good luck with your nice statusline.
|