All Projects → hoob3rt → Lualine.nvim

hoob3rt / Lualine.nvim

Licence: mit
A blazing fast and easy to configure neovim statusline written in pure lua.

Programming Languages

lua
6591 projects

Projects that are alternatives of or similar to Lualine.nvim

Lsp Status.nvim
Utility functions for getting diagnostic status and progress messages from LSP servers, for use in the Neovim statusline
Stars: ✭ 201 (+1.52%)
Mutual labels:  neovim, nvim, neovim-plugin, statusline
close-buffers.nvim
📑 Delete multiple vim buffers based on different conditions
Stars: ✭ 54 (-72.73%)
Mutual labels:  neovim, nvim, neovim-plugin
Acid.nvim
Asynchronous Clojure Interactive Development
Stars: ✭ 147 (-25.76%)
Mutual labels:  neovim, nvim, neovim-plugin
neogen
A better annotation generator. Supports multiple languages and annotation conventions.
Stars: ✭ 339 (+71.21%)
Mutual labels:  neovim, nvim, neovim-plugin
feline.nvim
A minimal, stylish and customizable statusline for Neovim written in Lua
Stars: ✭ 867 (+337.88%)
Mutual labels:  nvim, statusline, neovim-plugin
lir.nvim
Neovim file explorer
Stars: ✭ 194 (-2.02%)
Mutual labels:  neovim, nvim, neovim-plugin
agitator.nvim
No description or website provided.
Stars: ✭ 16 (-91.92%)
Mutual labels:  neovim, nvim, neovim-plugin
Comment.nvim
🧠 💪 // Smart and powerful comment plugin for neovim. Supports treesitter, dot repeat, left-right/up-down motions, hooks, and more
Stars: ✭ 796 (+302.02%)
Mutual labels:  neovim, nvim, neovim-plugin
Packer.nvim
A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
Stars: ✭ 418 (+111.11%)
Mutual labels:  neovim, nvim, neovim-plugin
Nvim Compe
Auto completion plugin for nvim that written in Lua.
Stars: ✭ 433 (+118.69%)
Mutual labels:  neovim, nvim, neovim-plugin
Chadtree
File manager for Neovim. Better than NERDTree.
Stars: ✭ 653 (+229.8%)
Mutual labels:  neovim, nvim, neovim-plugin
Nvim Hlslens
Hlsearch Lens for Neovim
Stars: ✭ 55 (-72.22%)
Mutual labels:  neovim, nvim, neovim-plugin
nvim-ghost.nvim
👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)
Stars: ✭ 32 (-83.84%)
Mutual labels:  neovim, nvim, neovim-plugin
Iron.nvim
Interactive Repl Over Neovim
Stars: ✭ 265 (+33.84%)
Mutual labels:  neovim, nvim, neovim-plugin
Semshi
🌈 Semantic Highlighting for Python in Neovim
Stars: ✭ 758 (+282.83%)
Mutual labels:  neovim, nvim, neovim-plugin
Nvim Bqf
Better quickfix window in Neovim, polish old quickfix window.
Stars: ✭ 120 (-39.39%)
Mutual labels:  neovim, nvim, neovim-plugin
Deoplete Clang
deoplete.nvim source for C/C++/Obj-C/Obj-C++ with clang-python3
Stars: ✭ 186 (-6.06%)
Mutual labels:  neovim, neovim-plugin
Nvcode
An IDE layer for Neovim with sane defaults. Completely free and community driven.
Stars: ✭ 6,714 (+3290.91%)
Mutual labels:  neovim, nvim
Twf
Standalone tree view file explorer, inspired by fzf.
Stars: ✭ 196 (-1.01%)
Mutual labels:  neovim, nvim
Targets.vim
Vim plugin that provides additional text objects
Stars: ✭ 2,114 (+967.68%)
Mutual labels:  neovim, neovim-plugin

lualine.nvim

code size license

A blazing fast and easy to configure neovim statusline written in pure lua.

lualine.nvim requires neovim 0.5

Contributing

Please read CONTRIBUTING.md before contributing.

You can check this out if you want to see what is currently being worked on.

Feel free to create an issue/pr if you want to see anything else implemented.

Screenshots

Here is a preview of how lualine can look like.

normal_cropped powerline_cropped diff_croped diagnostics_cropped replace

Screenshots of all available themes are listed in THEMES.md

Performance compared to other plugins

Unlike other statusline plugins lualine loads only defined components, nothing else.

Startup time performance measured with an amazing plugin tweekmonster/startuptime.vim

All times are measured with only startuptime.vim and given statusline plugin installed

clean vimrc lualine lightline airline
8.943 ms 9.034 ms 11.463 ms 13.425 ms

Installation

vim-plug

Plug 'hoob3rt/lualine.nvim'
" If you want to have icons in your statusline choose one of these
Plug 'kyazdani42/nvim-web-devicons'
Plug 'ryanoasis/vim-devicons'

packer.nvim

use {
  'hoob3rt/lualine.nvim',
  requires = {'kyazdani42/nvim-web-devicons', opt = true}
}

Usage and customization

Lualine can be configured with both lua and vimscript. Click here if you want to see a config example in lua and here if you want to see a config example in vimscript.

Lualine has sections as shown below.

+-------------------------------------------------+
| A | B | C                             X | Y | Z |
+-------------------------------------------------+

Each sections holds it's components e.g. current vim's mode. Colorscheme of sections is mirrored, meaning section A will have the same colorscheme as section Z etc.

Starting lualine

All configurations happens in the setup function

require('lualine').setup{}

Setting a theme

options = {theme = 'gruvbox'}

All available themes are listed in THEMES.md

Please create a pr if you managed to port a popular theme before me, here is how to do it.

Changing separators

Lualine defines two kinds of seperators. One is for sections and other is for components. Default section seperators are '', '' and component separators are '', ''. They require powerline patched fonts. But you can easily change yours to something else like below

options = {
  section_separators = {'', ''},
  component_separators = {'', ''}
}

or disable it

options = {section_separators = '', component_separators = ''}

Changing components in lualine sections

Lualine defaults
sections = {
  lualine_a = {'mode'},
  lualine_b = {'branch'},
  lualine_c = {'filename'},
  lualine_x = {'encoding', 'fileformat', 'filetype'},
  lualine_y = {'progress'},
  lualine_z = {'location'}
},
inactive_sections = {
  lualine_a = {},
  lualine_b = {},
  lualine_c = {'filename'},
  lualine_x = {'location'},
  lualine_y = {},
  lualine_z = {}
}
Available components
  • branch (git branch)
  • diagnostics (diagnostics count from your prefered source)
  • encoding (file encoding)
  • fileformat (file format)
  • filename
  • filetype
  • location (location in file in line:column format)
  • mode (vim mode)
  • progress (%progress in file)
  • diff (git diff status)
Using custom functions as lualine component

You can define a custom function as a lualine component

local function hello()
  return [[hello world]]
end
sections = {lualine_a = {'hello'}}
Using vim functions as lualine component

You can use vim functions as a lualine component

sections = {lualine_a = {'FugitiveHead'}}
Using variables as lualine component

You can use variables from vim and lua globals as a lualine component Variables from g:, v:, t:, w:, b:, o, go:, vo:, to:, wo:, bo: scopes can be used. Scopes ending with o are options usualy accessed with & in vimscript

sections = {lualine_a = {'g:coc_status', 'bo:filetype'}}
Options for components

Available options:

Global options

Global options chnge behaviour of all suported components. All of these options can also be specifically set to all supported components, full example below.

Available global options
Option Default Behaviour Supported components
icons_enabled true Displays icons on components You should have nerd-fonts supported fonts to see icons properly. branch, fileformat, filetype, location, diagnostics
padding 1 Adds padding to the left and right of components all
left_padding 1 Adds padding to the left of components all
right_padding 1 Adds padding to the right of components all
upper false Changes components to be uppercase all
lower false Changes components to be lowercase all
format nil Takes a function . The funtion gets the result of component as argument and it's return value is displayed. So this function can parse and format the output as user wants. all
Global options example
options = {icons_enabled = true}

Component specific options

As mentioned above, all global options can be applied to specific components. However there are some options which are component-only (you cannot set them as globals) Option | Default | Behaviour :------: | :------: | :----: icon | Differs for each component | Displays an icon in front of the component color | nil | Sets custom color for the component in this format
color = {fg = '#rrggbb', bg= '#rrggbb', gui='style'}
The fields of color table are optional and default to theme

In addition, some components have unique options.

  • diagnostics component options
Option Default Behaviour Format
sources nil displays diagnostic count from defined source array containing one or many string from set {'nvim_lsp', 'coc', 'ale'}
sections {'error', 'warn', 'info'} displays diagnostics of defined severity array containing one or many string from set {'error', 'warn', 'info'}
color_error DiffDelete foreground color changes diagnostic's error section foreground color color in #rrggbb format
color_warn DiffText foreground color changes diagnostic's warn section foreground color color in #rrggbb format
color_info Normal foreground color changes diagnostic's info section foreground color color in #rrggbb format
symbols {error = ' ', warn = ' ', info = ' '} or {error = 'E:', warn = 'W:', info = 'I:'} changes diagnostic's info section foreground color table containing one or more symbols for levels
  • filename component options
Option Default Behaviour
file_status true Displays file status (readonly status, modified status)
full_path false Displays relative path if set to true, absolute path if set to false
shorten true if full_path is true and shorten is false it shortens absolute path aaa/bbb/ccc/file to a/b/c/file
  • diff component options
Option Default Behaviour Format
colored true displays diff status in color if set to true
color_added DiffAdd foreground color changes diff's added section foreground color color in #rrggbb format
color_modified DiffChange foreground color changes diff's changed section foreground color color in #rrggbb format
color_removed DiffDelete foreground color changes diff's removed section foreground color color in #rrggbb format
symbols {added = '+', modified = '~', removed = '-'} changes diff's symbols table containing on or more symbols
Component options example
sections = {
  lualine_b = {
    {'branch', icon = '', upper = true, color = {fg = '#00aa22'}}, {
      'filename',
      full_name = true,
      shorten = true,
      format = function(name)
        -- Capitalize first charecter of filename to capital.
        local path, fname = name:match('(.*/)(.*)')
        if not path then
          path = '';
          fname = name
        end
        return path .. fname:sub(1, 1):upper() .. fname:sub(2, #fname)
      end
    }
  }
}
Using tabline as statusline (statusline on top) You can use lualine to display components in tabline. The sections, configurations and highlights are same as statusline.
tabline = {
  lualine_a = {},
  lualine_b = {'branch'},
  lualine_c = {'filename'},
  lualine_x = {},
  lualine_y = {},
  lualine_z = {}
}

This will show branch and filename component in top of neovim inside tabline .

You can also completely move your statuline to tabline by configuring lualine.tabline instead of lualine.sections & lualine.inactive_sections and setting them to empty

tabline = {
......
  },
sections = {},
inactive_sections = {},

Loading plugin extensions

Lualine extensions change statusline appearance for a window/buffer with a plugin loaded e.g. junegunn/fzf.vim

By default no plugin extension are loaded to improve performance. If you are using a plugin which is supported you can load it this way:

extensions = { 'fzf' }
Available extensions
  • fugitive
  • fzf
  • nerdtree

Lua config example

packer config
  use {
    'hoob3rt/lualine.nvim',
    requires = {'kyazdani42/nvim-web-devicons', opt = true},
    config = function()
      require('lualine').setup{
        options = {
          theme = 'gruvbox',
          section_separators = {'', ''},
          component_separators = {'', ''},
          icons_enabled = true,
        },
        sections = {
          lualine_a = { {'mode', upper = true} },
          lualine_b = { {'branch', icon = ''} },
          lualine_c = { {'filename', file_status = true} },
          lualine_x = { 'encoding', 'fileformat', 'filetype' },
          lualine_y = { 'progress' },
          lualine_z = { 'location'  },
        },
        inactive_sections = {
          lualine_a = {  },
          lualine_b = {  },
          lualine_c = { 'filename' },
          lualine_x = { 'location' },
          lualine_y = {  },
          lualine_z = {   }
        },
        extensions = { 'fzf' }
      }
    end
  }

Vimscript config example

vimrc config
let g:lualine = {
    \'options' : {
    \  'theme' : 'gruvbox',
    \  'section_separators' : ['', ''],
    \  'component_separators' : ['', ''],
    \  'icons_enabled' : v:true,
    \},
    \'sections' : {
    \  'lualine_a' : [ ['mode', {'upper': v:true,},], ],
    \  'lualine_b' : [ ['branch', {'icon': '',}, ], ],
    \  'lualine_c' : [ ['filename', {'file_status': v:true,},], ],
    \  'lualine_x' : [ 'encoding', 'fileformat', 'filetype' ],
    \  'lualine_y' : [ 'progress' ],
    \  'lualine_z' : [ 'location'  ],
    \},
    \'inactive_sections' : {
    \  'lualine_a' : [  ],
    \  'lualine_b' : [  ],
    \  'lualine_c' : [ 'filename' ],
    \  'lualine_x' : [ 'location' ],
    \  'lualine_y' : [  ],
    \  'lualine_z' : [  ],
    \},
    \'extensions' : [ 'fzf' ],
    \}
lua require("lualine").setup()
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].