首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使窗口拆分与当前大小保持一致,其他大小保持一致

如何使窗口拆分与当前大小保持一致,其他大小保持一致
EN

Stack Overflow用户
提问于 2020-04-16 05:24:24
回答 1查看 70关注 0票数 0

其想法是做一些类似于黄金比率 ( vim插件)所做的事情。但是,我不想将大小调整到“黄金比率”,而是要为未选定的窗口设置特定的大小。

例如:

代码语言:javascript
复制
# Window 1 selected
----------------------
|        |   |   |   |
|        |   |   |   |
|   1    | 2 | 3 | 4 |
|        |   |   |   |
|        |   |   |   |
----------------------

# Window 3 selected
----------------------
|   |   |        |   |
|   |   |        |   |
| 1 | 2 |    3   | 4 |
|   |   |        |   |
|   |   |        |   |
----------------------

以下是我到目前为止所写的(只是一个WIP):

代码语言:javascript
复制
function g:ResizeWindow()
  let tabs = gettabinfo()
  let current_tabnr = tabpagenr()
  let current_window = win_getid()

  let tab = filter(tabs, 'v:val.tabnr == current_tabnr')[0]

  for window in tab.windows
    if window != current_window
      call win_gotoid(window)
      exe 'vertical resize' 20
    endif
  endfor

  call win_gotoid(current_window)
  let current_window_size = &columns - ((len(tab.windows) - 1) * 20)
  exe 'vertical resize' current_window_size
endfunction

autocmd WinNew,WinEnter * :call g:ResizeWindow()

要进行测试,您可以打开一个缓冲区,并只需:vsp几次。然后,当您导航窗口时,它在大多数情况下似乎都能工作,但偶尔其中一个窗口会以一种不一致的方式崩溃。比其他的要小得多。这通常发生在我从左到右导航时.从右到左的后背。

对这件事有什么不好的地方,以及如何解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-16 22:10:06

超级有趣的功能!

下面是一个有用的版本:

代码语言:javascript
复制
function g:ResizeWindow()
  let tabs = gettabinfo()
  let current_tabnr = tabpagenr()
  let current_window = win_getid()

  let tab = filter(tabs, 'v:val.tabnr == current_tabnr')[0]

  let small_size = 5

  for window in tab.windows
    if window == current_window
      let size = &columns - ((len(tab.windows) - 1) * small_size) - (len(tab.windows) - 1)
    else
      let size = small_size
    endif
    noautocmd call win_gotoid(window)
    exe 'noautocmd vertical resize ' . size
  endfor

  call win_gotoid(current_window)
endfunction

set winwidth=1
set winminwidth=1
autocmd WinNew,WinEnter * :call g:ResizeWindow()

解释

我对您的初始WIP做了一些更改,下面是您的代码遇到的主要问题:

  • 函数被递归调用:函数win_gotoid的调用触发了autocmd。所以这搞砸了所有的尺寸
  • 默认的最小窗口大小(minwinwidth)和默认窗口大小(winwidth)正在影响应用的大小。
  • 您将当前窗口调整为最后一个大小,从而压缩了右边的窗口。
  • 主窗口大小计算没有考虑到窗口分隔符

免责声明

如果在一个窗口上有一个水平分割,此函数就会中断!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61243238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档