2013-08-23 00:04:48 +09:00
2013-08-22 23:30:33 +09:00
2013-08-22 22:34:56 +09:00
2013-08-22 19:07:29 +09:00
2013-08-23 00:04:48 +09:00

lightline.vim

A light and configurable statusline for Vim

powerline theme (default)

lightline.vim - powerline - normal lightline.vim - powerline - insert lightline.vim - powerline - visual lightline.vim - powerline - replace

wombat (with the patched font)

lightline.vim - wombat - normal lightline.vim - wombat - insert lightline.vim - wombat - visual lightline.vim - wombat - replace

jellybeans (with the patched font)

lightline.vim - jellybeans - normal lightline.vim - jellybeans - insert lightline.vim - jellybeans - visual lightline.vim - jellybeans - replace

solarized theme (dark)

lightline.vim - solarized_dark - normal lightline.vim - solarized_dark - insert lightline.vim - solarized_dark - visual lightline.vim - solarized_dark - replace

solarized theme (light)

lightline.vim - solarized_light - normal lightline.vim - solarized_light - insert lightline.vim - solarized_light - visual lightline.vim - solarized_light - replace

landscape theme (with the patched font)

lightline.vim - landscape - normal lightline.vim - landscape - insert lightline.vim - landscape - visual lightline.vim - landscape - replace With branch name, read-only mark and modified mark. lightline.vim - landscape - fugitive

Why yet another clone for powerline?

  • vim-powerline is a nice plugin, but deprecated.
  • powerline is a nice plugin, but difficult to configure.
  • 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.

Spirit of this plugin

  • Minimalism. The core script is very small.
  • Configurability. You can create your own component and easily add to the statusline.
  • Orthogonality. Any plugin should not change the settings of another plugin. Such a plugin-crossing setting should be written 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: lightline.vim - tutorial If you want a wombat colorscheme, add the following setting to your .vimrc (or _vimrc on Windows):

  let g:lightline = {
        \ 'colorscheme': 'wombat',
        \ }

to get: lightline.vim - tutorial

If you have installed vim-fugitive, the branch status is automatically available: lightline.vim - tutorial but you find it annoying! Then you add to your .vimrc:

  let g:lightline = {
        \ 'colorscheme': 'wombat',
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ],
        \             [ 'readonly', 'filename', 'modified' ] ] }
        \ }

lightline.vim - tutorial OK. The branch section has been removed. The g:lightline.active.left stands for the components which appear on the left hand side, for the active window.

You think that the read-only mark is not so cool: lightline.vim - tutorial So you add the component setting (the following setting is effective with the patched font for vim-powerline):

  let g:lightline = {
        \ 'colorscheme': 'wombat',
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ],
        \             [ 'readonly', 'filename', 'modified' ] ] },
        \ 'component': {
        \   'readonly': '%{&readonly?"⭤":""}'
        \ }
        \ }

lightline.vim - tutorial 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.

  let g:lightline = {
        \ 'colorscheme': 'wombat',
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ],
        \             [ 'readonly', 'filename', 'modified' ] ] },
        \ 'component': {
        \   'readonly': '%{&readonly?"⭤":""}'
        \ },
        \ 'separator': { 'left': '⮀', 'right': '⮂' },
        \ 'subseparator': { 'left': '⮁', 'right': '⮃' }
        \ }

lightline.vim - tutorial 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 course! lightline.vim - tutorial OK, so you again edit your .vimrc.

  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': '⮃' }
        \ }

lightline.vim - tutorial 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.

  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': '⮃' }
        \ }

lightline.vim - tutorial 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.

  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

lightline.vim - tutorial Fine and readable!

Finally, you come up with concatenating the three components: the read-only mark, the filename and the modified mark. lightline.vim - tutorial Now you may know what to do.

  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. Your component has priority over the default component. lightline.vim - tutorial Looks nice.

Of course, you can name your component as you wish.

  let g:lightline = {
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ],
        \             [ 'my_filename' ] ] },
        \ 'component_func': {
        \   'my_filename': 'MyFilename', ...

This is the end of the tutorial. For more information, see :help lightline. Good luck with your nice statuslines.

My setting

Here's my setting. I use the patched font for vim-powerline.

  let g:lightline = {
        \ 'colorscheme': 'landscape',
        \ 'mode_map': { 'c': 'NORMAL' },
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ], [ 'fugitive', 'filename' ] ]
        \ },
        \ 'component_func': {
        \   'modified': 'MyModified',
        \   'readonly': 'MyReadonly',
        \   'fugitive': 'MyFugitive',
        \   'filename': 'MyFilename',
        \   'fileformat': 'MyFileformat',
        \   'filetype': 'MyFiletype',
        \   'fileencoding': 'MyFileencoding',
        \   'mode': 'MyMode',
        \ },
        \ 'separator': { 'left': '⮀', 'right': '⮂' },
        \ 'subseparator': { 'left': '⮁', 'right': '⮃' }
        \ }
  function! MyModified()
    return &ft =~ 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'
  endfunction
  function! MyReadonly()
    return &ft !~? 'help\|vimfiler\|gundo' && &ro ? '⭤' : ''
  endfunction
  function! MyFilename()
    return ('' != MyReadonly() ? MyReadonly() . ' ' : '') .
          \ (&ft == 'vimfiler' ? vimfiler#get_status_string() : 
          \  &ft == 'unite' ? unite#get_status_string() : 
          \  &ft == 'vimshell' ? substitute(b:vimshell.current_dir,expand('~'),'~','') : 
          \ '' != expand('%t') ? expand('%t') : '[No Name]') .
          \ ('' != MyModified() ? ' ' . MyModified() : '')
  endfunction
  function! MyFugitive()
    return &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head') && len(fugitive#head()) ? '⭠ '.fugitive#head() : ''
  endfunction
  function! MyFileformat()
    return winwidth('.') > 60 ? &fileformat : ''
  endfunction
  function! MyFiletype()
    return winwidth('.') > 60 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
  endfunction
  function! MyFileencoding()
    return winwidth('.') > 60 ? (strlen(&fenc) ? &fenc : &enc) : ''
  endfunction
  function! MyMode()
    return winwidth('.') > 60 ? lightline#mode() : ''
  endfunction
Description
A light and configurable statusline/tabline plugin for Vim
Readme MIT 1.3 MiB
Languages
Vim Script 100%