neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit ddda5e0a488bce19c86e04fa823069b755fac779
parent a0790558c3097f2813c56e404af30c3e2d8b8983
Author: itchyny <itchyny@cybozu.co.jp>
Date:   Tue, 20 Feb 2024 20:57:13 +0900

feat(help): hide filename of "gO" outline using conceal #27547

Help outlines, invoked by `gO`, displays the help section titles in the
location list window. This feature is implemented by setting the buffer
lines after opening the window, but this implementation breaks the
assumption that the quickfix window texts are consistently constructed
by the quickfix list items. I think we can use the conceal feature here.
Using conceal here improves interoperability between quickfix plugins,
and also simplifies the outline implementation.

Originally reported at https://github.com/itchyny/vim-qfedit/issues/12
Diffstat:
Mruntime/ftplugin/help.vim | 4++--
Mruntime/ftplugin/qf.vim | 23-----------------------
Mruntime/syntax/qf.vim | 6++++++
3 files changed, 8 insertions(+), 25 deletions(-)

diff --git a/runtime/ftplugin/help.vim b/runtime/ftplugin/help.vim @@ -71,7 +71,7 @@ if !exists('g:no_plugin_maps') if indent(lnum) <= indent(l) let level = has_section + has_sub_section - let add_text = matchstr(text, '\S.*') + let add_text = matchstr(text, '\S.\{-}\ze\s\=\~$') endif endif @@ -79,7 +79,7 @@ if !exists('g:no_plugin_maps') if !empty(add_text) && last_added != lnum let last_added = lnum call add(toc, {'bufnr': bufnr('%'), 'lnum': lnum, - \ 'text': repeat(' ', level) . add_text}) + \ 'text': repeat("\u00a0\u00a0", level) . add_text}) endif let lnum = nextnonblank(lnum + 1) endwhile diff --git a/runtime/ftplugin/qf.vim b/runtime/ftplugin/qf.vim @@ -16,26 +16,3 @@ if !get(g:, 'qf_disable_statusline') " Display the command that produced the list in the quickfix window: setlocal stl=%t%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}\ %=%-15(%l,%c%V%)\ %P endif - -function! s:setup_toc() abort - if get(w:, 'quickfix_title') !~# '\<TOC$' || &syntax != 'qf' - return - endif - - let list = getloclist(0) - if empty(list) - return - endif - - let bufnr = list[0].bufnr - setlocal modifiable - silent %delete _ - call setline(1, map(list, 'v:val.text')) - setlocal nomodifiable nomodified - let &syntax = getbufvar(bufnr, '&syntax') -endfunction - -augroup qf_toc - autocmd! - autocmd Syntax <buffer> call s:setup_toc() -augroup END diff --git a/runtime/syntax/qf.vim b/runtime/syntax/qf.vim @@ -15,6 +15,12 @@ syn match qfSeparator "|" nextgroup=qfLineNr contained syn match qfLineNr "[^|]*" contained contains=qfError syn match qfError "error" contained +" Hide file name and line number for help outline (TOC). +if has_key(w:, 'qf_toc') || get(w:, 'quickfix_title') =~# '\<TOC$' + setlocal conceallevel=3 concealcursor=nc + syn match Ignore "^[^|]*|[^|]*| " conceal +endif + " The default highlighting. hi def link qfFileName Directory hi def link qfLineNr LineNr