2014-04-04 120 views
3

我经常使用Unite.vim来滚动浏览Vim中的文件列表。有时候我会使用Unite的auto-preview功能在预览窗口中打开每个文件,当我滚动它时。如果我滚动浏览大量文件,这会给我留下一堆我不需要的开放缓冲区。在预览窗口中打开新缓冲区时,如何使当前占用预览窗口的缓冲区关闭?在预览窗口中打开新缓冲区时占用Vim预览窗口的自动关闭缓冲区

+0

这是一个粗略的监督,应该被报告以对团结的问题追踪器进行处罚。 – romainl

+1

@romainl我应该指定 - 我已经覆盖Unite的本地'预览'行动,以便控制预览窗口的位置,正如Shougo建议的[这里](https://github.com/Shougo/unite.vim /问题/ 72)。本机预览操作没有这个问题。 –

+0

当我发现我的缓冲区列表很大时,我通常只会执行':%bdel',':%bwipeout'或类似的操作。虽然,我从来没有真正看过缓冲区列表。我只是“召唤”我的文件做“buf abbrev”+ sehe

回答

1

我能够翻翻团结源,复制预览功能,并使我直接需要此功能的修改做了预览窗口的垂直开放来解决这个问题:

function! s:preview.func(candidate) 
    let buflisted = buflisted(
     \ unite#util#escape_file_searching(
     \ a:candidate.action__path)) 
    if filereadable(a:candidate.action__path) 
    " If execute this command, unite.vim will be affected by events. 
    noautocmd silent execute 'vert pedit!' " added vert 
      \ fnameescape(a:candidate.action__path) 
    call SetWidthToHalfScreen() " added to resize preview window 
    let prev_winnr = winnr('#') 
    let winnr = winnr() 
    wincmd P 
    doautoall BufRead 
    setlocal nomodified 
    execute prev_winnr.'wincmd w' 
    execute winnr.'wincmd w' 
    endif 
    if !buflisted 
    call unite#add_previewed_buffer_list(
     \ bufnr(unite#util#escape_file_searching(
     \  a:candidate.action__path))) 
    endif 
endfunction 
call unite#custom#action("openable", "preview", s:preview) 
call unite#custom#action("file", "preview", s:preview) 

function! SetWidthToHalfScreen() 
    let diff = 100 - winwidth(winnr()) 
    exec "vert resize " . (diff > 0 ? '+' : '-') . abs(diff) 
endfunction 
相关问题