按住键时如何重复映射


11

我在.vimrc一些简单的映射中可以轻松调整拆分窗口的大小:

noremap <Leader><UP>    <C-w>+
noremap <Leader><DOWN>  <C-w>-

效果很好,但是例如,当我想调整10行的窗口大小时,我必须按下并释放Leader+ UP10次​​。

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

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

注意2:我也知道,流行的映射窗口大小的映射是使用+-键,这些键更容易按几次,但是我既不想使用这些键也不能这样做。

Answers:


14

您可以尝试输入... 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-Up或进入子模式Leader-Down(它也会一次放大/缩小窗口),然后-您只需按UpDown即可放大/缩小窗口,直到退出子模式。

有关超时问题,另请参阅帮助,但要禁用它:

"disable submode timeouts:
let g:submode_timeout = 0

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

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

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

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


我尝试了您的解决方案,但它似乎不起作用:当我按下<kbd> Leader </ kbd> + <kbd> UP </ kbd>时,我收到消息--submode: grow/shrink --,窗口被调整了一行尺寸,但是命令是t重复。我用4个combinaisons的试了一下g:submode_keep_leaving_key,并g:submode_timeout为0或1。我不知道如果我做错了什么或没有。我通常在终端中使用vim,但现在我只能在Windows上使用gVim进行测试,但是我不确定它是否会有所改变。
statox

2
该命令不会自动重复,您仍然需要根据需要多次击中Up或击中Down自己(但不必先按Leader
VanLaser 2015年

哦,我现在更了解代码了!它的工作原理非常感谢!
statox

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

1

随着winresizer,命中Ctrl- e和调整了!

您将使用常规的hjkl键(也许还有箭头键)。

您可以“接受”调整大小或“中止”调整大小。

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

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.