gpt4 book ai didi

Vim 窗口反复调整大小

转载 作者:行者123 更新时间:2023-12-05 01:01:59 25 4
gpt4 key购买 nike

我在 tmux 中有键绑定(bind)我真的很喜欢管理拆分 Pane :

bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

这让我可以连续用多个 L 击中 L。它还允许我说出我想要增加的边界(左、右等)。

我想在 vim 中有同样的东西,但是 vim 似乎没有边界的上下文:
"attempt 1
nnoremap <leader>L :vertical resize +5<cr><leader>
"attempt 2
nnoremap <leader>L :vertical resize +5<cr>

但是,这仅在最左边的 Pane 上有效,就像在右边的 Pane 上一样,我希望它将大小减小 5。此外,这不允许我重复执行此操作。 (我想按一次键,然后按我需要的次数按“L”。

我想知道是否有人找到了这样做的方法。

注意:我把 tmux配置,以便有人可以使用它来了解我的意思。

最佳答案

我为自己制作了一个 vim 脚本,以使调整大小类似于 Tmux 的行为。
这可能是您正在寻找的。

" Tmux-like window resizing
function! IsEdgeWindowSelected(direction)
let l:curwindow = winnr()
exec "wincmd ".a:direction
let l:result = l:curwindow == winnr()

if (!l:result)
" Go back to the previous window
exec l:curwindow."wincmd w"
endif

return l:result
endfunction

function! GetAction(direction)
let l:keys = ['h', 'j', 'k', 'l']
let l:actions = ['vertical resize -', 'resize +', 'resize -', 'vertical resize +']
return get(l:actions, index(l:keys, a:direction))
endfunction

function! GetOpposite(direction)
let l:keys = ['h', 'j', 'k', 'l']
let l:opposites = ['l', 'k', 'j', 'h']
return get(l:opposites, index(l:keys, a:direction))
endfunction

function! TmuxResize(direction, amount)
" v >
if (a:direction == 'j' || a:direction == 'l')
if IsEdgeWindowSelected(a:direction)
let l:opposite = GetOpposite(a:direction)
let l:curwindow = winnr()
exec 'wincmd '.l:opposite
let l:action = GetAction(a:direction)
exec l:action.a:amount
exec l:curwindow.'wincmd w'
return
endif
" < ^
elseif (a:direction == 'h' || a:direction == 'k')
let l:opposite = GetOpposite(a:direction)
if IsEdgeWindowSelected(l:opposite)
let l:curwindow = winnr()
exec 'wincmd '.a:direction
let l:action = GetAction(a:direction)
exec l:action.a:amount
exec l:curwindow.'wincmd w'
return
endif
endif

let l:action = GetAction(a:direction)
exec l:action.a:amount
endfunction

" Map to buttons
nnoremap <M-h> :call TmuxResize('h', 1)<CR>
nnoremap <M-j> :call TmuxResize('j', 1)<CR>
nnoremap <M-k> :call TmuxResize('k', 1)<CR>
nnoremap <M-l> :call TmuxResize('l', 1)<CR>

您可以使用 TmuxResize函数将其他键映射到它。
第一个参数是方向( 'h''j''k''l' ),第二个参数是分割边框应该移动多少。

关于Vim 窗口反复调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27265490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com