From ca735648ba205fb55c84d61035d98619bc2bac6d Mon Sep 17 00:00:00 2001 From: Wang Shidong Date: Sat, 18 Jul 2020 23:25:37 +0800 Subject: [PATCH] Fix key binding q in quickfix windows (#3645) close #3450 --- autoload/SpaceVim/autocmds.vim | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/autoload/SpaceVim/autocmds.vim b/autoload/SpaceVim/autocmds.vim index 4a85a7006..dca4ad7ce 100644 --- a/autoload/SpaceVim/autocmds.vim +++ b/autoload/SpaceVim/autocmds.vim @@ -9,6 +9,7 @@ let s:SYS = SpaceVim#api#import('system') let s:JOB = SpaceVim#api#import('job') +let s:CMP = SpaceVim#api#import('vim#compatible') "autocmds @@ -16,7 +17,7 @@ function! SpaceVim#autocmds#init() abort augroup SpaceVim_core au! autocmd BufWinEnter quickfix nnoremap - \ q :cclose:lclose + \ q :call close_quickfix() autocmd BufEnter * if (winnr('$') == 1 && &buftype ==# 'quickfix' ) | \ bd| \ q | endif @@ -196,5 +197,31 @@ function! s:disable_welcome() abort augroup END endfunction +function! s:close_quickfix() abort + if winnr() == s:get_qf_winnr() + cclose + else + lclose + endif +endfunction + +" https://vi.stackexchange.com/questions/16585/how-to-differentiate-quickfix-window-buffers-and-location-list-buffers +if has('patch-7.4-2215') " && exists('*getwininfo') + function! s:get_qf_winnr() abort + let wins = filter(getwininfo(), 'v:val.quickfix && !v:val.loclist') + " assert(len(wins) <= 1) + return empty(wins) ? 0 : wins[0].winnr + endfunction +else + let s:k_msg_qflist = '[Quickfix List]' + function! s:get_qf_winnr() abort + let buffers = s:CMP.execute('ls!') + call filter(buffers, 'v:val =~ "\\V".s:k_msg_qflist') + " :cclose removes the buffer from the list (in my config only??) + " assert(len(buffers) <= 1) + return empty(buffers) ? 0 : eval(matchstr(buffers[0], '\v^\s*\zs\d+')) + endfunction +endif + " vim:set et sw=2: