我在.vimrc中有一​​些简单的映射可以轻松地调整拆分窗口的大小:必须按下并释放Leader + UP 10次。

如何在按下键的同时重复此映射?我想要的是,当我按Leader + UP时,映射将被应用一次,然后在短时间后将再次被应用,依此类推,同时按住键。

注意:我知道这是可以在<C-w>+前面加上一个计数,我可以在映射中对其进行硬编码,也可以在使用映射之前简单地输入一个计数,但这不是我想要的方式。

注2:我也知道很流行映射到调整大小的窗口是使用+和-键,它们易于按几次,但我不想使用这些键也不能这样做。

#1 楼

您可以尝试输入... Vim子模式!对于您的情况,是这样的:

call submode#enter_with('grow/shrink', 'n', '', '<leader><up>', '<C-w>+')
call submode#enter_with('grow/shrink', 'n', '', '<leader><down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<up>', '<C-w>+')


这意味着,您使用Leader-UpLeader-Down(也会增加/缩小窗口一次)进入子模式,然后-您只需按UpDown即可增大/缩小窗口,直到退出子模式。

有关超时问题,另请参阅帮助,但要禁用它,请按以下步骤操作:

"disable submode timeouts:
let g:submode_timeout = 0


...这意味着您将无限期停留在该子模式下,直到您按UpDown以外的其他键,或者直到您按下Esc为止。

Aaand,下一个有用的技巧是我的建议:

" don't consume submode-leaving key
let g:submode_keep_leaving_key = 1


...,使您可以在按其他键时直接移至下一个命令。例如,按:将同时退出子模式并打开命令行。

评论


我尝试了您的解决方案,但它似乎不起作用:当我按下 Leader + UP 时,我收到消息--submode:grow / shrink-并且窗口是调整了一行的大小,但命令没有重复。我尝试将g:submode_keep_leaving_key和g:submode_timeout的4个组合设置为0或1。我不确定是否做错了什么。我通常在终端中使用vim,但现在我只能在Windows上使用gVim进行测试,但我不确定它是否会有所改变。

–statox♦
15年6月18日在13:13

该命令不会自动重复,您仍然需要根据需要多次按“ Up”(向上)或“ Down”(向下)键(但不必先按Leader键)

– VanLaser
15年6月18日在13:16



哦,我现在更了解代码了!它工作完美,谢谢!

–statox♦
15年6月18日在13:20

完美的答案和惊人的插件! (注意:在将上述命令添加到〜/ .vimrc之前,您必须安装vim-submode插件。)

– weibeld
17 Sep 19'7:20



#2 楼

使用winresizer,请按Ctrl-e并调整大小!

您将使用常规的hjkl键(可能还使用箭头键)。或“中止”它。

还有一个移动模式,您可以在其中交换窗口,而焦点模式则可以在其中切换活动窗口。