【问题标题】:vim: shortcut to resize split windowsvim:调整拆分窗口大小的快捷方式
【发布时间】:2020-07-24 17:34:54
【问题描述】:

当我在 Vim 中拆分窗口时,我可以使用 :resize +1/-1 调整窗口大小。我想为它添加一个快捷方式,就像terminator 中的拆分窗口一样。在终结器中,如果我有两个相互重叠的窗口,CTRL Shift Up / Down 在两个窗口之间移动分隔符,这意味着,如果我在顶部窗口中并按 CTRL Shift Down,顶部窗口会增加。另一方面,如果我在底部窗口中,CTRL Shift Down 会减小底部窗口。所以,它确实移动了分隔符。

使用 vim 中的拆分窗口,我尝试像这样重新映射:

:nnoremap <silent> <c-Up> :resize -1<CR>
:nnoremap <silent> <c-Down> :resize +1<CR>

如果我在顶部窗口上,这很好用(按CTRL UP 会减小窗口大小,而CTRL Down 会增加大小)。但是当我移动到底部窗口时,它的行为正确,但效果很奇怪(CTRL UP 也会减小窗口的大小)。所以,我不能模拟移动分隔符。

是否可以根据我所在的窗口运行命令?

【问题讨论】:

  • 肯定有内置函数:&lt;C-w&gt;&lt;,&gt;,+,- 中的任何一个
  • 可能是因为:resize:vertical resize之间存在差异

标签: linux vim split terminal remap


【解决方案1】:

你可以在.vimrc中定义一个函数

function! MoveSeparator(PlusMinus)
    let num=tabpagewinnr(tabpagenr())
    let pm=a:PlusMinus
    if  num == "2"
        let pm = pm == '+' ? '-' : '+'
    end
    exec "resize " . pm . "1"
endfunction

nnoremap <silent> <C-UP>   :call MoveSeparator("-")<CR>
nnoremap <silent> <C-DOWN> :call MoveSeparator("+")<CR>

【讨论】:

  • 谢谢,如果我只有两个窗口,这将非常有效。但是当我再添加一个时,事情就变得疯狂了。我对这种“vim 语言”不是很熟悉,但我会尝试使用winlayout()win_id2tabwin():&lt;winnr&gt;resize 来处理它。但首先我必须了解这些 vim 语法,但你的函数对我来说已经是一个开始,谢谢。
  • 正确。----完成。
【解决方案2】:

您的代码并没有那么错误,只是需要进行一些更改。 现在您可以通过 horizo​​ntalvertical 两种方式调整所有窗格的大小:

:nnoremap <silent> <c-Up> :resize -1<CR>
:nnoremap <silent> <c-Down> :resize +1<CR>
:nnoremap <silent> <c-left> :vertical resize -1<CR>
:nnoremap <silent> <c-right> :vertical resize +1<CR>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2010-10-03
    • 2011-09-13
    • 2020-07-15
    相关资源
    最近更新 更多