Vim: окно "расширить" в следующее окно

Скажем, у меня есть этот макет в vim:

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

Можно ли завершить этот макет:

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

как команда "вытянуть правую"?

PS. Не говорите мне использовать ctrl-w J на b, а затем ctrl-w L на d, мой макет на самом деле более сложный, чем это. Я действительно ищу команду "вытянуть правую", если она существует.

Ответ 1

Это хрупкое, но, вероятно, лучше, чем ничего!

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 <c-w>e :call ExtendRight()<CR>.

Ответ 2

Это сложно реализовать как функцию, так как может быть много сценариев краевого случая, чтобы рассмотреть, а также почему vim не делает это изначально.

Если вам не нравится использовать ctrl-w J на b, а затем ctrl-w L на d, самым простым подходом было бы закрыть c-раздел, а затем открыть новый вертикальный разделитель на a и открыть буфер/файл в пределах которого вы пожелали.