通常,当quickfix窗口打开时,它会更改屏幕布局,但Vim会恢复 当窗口关闭时。
但是有一种情况是布局恢复失败:什么时候
预览窗口打开,呈现垂直分割并执行:wincmd J
在quickfix中(或者使用: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
,但我想知道是否有更好/更简单的解决方案 问题
答案 0 :(得分:2)
如果您可以在普通Vim(vim -N -u NONE
)中重现问题,我会将其报告给vim_dev mailing list以将其修复到Vim中。当其他普通窗口可以支持时,预览窗口不应改变其大小。
如果这只是您设置的一个特点,我认为您实施的解决方法很好;我可能会沿着同样的路线解决它。
答案 1 :(得分:1)
我遇到了这个问题而且我已经尝试了你提出的qf.vim,但它没有用。我在qf帮助页面找到了一些确实的东西= |,所以把它放在你的.vimrc中:
au FileType qf botright cwindow
答案 2 :(得分:0)
我用你的答案改进了vim的默认自动调整大小行为。
这不是这个问题的真正答案,但希望其他人可能会觉得有用,因为我偶然发现了这个问题:
nmap <silent> <C-w>= :call ResizeAllWindows()<cr>
function! ResizeAllWindows()
call RestorePreviewWindowHeight()
wincmd = "set all equal after restore
endfunction
function! RestorePreviewWindowHeight()
silent! wincmd P "jump to preview, but don't show error
if &previewwindow
exec "resize" &previewheight
wincmd p "jump back
endif
endfunction