【问题标题】:vim: "extend" window into next windowvim:“扩展”窗口到下一个窗口
【发布时间】:2025-11-24 18:10:01
【问题描述】:

假设我在 vim 中有这个布局:

+-----+-----+-----+
|     |     |     |
|  a  |     |     |
|     |     |     |
+-----+  c  |  d  |
|     |     |     |
|  b  |     |     |
|     |     |     |
+-----+-----+-----+

是否有可能以这种布局结束:

+-----+-----+-----+
|     |     |     |
|  a  |  c  |     |
|     |     |     |
+-----+-----+  d  |
|           |     |
|     b     |     |
|           |     |
+-----+-----+-----+

像“向右扩展”命令?

PS。不要告诉我在 b 上使用 ctrl-w J 然后在 d 上使用 ctrl-w L,我的布局实际上比这个更复杂。我真的在寻找“向右扩展”命令(如果存在)。

【问题讨论】:

  • 是的,我认为不存在用于此的内置命令。您必须像您说的那样将其与 <c-w> J<c-w L 拼凑在一起,并且对于可能会变得非常棘手的更复杂的布局。

标签: vim window


【解决方案1】:

这很难作为一个特性来实现,因为可能需要考虑很多边缘情况,这也是为什么 vim 本身不这样做的原因。

如果您不喜欢在 b 上使用 ctrl-w J 然后在 d 上使用 ctrl-w L 的选项,那么最简单的方法是关闭 c 拆分,然后在 a 上打开一个新的垂直拆分,并在其中打开您想要的缓冲区/文件。

【讨论】:

    【解决方案2】:

    这很脆弱,但可能聊胜于无!

    function! ExtendRight()
        let l:start=winnr()
        exe "normal \<c-w>l"
        let l:shrink=bufnr('%')
        close
        exe "normal " . l:start . "\<c-w>w"
        exe "normal \<c-w>k"
        vsplit
        exe "b " . l:shrink
    endfunction
    

    你可以用nnoremap &lt;c-w&gt;e :call ExtendRight()&lt;CR&gt;映射它。

    【讨论】:

      最近更新 更多