我在FZF
vim插件中找到适合最新文件的解决方案有问题.
>在当前vim会话中打开的显示文件(如缓冲区)
>过滤文件,如NERD_tree,fugitive
我尝试了两个解决方案
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
这个在开放会话期间工作,但是当我重新启动vim时,我看不到所有最后打开的文件.
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
此解决方案可以正确地过滤文件,但仅适用于上一个会话中打开的文件所以我需要重新启动vim来获取当前的缓冲区.
您是否在VIM中找到FZFMru的工作解决方案?