Max*_*Max 4 vim split resize pane
我tmux非常喜欢其中的键绑定来管理拆分窗格:
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
Run Code Online (Sandbox Code Playgroud)
这使我可以连续打L多个L。它还可以让我说出要增加的边框(左,右等)。
我想在vim中有同样的事情,但是,vim似乎没有border的上下文:
"attempt 1
nnoremap <leader>L :vertical resize +5<cr><leader>
"attempt 2
nnoremap <leader>L :vertical resize +5<cr>
Run Code Online (Sandbox Code Playgroud)
但是,这仅在最左边的窗格中起作用时才起作用(如在右边的窗格中一样),我希望将其大小减小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>
Run Code Online (Sandbox Code Playgroud)
您可以使用该TmuxResize功能将其他按键映射到该功能。第一个参数是方向('h','j','k'或'l'),第二个参数是多少,应该由分割边界的举动。
有一些插件可以做到这一点。例如tinymode、submode和tinykeymap
至少对于tinykeymap来说,这曾经是默认行为,当按Ctrl+时它会切换到tmux行为+(这就是原因,我最终卸载了该插件)