Как перейти к скрытому буферу, который существует в каком-то окне на какой-либо вкладке? - PullRequest
4 голосов
/ 13 октября 2010

Я работаю в Vim с большим количеством открытых буферов в разных окнах на разных вкладках. Я знаю, что просто загрузить один из существующих буферов в мое текущее окно. Однако некоторые из моих буферов для больших файлов используют складывающиеся выражения, которые вызывают задержку в несколько секунд при загрузке их в новое окно. С другой стороны, если они уже открыты в окне на вкладке, мне просто нужно перейти на эту вкладку и в это окно.

Я понимаю, что нет команды сделать это напрямую. Или есть?

Чтобы найти окно с нужным буфером, я мог бы написать функцию, которая делает это:

  1. для каждой вкладки
  2. для каждого окна на каждой вкладке
  3. проверить каждое окно, чтобы увидеть, загружен ли в нем нужный буфер
  4. переместить курсор в найденное окно ИЛИ открыть буфер в окне новой вкладки, если не найден

Кто-то уже писал это? Или мне не хватает более простого способа получить то, что я хочу?

ОБНОВЛЕНИЕ: ответы '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

Ответы [ 2 ]

4 голосов
/ 13 октября 2010

Просто установите параметр 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
3 голосов
/ 13 октября 2010

Если я что-то не упускаю, то поведение, о котором вы говорите, контролируется опцией switchbuf. Он определяет, где искать требуемый пользователем буфер (текущее окно, все окна в других вкладках или нигде, то есть каждый раз открывать файл с нуля) и как открывать буфер (в новом разделении, вкладке или в текущем окне ). Так что я думаю,

set switchbuf=usetab

может решить эту проблему для вас. Это приказывает Vim не открывать файл, а переходить к окну, содержащему буфер, даже если это окно находится на другой вкладке. Для дополнительных опций взгляните на :h switchbuf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...