2014-04-04 119 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 
相關問題