When I use fugitive to view a file on the git index, a two-way diff of the working copy with git index or try to resolve a merge conflict, I would like to have a status line which reminds me what buffer shows what.
Nice visualizations are given by Drew Neil:
These would be the index (bufspec //0), target (bufspec //2), merge (bufspec //3).
This is my solution:
let g:lightline = {
\ 'colorscheme': 'gruvbox',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ], [ 'filename', 'gitversion' ], [ 'tagbar' ] ]
\ },
\ 'inactive': {
\ 'left': [ [ 'filename', 'gitversion' ] ],
\ 'right': [ [ 'lineinfo' ], [ 'percent' ] ]
\ },
\ 'component': {
\ 'tagbar': '%{tagbar#currenttag("%s", "", "f")}',
\ },
\ 'component_function': {
\ 'modified': 'LightLineModified',
\ 'readonly': 'LightLineReadonly',
\ 'filename': 'LightLineFilename',
\ 'fileformat': 'LightLineFileformat',
\ 'filetype': 'LightLineFiletype',
\ 'fileencoding': 'LightLineFileencoding',
\ 'mode': 'LightLineMode',
\ 'gitversion': 'LightLineGitversion',
\ },
\ }
function! LightLineModified()
return &ft =~ 'help' ? '' : &modified ? '+' : &modifiable ? '' : '-'
endfunction
function! LightLineReadonly()
return &ft !~? 'help' && &readonly ? 'RO' : ''
endfunction
function! LightLineGitversion()
let fullname = expand('%')
let gitversion = ''
if fullname =~? 'fugitive://.*/\.git//0/.*'
let gitversion = 'git index'
elseif fullname =~? 'fugitive://.*/\.git//2/.*'
let gitversion = 'git target'
elseif fullname =~? 'fugitive://.*/\.git//3/.*'
let gitversion = 'git merge'
elseif &diff == 1
let gitversion = 'working copy'
endif
return gitversion
endfunction
function! LightLineFilename()
let fname = expand('%:t')
return fname == 'ControlP' ? g:lightline.ctrlp_item :
\ fname == '__Tagbar__' ? g:lightline.fname :
\ ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') .
\ ('' != fname ? fname : '[No Name]') .
\ ('' != LightLineModified() ? ' ' . LightLineModified() : '')
endfunction
function! LightLineFileformat()
return winwidth(0) > 90 ? &fileformat : ''
endfunction
function! LightLineFiletype()
return winwidth(0) > 80 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
endfunction
function! LightLineFileencoding()
return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : ''
endfunction
function! LightLineMode()
let fname = expand('%:t')
return fname == '__Tagbar__' ? 'Tagbar' :
\ fname == 'ControlP' ? 'CtrlP' :
\ winwidth(0) > 60 ? lightline#mode() : ''
endfunction

Current colorscheme (gruvbox) is a little bit too unobtrusive.
If someone else has a better solution or can give a recommendation to make it more visually pronounced, I am happy to hear about it. Also the names git index, git target, git merge, and working copy are my first try. Any improvements regarding them are also appreciated.
The configuration looks good. What do you want actually? You can change the colorscheme of lightline to change the visibility.
This is awesome, thank you! @itchyny would you consider adding this to the README example?
Most helpful comment
This is my solution:
Current colorscheme (gruvbox) is a little bit too unobtrusive.
If someone else has a better solution or can give a recommendation to make it more visually pronounced, I am happy to hear about it. Also the names
git index,git target,git merge, andworking copyare my first try. Any improvements regarding them are also appreciated.