工作解决方案的FZF最新的文件在Vim



我有一个问题,找到一个合适的解决方案,最近使用的文件与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的工作解决方案了吗?

我找到了一个最新的Junegunn插件。

Plug 'junegunn/fzf.vim'

它包含一个case。

添加

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

谢谢Junegunn:)

一个可能的解决方案是利用neomru插件,它会将您最近访问的文件保存到位于~/.cache/neomru/file的缓存中。

在使用您喜欢的插件管理器安装neomru插件之后,您可以定义一个映射来搜索缓存文件,例如:

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

查看https://github.com/junegunn/fzf/wiki/Examples-(vim)。那里有很多很酷的东西,包括MRU、标签搜索等等。Junegunn将MRU简单地实现为:

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

相关内容

  • 没有找到相关文章

最新更新