25

FZF Vim プラグインで最近使用したファイルの適切な解決策を見つけるのに問題があります。

このプラグインには、次のような機能が必要です。

  • 現在のvimセッションで開いているファイルを表示します(バッファなど)
  • NERD_tree、fugitive などのフィルター ファイル

私は2つの解決策を試しました

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 の実用的なソリューションを見つけましたか?

4

3 に答える 3

37

最新の Junegunn プラグインを見つけました。

Plug 'junegunn/fzf.vim'

ケースをカバーしています。

追加するだけ

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

ありがとうジュネガン:)

于 2015-08-17T09:48:34.117 に答える
7

考えられる解決策の 1 つは、neomruプラグインを活用することです。これは、最近アクセスしたファイルを にあるキャッシュに保存します~/.cache/neomru/file

neomru好みのプラグイン マネージャーでプラグインをインストールした後、キャッシュ ファイルを検索するためのマッピングを定義できます。次に例を示します。

nnoremap <silent> <Leader>m :call fzf#run({
\   'source': 'sed "1d" $HOME/.cache/neomru/file',
\   'sink': 'e '
\ })<CR>
于 2015-08-17T09:23:00.620 に答える
2

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%'})
于 2017-12-06T18:51:17.013 に答える