Рабочее решение для FZF последних файлов в Vim?
у меня проблема с поиском правильного решения для последних файлов в FZF vim plugin.
этот плагин должен иметь такие функции, как:
- показать файлы, открытые в текущем сеансе 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, чтобы получить текущий буфер.
вы нашли рабочее решение для FZFMru в VIM?
3 ответов
Я нашел последний плагин Junegunn.
Plug 'junegunn/fzf.vim'
оно покрывает случай.
просто добавить
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 - (ВИМ). Там много интересных вещей, включая MRU, поиск тегов и многое другое. Junegunn реализовал MRU просто как:
command! FZFMru call fzf#run({
\ 'source': v:oldfiles,
\ 'sink': 'e',
\ 'options': '-m -x +s',
\ 'down': '40%'})