代码之家  ›  专栏  ›  技术社区  ›  Herbert Sitz

如何移动到某个选项卡上某个窗口中存在的非隐藏缓冲区?

  •  4
  • Herbert Sitz  · 技术社区  · 15 年前

    1. 对于每个选项卡
    2. 检查每个窗口,看它是否加载了所需的缓冲区
    3. 将光标移动到“已找到”窗口,如果找不到,则在新选项卡上的窗口中打开缓冲区

    有人写过这个吗?还是我错过了更简单的方法来得到我想要的?

    function! Sbuf(filename)
        let myvar = ''
        tabdo let myvar = bufwinnr(a:filename) > 0 ? tabpagenr() 
                        \    . ' ' . bufwinnr(a:filename) : myvar
        if myvar > ''
            silent execute split(myvar)[0] . "tabn"
            silent execute split(myvar)[1] . "wincmd w"
        else
            execute 'tab drop ' . a:filename
        endif
    endfunction
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   too much php    15 年前

    只要把 switchbuf

    :set switchbuf=useopen,usetab
    :sbuf [filename]
    

    如果你不想 选项一直打开,则需要编写一个函数,该函数将更改并重置 切换器 选择。

    function MySwitchBuf(filename)
      " remember current value of switchbuf
      let l:old_switchbuf = &switchbuf
      try
        " change switchbuf so other windows and tabs are used
        set switchbuf=useopen,usetab
        execute 'sbuf' a:filename
      finally
        " restore old value of switchbuf
        let &switchbuf = l:old_switchbuf
      endtry
    endfunction
    
        2
  •  3
  •   ib. Evgeny Shavlyugin    15 年前

    如果我没有遗漏什么,你说的行为是由 switchbuf

    set switchbuf=usetab
    

    可以帮你解决这个问题。这命令Vim不打开文件,而是跳转到包含缓冲区的窗口,即使该窗口位于其他选项卡页中。有关其他选项,请查看 :h switchbuf