vim – 如何获取窗口的唯一标识符?
发布时间:2020-12-15 21:30:03 所属栏目:安全 来源:网络整理
导读:我试图为窗口获取某种唯一标识符,以便可以针对该窗口运行命令. 即,如果我需要给那个窗口焦点..或者如果我需要看到那个窗口的大小..等问题是目前似乎窗口号被用作这个标识符,但这个数字可能随时改变引入了一个新窗口.看起来它是一个从左到右,从上到下的索引计
我试图为窗口获取某种唯一标识符,以便可以针对该窗口运行命令.
即,如果我需要给那个窗口焦点..或者如果我需要看到那个窗口的大小..等问题是目前似乎窗口号被用作这个标识符,但这个数字可能随时改变引入了一个新窗口.看起来它是一个从左到右,从上到下的索引计数.这让我很困惑,为什么它会被用作标识符. 看到我不知道用户可能对布局做了什么..我怎么能保证当我指定一个窗口缓冲区,或获取有关窗口的信息时,我实际上获得了有关我想要的窗口的信息? 解决方法
您可以使用窗口变量来获取此类标识符:
" 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将无法创建没有标识符的窗口. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |