Я работаю в 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