Home

Awesome

mistfly statusline

mistfly statusline is a simple, fast and informative statusline for Vim.

:point_right: Neovim users should use the pure-Lua linefly plugin instead of mistfly.

mistfly provides a number of useful builtin components:

mistfly also provides optional tabline support when the appropriate setting is enabled; refer to mistflyTabLine.

mistfly will adapt it's colors to the colorscheme currently in effect. Colors can also be customized if desired.

Lastly, mistfly is a lean statusline plugin clocking in at about 500 lines of code. For comparison, the lightline, airline and lualine statusline plugins contain over 3,600, 7,300 and 8,200 lines of code respectively. In fairness, the latter plugins are more featureful, configurable and visually pleasing.

:warning: mistfly has a predominantly fixed layout, this will not be an appropriate statusline plugin if layout flexibility is desired.

Screenshots

normal insert visual command replace

The above screenshots are using the nightfly colorscheme and the Iosevka font with Git changes, diagnostics and indent-status enabled.

Statusline Startup Comparison

A startup comparison of mistfly against various popular statusline plugins, with their out-of-the-box defaults, on a clean and minimal Vim setup with the moonfly colorscheme. The Vim startup times in the following table are provived by the dstein64/vim-startuptime plugin.

Startup times are the average of five consecutive runs. Note, stock is run without any statusline plugin.

stockmistflylightlineairlinelualine
18.0ms18.7ms22.0ms76.0ms23.2ms

Startup times as of March 2024 on my system; performance on other systems will vary.

Plugins, Linters and Diagnostics supported

:zap: Requirements

mistfly requires Vim 8 (or later), Neovim is not supported. The pure-Lua linefly plugin should instead be used with Neovim.

Please also make sure that the laststatus option is set to either: 1, 2 or 3.

Installation

Install bluz71/vim-mistfly-statusline with your preferred plugin manager.

vim-plug:

Plug 'bluz71/vim-mistfly-statusline'

lazy.nvim:

{ 'bluz71/vim-mistfly-statusline' },

Please do not lazy-load mistfly.

Layout And Default Colors

The mistfly-statusline layout consists of three groupings, the left-side, middle and right-side as follows:

+-------------------------------------------------+
| A | B | C | D          M          W | X | Y | Z |
+-------------------------------------------------+
SectionPurpose
A*Mode status (normal, insert, visual, command and replace modes)
BFilename (refer below for details)
C*Git branch name (if applicable)
D*Plugins notification (git, diagnostic and session status)
WOptional search count and spell status
XCurrent position
Y*Total lines and current location as percentage
ZOptional indent status (spaces and tabs shift width)

Sections marked with a * are linked to a highlight group and are colored, refer to the next section for details.

Sections C, D & W will not be displayed when the statusline width is less than 80 columns.

Note, filenames will be displayed as follows:

Highlight Groups And Colors

Sections marked with * in the previous section are linked to the following custom highlight groups with their associated fallbacks if the current colorscheme does not support mistfly.

SegmentCustom Highlight GroupSynthesized Highlight Fallback
Normal ModeMistflyNormalDirectory
Insert ModeMistflyInsertString
Visual ModeMistflyVisualStatement
Command ModeMistflyCommandWarningMsg
Replace ModeMistflyReplaceError

Note, the following colorschemes support mistfly, either within the colorscheme (moonfly & nightfly) or within this plugin (all others):

Lastly, if the fallback colors do not suit then it is very easy to override with your own highlights.

:gift: Here is a simple example of customized mistfly colors. Save the following at the end of your initialization file after setting your colorscheme.

highlight! link MistflyNormal DiffChange
highlight! link MistflyInsert WildMenu
highlight! link MistflyVisual IncSearch
highlight! link MistflyCommand WildMenu
highlight! link MistflyReplace ErrorMsg

:wrench: Options

OptionDefault State
mistflySeparatorSymbol
mistflyProgressSymbol
mistflyActiveTabSymbol
mistflyGitBranchSymbol
mistflyErrorSymbolE
mistflyWarningSymbolW
mistflyInformationSymbolI
mistflyEllipsisSymbol
mistflyTabLineDisabled
mistflyWithFileIconEnabled
mistflyWithGitBranchEnabled
mistflyWithGitStatusEnabled
mistflyWithDiagnosticStatusEnabled
mistflyWithSessionStatusEnabled
mistflyWithSearchCountDisabled
mistflyWithSpellStatusDisabled
mistflyWithIndentStatusDisabled

mistflySeparatorSymbol

The mistflySeparatorSymbol option specifies which character symbol to use for segment separators in the statusline.

By default, the character (Unicode U+23AA) will be displayed.

To specify your own separator symbol please add the following to your initialization file:

" Vimscript initialization file
let g:mistflySeparatorSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'
-- Lua initialization file
vim.g.mistflySeparatorSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'

mistflyProgressSymbol

The mistflyProgressSymbol option specifies which character symbol to use to indicate location-as-percentage in the statusline.

By default, the character (Unicode U+2193) will be displayed.

To specify your own progress symbol, or no symbol at all, please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyProgressSymbol = '<<SYMBOL-OF-YOUR-CHOOSING-OR-EMPTY>>'
-- Lua initialization file
vim.g.mistflyProgressSymbol = '<<SYMBOL-OF-YOUR-CHOOSING-OR-EMPTY>>'

mistflyActiveTabSymbol

The mistflyActiveTabSymbol option specifies which character symbol to use to signify the active tab in the tabline.

By default, the character (Unicode U+25AA) will be displayed.

To specify your own active tab symbol please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyActiveTabSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'
-- Lua initialization file
vim.g.mistflyActiveTabSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'

mistflyGitBranchSymbol

The mistflyGitBranchSymbol option specifies which character symbol to use when displaying Git branch details.

By default, the character (Powerline U+E0A0) will be displayed. Many modern monospace fonts will contain that character.

To specify your own Git branch symbol, or no symbol at all, please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyGitBranchSymbol = '<<SYMBOL-OF-YOUR-CHOOSING-OR-EMPTY>>'
-- Lua initialization file
vim.g.mistflyGitBranchSymbol = '<<SYMBOL-OF-YOUR-CHOOSING-OR-EMPTY>>'

mistflyErrorSymbol

The mistflyErrorSymbol option specifies which character symbol to use when displaying diagnostic errors.

By default, the E character will be displayed.

To specify your own error symbol please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyErrorSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'
-- Lua initialization file
vim.g.mistflyErrorSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'

mistflyWarningSymbol

The mistflyWarningSymbol option specifies which character symbol to use when displaying diagnostic warnings.

By default, the W character will be displayed.

To specify your own warning symbol please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWarningSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'
-- Lua initialization file
vim.g.mistflyWarningSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'

mistflyInformationSymbol

The mistflyInformationSymbol option specifies which character symbol to use when displaying diagnostic information.

By default, the I character will be displayed.

To specify your own information symbol please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyInformationSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'
-- Lua initialization file
vim.g.mistflyInformationSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'

ellipsis_symbol

The ellipsis_symbol option specifies which character symbol to use when indicating truncation, for example, deeply nested path truncation.

By default, the character will be displayed.

To specify your own ellipsis symbol please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyEllipsisSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'
-- Lua initialization file
vim.g.mistflyEllipsisSymbol = '<<SYMBOL-OF-YOUR-CHOOSING>>'

mistflyTabLine

The mistflyTabLine option specifies whether to let this plugin manage the tabline in addition to the statusline.

By default, tabline management will not be undertaken.

If enabled, mistfly will render a simple numbered, and clickable, window-space layout in the tabline; note, no buffers will be displayed in the tabline since there are many plugins that already provide that capability.

To enable tabline support please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyTabLine = v:true
-- Lua initialization file
vim.g.mistflyTabLine = true

:bulb: Mappings, such as the following, may be useful to quickly switch between the numbered window-spaces:

nnoremap <Leader>1 1gt
nnoremap <Leader>2 2gt
nnoremap <Leader>3 3gt
nnoremap <Leader>4 4gt
nnoremap <Leader>5 5gt
nnoremap <Leader>6 6gt
nnoremap <Leader>7 7gt
nnoremap <Leader>8 8gt
nnoremap <Leader>9 9gt

A screenshot of the tabline:

tabline


mistflyWithFileIcon

The mistflyWithFileIcon option specifies whether a filetype icon, from a Nerd Font, will be displayed prior to the filename in the statusline.

Note, a Nerd Font must be active and the vim-devicons or nvim-web-devicons plugin must also be installed and active.

By default, a filetype icon will be displayed if possible.

To disable the display of a filetype icon please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithFileIcon = v:false
-- lua initialization file
vim.g.mistflyWithFileIcon = false

mistflyWithGitBranch

The mistflyWithGitBranch option specifies whether to display Git branch details in the statusline.

By default, Git branches will be displayed in the statusline.

To disable the display of Git branches in the statusline please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithGitBranch = v:false
-- Lua initialization file
vim.g.mistflyWithGitBranch = false

mistflyWithGitStatus

The mistflyWithGitStatus option specifies whether to display the Git status of the current buffer in the statusline.

The Gitsigns, GitGutter and Signify plugins are supported.

By default, the Git status will be displayed if one of the above plugins is loaded.

To disable the display of Git status in the statusline please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithGitStatus = v:false
-- Lua initialization file
vim.g.mistflyWithGitStatus = false

mistflyWithDiagnosticStatus

The mistflyWithDiagnosticStatus option specifies whether to indicate the presence of the diagnostics in the current buffer.

ALE and Coc are supported.

By default, diagnostics will be displayed if one of the above plugins is loaded.

If diagnostic display is not wanted then please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithDiagnosticStatus = v:false
-- Lua initialization file
vim.g.mistflyWithDiagnosticStatus = false

mistflyWithSessionStatus

The mistflyWithSessionStatus option specifies whether to display Obsession session details in the statusline.

By default, session details will be displayed if the plugin is loaded.

To disable the display of session details in the statusline please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithSessionStatus = v:false
-- Lua initialization file
vim.g.mistflyWithSessionStatus = false

mistflyWithSearchCount

The mistflyWithSearchCount option specifies whether to display the search count in the statusline.

By default, search count will not be displayed.

To enable the display of the search count in the statusline please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithSearchCount = v:true
-- Lua initialization file
vim.g.mistflyWithSearchCount = true

Note, the search count is only displayed when the hlsearch option is set and the search count result is not zero.


mistflyWithSpellStatus

The mistflyWithSpellStatus option specifies whether to display the spell status in the statusline.

By default, spell status will not be displayed.

To enable spell status in the statusline please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithSpellStatus = v:true
-- Lua initialization file
vim.g.mistflyWithSpellStatus = true

mistflyWithIndentStatus

The mistflyWithIndentStatus option specifies whether to display the indentation status as the last component in the statusline.

By default, indentation status will not be displayed.

Note, if the expandtab option is set, for the current buffer, then tab stop will be displayed, for example Tab:4 (tab equals four spaces); if on the other hand noexpandtab option is set then shift width will be displayed instead, for example Spc:2 ('spc' short for 'space').

To enable indentation status please add the following to your initialization file:

" Vimscript initialization file
let g:mistflyWithIndentStatus = v:true
-- Lua initialization file
vim.g.mistflyWithIndentStatus = true

Sponsor

Ko-fi

License

License: MIT