加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何移动到某些选项卡上某些窗口中存在的非隐藏缓冲

发布时间:2020-12-14 01:36:57 所属栏目:Windows 来源:网络整理
导读:我在Vim中使用各种选项卡上的各种窗口中的大量打开缓冲区.我知道将一个现有缓冲区加载到当前窗口中很简单.但是,我的一些大文件缓冲区使用折叠表达式,在将它们加载到新窗口时会导致几秒钟的延迟.另一方面,如果它们已经在标签页上的窗口中打开,我只需要跳转到
我在Vim中使用各种选项卡上的各种窗口中的大量打开缓冲区.我知道将一个现有缓冲区加载到当前窗口中很简单.但是,我的一些大文件缓冲区使用折叠表达式,在将它们加载到新窗口时会导致几秒钟的延迟.另一方面,如果它们已经在标签页上的窗口中打开,我只需要跳转到该标签页和该窗口.

我收集到那里没有命令直接这样做.还是有吗?

要找到具有所需缓冲区的窗口,我可以编写一个执行此操作的函数:

>为每个标签
>对于每个选项卡上的每个窗口
>检查每个窗口,看看它是否加载了我想要的缓冲区
>如果找不到,将光标移动到找到的窗口或在新选项卡上的窗口中打开缓冲区

有人已经写过这个吗?或者我错过了更简单的方式来获得我想要的东西?

更新:’switchbuf’答案正是我所寻找的,但我仍然可能最终使用自定义函数,因为(1)我不理解’newtab’选项的行为,因为窗口仍然被拆分,并且( 2)我的功能适用于搜索卸载的文件:

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

解决方法

只需设置switchbuf选项:

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

如果您不希望始终打开switchbuf选项,则需要编写一个更改的函数,然后重置switchbuf选项.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读