快速修复和预览窗口调整大小

4
正常情况下,当快速修复窗口打开时,它会更改屏幕布局,但是当该窗口关闭时,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

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


1
不知道 wincmd P,这很有用。我真的很喜欢预览窗口的想法,但是不同的调整大小行为使其难以使用 - 我在 tmux 中工作并经常缩放窗格。使用 <C-w>= 可以解决普通窗口的问题,但不会影响特殊窗口。也许可以利用这个来改进!谢谢。 - JonnyRaa
3个回答

2
如果您能在普通的Vim(vim -N -u NONE)中复现问题,我建议将其报告给vim_dev邮件列表以便在Vim内修复该问题。预览窗口不应在其他正常窗口可以代替它时更改其大小。
如果这只是您设置的特殊情况,那么我认为您实现的解决方法是好的。我可能会采用相同的解决方案来解决它。

这个问题在普通的Vim上也会出现,所以我会报告它。谢谢! - mMontu

1

我遇到了这个问题,尝试了你提供的qf.vim但是没有起作用。在qf帮助页面中我找到了一个可行的方法,=|,所以将以下内容添加到你的.vimrc文件中:

au FileType qf botright cwindow

实际上,在问这个问题一年后,我在大多数情况下都切换到了 botright cw,但我没有想到在这里包含它 - 谢谢!我在使用解决方法时遇到了很少的问题,当使用 wincmd J 减少时,问题也随之消失。 - mMontu

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接