Quickfix&预览窗口调整大小

时间:2012-12-04 16:09:10

标签: vim

通常,当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

,但我想知道是否有更好/更简单的解决方案 问题

3 个答案:

答案 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