是否可以判断窗口是在底部还是顶部,左侧还是右侧?


13

我不知道是否有一些功能可以检查窗口的位置,我是说它当前位于底部还是顶部,左侧还是右侧?

__________________________
|           |            |
|           |            |
|  left     |   right    |
|           |            |
|           |            |
|___________|____________|

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |

你想做什么?(XY问题)
mMontu 2015年

我正在尝试编写一个函数,如果当前布局是水平的,则将窗口拆分旋转为垂直;当只有两个窗口时,则反之亦然。所以我需要知道什么是当前的拆分布局以及当前的窗口在哪里
Aaron Shen

3
为什么不简单使用ctrl-W_L?(或ctrl-W_R
Vitor 2015年

我希望它具有便捷的切换功能,它将自动检测当前布局并为我进行正确的旋转,而我需要在脑海中思考并选择正确的命令来使用。我要做的就是始终按相同的键映射。
沉亚伦(Aaron Shen)

@AaronShen看看窗口还原命令
muru

Answers:


4

总结问题的评论:

-我正在尝试编写一个函数,如果当前布局是水平的,则将窗口拆分旋转为垂直;当只有两个窗口时,则反之亦然。

-为什么不简单地使用ctrl-W_L?(或ctrl-W_R)

-我希望它具有便捷的切换功能,它将自动检测当前布局并为我做正确的旋转,而我需要在脑海中思考并选择正确的命令来使用。我要做的就是始终按相同的键映射。

对于仅包含两个窗口的布局,以下功能应起作用:

function! Rotate()
   " save the original position, jump to the first window
   let initial = winnr()
   exe 1 . "wincmd w"

   wincmd l
   if winnr() != 1
      " succeeded moving to the right window
      wincmd J " make it the bot window
   else
      " cannot move to the right, so we are at the top
      wincmd H " make it the left window
   endif

   " restore cursor to the initial window
   exe initial . "wincmd w"
endfunction

nnoremap <F3> :call Rotate()<CR>

很棒的功能,虽然我不知道所有的vim脚本,但是,谢谢,它运行完美!顺便说一句,我只添加了一个额外的检查,因为它仅在只有两个窗口时才起作用。
沉亚伦2015年

6

不幸的是,我认为没有任何方法可以对此进行检查。

可能有一种使自定义函数进行检查的方法:窗口编号始终从左上角的1​​到右下角的n编号。也许可以使用此与来自几何数据相结合winwidth()winheight()和的值&lines&columns以创建所需的地图吗?

注意,为了通用起见,这应该支持更复杂的布局。例如,如果左侧分成两部分,输出应该是什么?也许这就是该功能最初不存在的原因...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.