通常、quickfix ウィンドウを開くと画面レイアウトが変更されますが、Vim はそのウィンドウを閉じると元に戻します。
しかし、レイアウトの復元が失敗する状況があります: プレビュー ウィンドウが開いているときに、垂直分割が存在し:wincmd J
、クイックフィックスで実行されます (または で開かれ:botright copen
ます)。この場合、プレビュー ウィンドウのサイズが変更されます。
~/.vim/ftplugin/qf.vim に置いた解決策がありました。
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
" expand quickfix when there are vertical splits
wincmd J
func! RestorePreviewWindow()
let l:quickfixHeight = winheight(0)
wincmd p " include previous window on jump list
silent! wincmd P " jump to preview window
if &previewwindow " if we really get there...
exe "resize " . (&previewheight - l:quickfixHeight - 1)
wincmd p " back to old window
endif
endfunc
augroup quickfixClosing
au!
au BufDelete <buffer> call RestorePreviewWindow()
augroup END
、しかし、この問題に対するより良い/より簡単な解決策があるかどうか疑問に思っていました.