5

分割ペインを管理するのが本当に楽しいキー バインドが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

これにより、複数の L を続けて L を押すことができます。また、増やしたい境界線 (左、右など) を言うこともできます。

私はvimで同じことをしたいのですが、vimにはボーダーのコンテキストがないようです:

"attempt 1
nnoremap <leader>L :vertical resize +5<cr><leader>
"attempt 2
nnoremap <leader>L :vertical resize +5<cr>

ただし、これは、右ペインの場合と同じように左端のペインでサイズを 5 減らしたい場合にのみ機能します。また、これにより、繰り返し実行することはできません。(キーを 1 回押してから、「L」が必要な回数だけ押したいと思います。

誰かがこれを行う方法を見つけたのではないかと思っていました。

注:tmux誰かがそれで遊んで、私の意図を正確に確認できるように、構成を配置しました。

4

2 に答える 2

5

Tmux の動作に似たサイズ変更を行う vim スクリプトを作成しました。それはあなたが探しているものかもしれません。

" 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') で、2 番目の引数は分割境界線を移動する量です。

于 2016-04-15T17:32:43.433 に答える