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

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

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


评论

你想做什么? (XY问题)

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

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

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

@AaronShen看看窗口还原命令。

#1 楼

总结问题的评论:


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

-为什么不简单地使用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脚本,但是,谢谢,它运行良好!顺便说一句,我只添加了一个额外的检查,因为它仅在只有两个窗口时才起作用。

–沉亚龙
15年12月24日在23:24

#2 楼

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

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

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