__________________________
| | |
| | |
| left | right |
| | |
| | |
|___________|____________|
__________________________
| |
| top |
|________________________|
| |
| bottom |
|_______________________ |
#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
的值结合使用,以创建所需的地图?请注意,通常,这应该支持更复杂的布局。例如,如果左侧分成两部分,输出应该是什么?也许这就是为什么该功能最初不存在的原因...
评论
你想做什么? (XY问题)我正在尝试编写一个函数来将窗口拆分旋转为垂直(如果当前布局是水平的,反之亦然),只有两个窗口时。所以我需要知道什么是当前的拆分布局以及当前的窗口在哪里
为什么不简单地使用ctrl-W_L? (或ctrl-W_R)
我希望它具有便捷的切换功能,它将自动检测当前布局并为我进行正确的旋转,而我需要在脑海中思考并选择正确的命令来使用。我要做的就是始终按相同的键映射。
@AaronShen看看窗口还原命令。