# vim-airline: a statusline built out of named sections instead of format strings

> The Vim statusline plugin that models the line as a set of labelled sections, integrates with dozens of other plugins, and moved its themes into a separate repository.

**vim-airline/vim-airline** — lean & mean status/tabline for vim that's light as air

- Repository: https://github.com/vim-airline/vim-airline
- Stars: 17,970 · Forks: 1,101
- Language: Vim Script
- License: MIT
- Published: 2026-10-08 · Updated: 2026-10-08 · Language: en
- Canonical page: https://hysenlabs.com/projects/vim-airline-vim-airline

## Why the statusline is split into lettered sections

Vim's own statusline is a single option string with a pile of `%`-escapes, and the documented way to customize it is to concatenate escapes in a `'statusline'` assignment until nobody remembers why any of them are there. vim-airline takes the opposite approach. The README opens with an ASCII diagram where the bottom line is divided into labelled parts, and then a table gives each one a meaning and an example.

Section A is the mode plus extra flags such as crypt, spell and paste, shown as `INSERT`. Section B is environment state, which is where VCS information goes: a branch name, a hunk summary, and a battery reading. Section C carries the filename and the read-only flag, rendered as `~/.vim/vimrc RO`. Section X is the filetype, section Y combines encoding and file format as `utf-8[unix]`, and section Z is the position in the file. Anything beyond those six comes from other plugins, which is why the table ends in an ellipsis rather than a fixed list.

The payoff is that each part is independently addressable and conditionally colored. A part can be colored by mode or by whether the buffer is modified, and sections and parts inside sections can be configured to hide themselves when the window gets narrow. That is a real answer to the usual complaint about long statuslines, which is that the interesting parts scroll off the right edge exactly when the window is small.

## What the position section actually tells you

The one line worth reading closely is the breakdown of section Z, because it explains a format that a lot of people copy without understanding. The README shows a compact string made of four chunks and then spells out what each means: a percentage of the way down through the file, the current line number, the total line count, and the current column.

Read as a proportion of the buffer rather than a byte offset, that is genuinely more useful than Vim's default, which gives you a percentage and a line number and leaves you to infer the rest. Once you know the convention, `10%` and `10/100` tell you two different things about the same position: how far through the file you are, and how far through the current line you are. If you are navigating a long generated file, the line count is often the more actionable of the two.

This is also the section most people end up customizing, since it is the only default section with a layout you might want to change. The README points at the wiki and the `doc/` directory in the tree for the full set of configuration variables rather than enumerating them on the front page.

## Installing through whichever plugin manager you already run

The plugin follows the standard Vim runtime path structure, so the README's installation table covers essentially every manager people still use, plus the two options that need no manager at all.

For a manager that resolves from Git URLs, the declaration is the same shape across Vundle, Plug and neo-bundle:

```vim
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
```

VAM and dein take a function call each, `vam#ActivateAddons([ 'vim-airline' ])` and `dein#add('vim-airline/vim-airline')`, and minpac takes `minpac#add('vim-airline/vim-airline')`. The manager-free path is a plain clone into the runtime directory, followed by regenerating help tags:

```bash
git clone https://github.com/vim-airline/vim-airline ~/.vim/bundle/vim-airline
```

Vim's own package system works too, cloning into `~/.vim/pack/dist/start/vim-airline` and then running `:helptags ~/.vim/pack/dist/start/vim-airline/doc`. Both manual routes carry the same instruction about help tags, which matters more than it looks: without help tags, `:help airline` will not resolve, and the configuration reference lives in that help file rather than on the README page.

## The themes bullet and the themes section disagree

One inconsistency in the README is worth pausing on, because it is the kind of thing that sends a new user looking for files that are not in the repository. The feature list advertises an extensive suite of themes for popular colorschemes, naming solarized in dark and light, tomorrow in all variants, base16 in all variants, molokai and jellybeans. The very next line says these are now external to the plugin and points to a themes repository, and a dedicated Themes section further down repeats the move and says it happened as of a specific commit.

Both statements are current in their own way. The themes do exist and they do cover those colorschemes, but they are not in the vim-airline tree. What you find in the tree is `autoload/`, `plugin/`, `doc/` and `test/` alongside the usual repository files, which is the layout of the core plugin with no colorscheme definitions in it at all. So the feature bullet describes a capability of the project, while the Themes section describes the mechanics of getting it, and the wording of the first one invites the wrong conclusion.

The practical advice is short: install vim-airline-themes as a separate plugin, exactly as you installed the core. If you are following a tutorial written before the split, or copying a colorscheme configuration from an older answer, expect to reference theme files that no longer exist in the plugin you cloned. The wiki carries the per-theme configuration once the themes are installed.

## Integration lists spanning three generations of Vim plugins

The compatibility claim is the core of the project, and the lists tell you more about Vim's plugin history than any single feature would. The README's feature list names vim-bufferline, fugitive, flog, unite, ctrlp, minibufexpl, gundo, undotree, nerdtree, tagbar, vim-gitgutter, vim-signify, quickfixsigns, syntastic, eclim, lawrencium, virtualenv, tmuxline, taboo.vim, denite and others. Several of those belong to the fuzzy-finder and buffer-explorer era of Vim plugins, and some have since been folded into Neovim itself.

The v0.12 release notes show the opposite direction. That release, published on 2026-05-02, is almost entirely new extension support, and the entries are current-generation: nvim-lspconfig, nvim-lsp, vim9lsp.vim, OmniSharp, fzf.vim, fern.vim, Vim-CMake, gen_tags.vim, Vaffle, zoomwintab, vim-dirvish, poetv, vim-lsp, searchcount, and vim-rufu for rufo formatting. That is a plugin keeping pace with the LSP tooling that arrived after Vim 8, and it means the plugin is not merely maintaining a legacy compatibility list.

Two details from the release notes are easy to miss. Support for searchcount hooks into a built-in Vim function rather than a plugin, which is the kind of integration that costs nothing and shows up as a live match counter. And nvim-lspconfig and nvim-lsp both being listed means the same statusline code path serves Vim and Neovim users, which matters given the second-line limitation below.

## Automatic truncation and the tabline, with one Vim-only caveat

Two features are worth calling out because they change behavior rather than appearance. The first is automatic truncation: sections and the parts inside them can be configured to hide themselves as the window narrows, so the file path and the position readout degrade gracefully instead of pushing the mode indicator off screen. The second is the smarter tabline, which shows all buffers when only one tab is open, so a single tab stops hiding the buffer list you are actually working through.

The smarter tabline is off by default and needs one line in your vimrc:

```vim
let g:airline#extensions#tabline#enabled = 1
```

Separators for the tabline are configured independently of the statusline, which is how you get flat, undifferentiated tabs on the top line and chevron-separated ones at the bottom.

The caveat is in the section table itself, where the note about extra plugin sections says they can be shown on a second line optionally, Vim only. So the stacked statusline, the configuration most people want once they have seen it, does not apply to Neovim. The README also states a minimum of Vim 7.2 while the default branch is `master` and the release notes are full of Neovim-aware integrations, which is a reasonable combination but means the plugin supports a very wide version range rather than assuming a modern Vim.

The last thing the README settles is the maintenance posture. The `master` branch is described as the most stable one, with new features merged only after a full regression test, and the tree includes a `test/` directory backing that claim. The last push was on 2026-09-09, which is well past v0.12 from May, so `master` is roughly five months of work ahead of the newest tag. If you want the extension additions, install from `master`; if you want the last tagged release, take v0.12 and expect the 2019 vintage of v0.11 as the alternative.

## Conclusion

vim-airline is at its best when your statusline has outgrown a single statusline string that nobody wants to edit, and at its worst when you want a theme that ships with the plugin, because the theme set lives in vim-airline-themes now and the README still reads as though both are one thing. Install the plugin, read the section table in the README to decide which of the default sections you actually want, and turn on extensions one at a time rather than accepting the whole list. The second line of the statusline is the feature most likely to change how you use the editor, and it is Vim only, which is worth knowing before you design a config around it.

## FAQ

### Does vim-airline work in Neovim?

Yes, and the v0.12 release notes list both nvim-lsp and nvim-lspconfig as supported integrations, so the statusline code path is exercised by Neovim users. The limitation is the optional second statusline, which the README marks as Vim only. Single-line statuslines, sections, extensions and the tabline work in Neovim.

### Where did the vim-airline themes go?

They moved out into the separate vim-airline/vim-airline-themes repository, which you install as its own plugin alongside vim-airline. The core tree no longer contains colorscheme definitions, so if a configuration references a theme file that does not exist, it predates the split.

### How do I turn on the buffer list in the tabline?

Set `let g:airline#extensions#tabline#enabled = 1` in your vimrc. The feature shows all buffers when only one tab is open, and it is disabled by default. Tabline separators are configured separately from statusline separators if you want the two lines to look different.

### How often is vim-airline released?

Rarely. The release list shows v0.10 in December 2018, v0.11 in November 2019 and v0.12 in May 2026, so the gaps range from months to years. The README explains why: new work lands on `master` after a full regression test and waits there, so the branch is a more current target than the newest tag.

## Sources

- [Issues](https://github.com/vim-airline/vim-airline/issues)
- [License: MIT](https://github.com/vim-airline/vim-airline/blob/master/LICENSE)
- [README](https://github.com/vim-airline/vim-airline/blob/master/README.md)
- [Releases](https://github.com/vim-airline/vim-airline/releases)
- [vim-airline/vim-airline on GitHub](https://github.com/vim-airline/vim-airline)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/vim-airline-vim-airline
