Вы можете использовать переменные окна, чтобы получить такой идентификатор:
" 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
: это должно отметить все окна.Или, может быть, лучше отметить только те окна, которые вы хотите использовать сразу после создания окна.Чтобы найти окно с идентификатором 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 s
, не сможет создать окно без идентификатора.