我试图为窗口获取某种唯一标识符,以便可以针对该窗口运行命令.
即,如果我需要给那个窗口焦点..或者如果我需要看到那个窗口的大小..等问题是目前似乎窗口号被用作这个标识符,但这个数字可能随时改变引入了一个新窗口.看起来它是一个从左到右,从上到下的索引计数.这让我很困惑,为什么它会被用作标识符.
看到我不知道用户可能对布局做了什么..我怎么能保证当我指定一个窗口缓冲区,或获取有关窗口的信息时,我实际上获得了有关我想要的窗口的信息?
解决方法
您可以使用窗口变量来获取此类标识符:
" put unique window identifier into w:id variable autocmd VimEnter,WinEnter * if !exists('w:id') | let w:id={expr_that_will_return_an_unique_identifier} | endif
:这应标记所有窗口.或者,最好只在窗口创建后标记要使用的窗口.要查找id为abc的窗口,然后切换到它:
function s:FindWinID(id) for tabnr in range(1,tabpagenr('$')) for winnr in range(1,tabpagewinnr(tabnr,'$')) if gettabwinvar(tabnr,winnr,'id') is a:id return [tabnr,winnr] endif endfor endfor return [0,0] endfunction <...> let [tabnr,winnr]=s:FindWinID('abc') execute "tabnext" tabnr execute winnr."wincmd w"
最新的Vim版本有win_getid()函数和win_id2tabwin()代替s:FindWinID,win_gotoid()只是转到带有给定标识符的窗口.标识符由Vim本身维护,因此即使打开窗口,例如noautocmd wincmd将无法创建没有标识符的窗口.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。