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

时间:2015-12-27 17:38:31

标签: vim

我的vim屏幕上有8个方形(相等)窗口,跨越2个大型显示器,我想用快捷方式引用每个窗口< A-1>,< A-2> ......在vim N-wincmd-wincmd中有一个命令允许通过它的编号引用窗口,但它对我来说没用,因为其他插件有时会创建窗口(比如用于语法检查的语法)并且按编号引用并不完全匹配正确的窗口。我想也许我可以通过名字来引用窗口,所以问题是,我如何设置某个窗口的名称,然后进行快捷方式,以便在按下<时按下该名称的光标到窗口。 A - n>其中n是窗口号?

1 个答案:

答案 0 :(得分:0)

以下内容允许您为每个可见窗口保存一个静态额外窗口编号,然后快速跳转到该窗口。

只需在布局干净时调用: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