4

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

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

4

3 回答 3

2

如果您可以在普通的 Vim ( vim -N -u NONE) 中重现该问题,我会将其报告给vim_dev 邮件列表以在 Vim 中修复它。当其他普通窗口可以代替预览窗口时,预览窗口不应更改其大小。

如果这只是您设置的一个特点,我认为您实施的解决方法很好;我可能会按照同样的思路解决它。

于 2012-12-04T16:26:38.730 回答
1

我遇到了这个问题,我已经尝试过你提出的 qf.vim 但它没有用。我在 qf 帮助页面 =| 中找到了一些可行的方法,所以把它放在你的 .vimrc 中:

au FileType qf botright cwindow
于 2016-06-30T21:25:41.827 回答
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
于 2018-04-17T10:46:19.137 回答