From 512456e425409ec58627bd839fbb85d449d8cbc1 Mon Sep 17 00:00:00 2001 From: wzy <32936898+Freed-Wu@users.noreply.github.com> Date: Thu, 12 Mar 2026 01:20:29 +0800 Subject: [PATCH] extensions: Add a nerdfont.vim extension (#2741) --- autoload/airline/extensions.vim | 5 ++ autoload/airline/extensions/nerdfont.vim | 46 +++++++++++++++++++ .../tabline/formatters/nerdfont.vim | 7 +++ doc/airline.txt | 12 +++++ 4 files changed, 70 insertions(+) create mode 100644 autoload/airline/extensions/nerdfont.vim create mode 100644 autoload/airline/extensions/tabline/formatters/nerdfont.vim diff --git a/autoload/airline/extensions.vim b/autoload/airline/extensions.vim index df0b807b..96a5a8b7 100644 --- a/autoload/airline/extensions.vim +++ b/autoload/airline/extensions.vim @@ -177,6 +177,11 @@ function! airline#extensions#load() call add(s:loaded_ext, 'netrw') endif + if get(g:, 'loaded_nerdfont', 0) && get(g:, 'airline#extensions#nerdfont#enabled', 1) + call airline#extensions#nerdfont#init(s:ext) + call add(s:loaded_ext, 'nerdfont') + endif + " fzf buffers are also terminal buffers, so this must be above term. if exists(':FZF') && get(g:, 'airline#extensions#fzf#enabled', 1) call airline#extensions#fzf#init(s:ext) diff --git a/autoload/airline/extensions/nerdfont.vim b/autoload/airline/extensions/nerdfont.vim new file mode 100644 index 00000000..98b9104f --- /dev/null +++ b/autoload/airline/extensions/nerdfont.vim @@ -0,0 +1,46 @@ +" MIT License. Copyright (c) 2026-2026 Wu Zhenyu et al +" Plugin: https://github.com/lambdalisue/nerdfont.vim +" vim: et ts=2 sts=2 sw=2 + +scriptencoding utf-8 + +if !get(g:, 'loaded_nerdfont', 0) + finish +endif + +function! airline#extensions#nerdfont#fileformat() abort + if &fileformat ==# 'dos' + return nerdfont#platform#find('windows') + endif + if &fileformat ==# 'mac' + return nerdfont#platform#find('macos') + endif + if &fileformat ==# 'unix' + if has('unix') + return nerdfont#platform#find() + else + return nerdfont#platform#find('linux') + endif + endif +endfunction + +function! airline#extensions#nerdfont#ffenc() abort + let expected = get(g:, 'airline#parts#ffenc#skip_expected_string', '') + let bomb = &bomb ? '[BOM]' : '' + let noeolf = &eol ? '' : '[!EOL]' + let ff = strlen(&ff) ? '['.&ff.']' : '' + if expected is# &fenc.bomb.noeolf.ff + return '' + else + return &fenc.bomb.noeolf.' '.airline#extensions#nerdfont#fileformat() + endif +endfunction + +function! airline#extensions#nerdfont#init(ext) abort + call airline#parts#define_function('ffenc', 'airline#extensions#nerdfont#ffenc') + call a:ext.add_statusline_func('airline#extensions#nerdfont#apply') +endfunction + +function! airline#extensions#nerdfont#apply(...) abort + call airline#extensions#append_to_section('x', ' %{nerdfont#find()}') +endfunction diff --git a/autoload/airline/extensions/tabline/formatters/nerdfont.vim b/autoload/airline/extensions/tabline/formatters/nerdfont.vim new file mode 100644 index 00000000..375d67a9 --- /dev/null +++ b/autoload/airline/extensions/tabline/formatters/nerdfont.vim @@ -0,0 +1,7 @@ +let g:airline#extensions#tabline#formatters#nerdfont#formatter = get(g:, 'airline#extensions#tabline#formatters#nerdfont#formatter', 'default') + +function! airline#extensions#tabline#formatters#nerdfont#format(bufnr, buffers) abort + " Call original formatter. + let originalFormatter = airline#extensions#tabline#formatters#{g:airline#extensions#tabline#formatters#nerdfont#formatter}#format(a:bufnr, a:buffers) + return originalFormatter . printf(' %s', nerdfont#find(bufname(a:bufnr))) +endfunction diff --git a/doc/airline.txt b/doc/airline.txt index e9c3f416..73fa008a 100644 --- a/doc/airline.txt +++ b/doc/airline.txt @@ -955,6 +955,18 @@ neomake * neomake warning > let g:airline#extensions#neomake#warning_symbol = 'W:' < +------------------------------------- *airline-nerdfont* +NerdFont + +* enable/disable nerdfont integration > + let g:airline#extensions#nerdfont#enabled = 1 +< default: 1 + +* nerdfont's tabline formatter > + let g:airline#extensions#tabline#formatter = 'nerdfont' + let g:airline#extensions#tabline#formatters#nerdfont#formatter = 'default' +< default: 'default' + ------------------------------------- *airline-nerdtree* NerdTree