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 и открыть буфер/файл в пределах которого вы пожелали.