2015-07-28 29 views
14

Ho un problema con trovare una soluzione adeguata per i file più recenti nel plugin vim FZF.Soluzione di lavoro per i file FZF più recenti in Vim?

Questo plugin dovrebbero ha le caratteristiche come:

  • file dello spettacolo aperto in sessione vim corrente (come buffer)
  • file di filtro come NERD_tree, latitante

Ho provato due soluzioni

command! FZFMru call fzf#run({ 
\ 'source': reverse(s:all_files()), 
\ 'sink': 'edit', 
\ 'options': '-m --no-sort -x', 
\ 'down': '40%' }) 

function! s:all_files() 
    return extend(
    \ filter(copy(v:oldfiles), 
    \  "v:val !~ 'fugitive:\\|\\.svg|NERD_tree\\|^/tmp/\\|.git/'"), 
    \ map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), 'bufname(v:val)')) 
endfunction 

Questo funziona durante la sessione aperta ma quando riavvio vim non vedo tutti gli ultimi file aperti.

command! FZFMru call s:fzf_wrap({ 
    \'source': 'bash -c "'. 
    \    'echo -e \"'.s:old_files().'\";'. 
    \    'ag -l -g \"\"'. 
    \   '"', 
    \}) 

function! s:fzf_wrap(dict) 
    let defaults = { 
    \'sink' : 'edit', 
    \'options' : '+s -e -m', 
    \'tmux_height': '40%', 
    \} 
    call extend(a:dict, defaults, 'keep') 
    call fzf#run(a:dict) 
endfunction 

function! s:old_files() 
    let oldfiles = copy(v:oldfiles) 
    call filter(oldfiles, 'v:val !~ "fugitive"') 
    call filter(oldfiles, 'v:val !~ "NERD_tree"') 
    call filter(oldfiles, 'v:val !~ "^/tmp/"') 
    call filter(oldfiles, 'v:val !~ ".git/"') 
    call filter(oldfiles, 'v:val !~ ".svg"') 
    return join(oldfiles, '\n') 
endfunction 

Questa soluzione filtra correttamente i file ma funziona solo per i file aperti nella sessione precedente. Quindi ho bisogno di riavviare vim per ottenere il buffer corrente.

Hai trovato soluzione di lavoro per FZFMru in VIM?

risposta

14

Ho trovato un ultimo plugin Junegunn.

Plug 'junegunn/fzf.vim' 

Copre un caso.

Basta aggiungere

nmap <silent> <leader>m :History<CR> 

Grazie Junegunn :)

+4

sembra non funzionare (almeno più). "Non è un comando di editor: Cronologia" – matt

+0

Funziona per me con nvim 0.2.2 e i plugin fzf aggiornati. –

7

Una possibile soluzione è sfruttare il plug-in neomru che salverà i file più recenti in una cache situata a ~/.cache/neomru/file.

Dopo aver installato il plugin neomru con il plugin manager preferito, è possibile definire una mappatura per cercare il file di cache, ad esempio:

nnoremap <silent> <Leader>m :call fzf#run({ 
\ 'source': 'sed "1d" $HOME/.cache/neomru/file', 
\ 'sink': 'e ' 
\ })<CR> 
+1

funziona come previsto. Grazie. Non sono sicuro se abbiamo bisogno di unire il supporto qui :) – tomekfranek

0

Partenza https://github.com/junegunn/fzf/wiki/Examples-(vim). Un sacco di cose interessanti lì, tra cui MRU, ricerca di tag e molto altro. Junegunn ha implementato MRU semplicemente come:

command! FZFMru call fzf#run({ 
\ 'source': v:oldfiles, 
\ 'sink': 'e', 
\ 'options': '-m -x +s', 
\ 'down': '40%'})