将name设置为window并使用命令引用它



我的vim屏幕上有8个方形(相等)窗口,跨越2个大监视器,我想用快捷键引用它们中的每一个<A-1>、<A-2>。vim N-wincmd-wincmd中有一个命令允许按窗口编号引用窗口,但对我来说这是无用的,因为其他插件有时会创建窗口(比如语法检查的语法),而按编号引用并不完全匹配正确的窗口。我想也许我可以通过名称引用窗口,所以问题是,我如何为某个窗口设置名称,然后抄近路,使光标在按<其中n是窗口号?

下面可以为每个可见窗口保存一个静态的额外窗口号,然后快速跳转到它。

只需在布局干净时调用:MarkWins,然后映射<A-1><A-2>。。。将跳转到好窗口,即使之后创建了新窗口。

" Mark all visible windows from 1 :
command! MarkWins call s:mark_windows()
" Go to a previously marked window :
command! -nargs=1 GoToMarkedWin call s:go_to_marked_win(<f-args>)
" Mappings (Alt-1, Alt-2...) :
for s:n in range(1,8)
    exe printf('noremap <silent> <a-%d> :GoToMarkedWin %d<cr>', s:n, s:n)
endfor
function! s:mark_windows()
    let l:old_winnr = winnr()
    windo let w:win_mark = winnr()
    exe printf('%d wincmd w', l:old_winnr)
endf
function! s:go_to_marked_win(n)
    let l:old_winnr = winnr()
    while 1
        if exists('w:win_mark') && w:win_mark == a:n
            return
        endif
        wincmd w
        if winnr() == l:old_winnr | return | endif
    endw
endf

最新更新