DEV Community

Kay Gosho
Kay Gosho

Posted on

fzf.vim GFiles enhancement for monorepo

I'd like fzf.vim GFiles to add my current directory to initial query.

Before:

image

After:

image

I end up to create a custom command GFilesMonorepo. Here is the implementation:

" ported from https://github.com/junegunn/fzf.vim/blob/master/autoload/fzf/vim.vim#L546
function! s:get_git_root()
  let l:root = split(system('git rev-parse --show-toplevel'), '\n')[0]
  if v:shell_error
      return ''
  endif
  return l:root
endfunction

function! s:gitfiles_monorepo()
  let l:root = s:get_git_root()
  let l:path = substitute(getcwd(), l:root, '', '')
  let l:path = substitute(l:path, '/', '', '')

  let l:options = '-m --preview "head -20 {1}" --prompt "GitFiles> " '
  if l:path != ''
    let l:options .= '--query '.l:path
  endif

  call fzf#run({
  \ 'source':  'git ls-files | uniq',
  \ 'sink': 'e',
  \ 'dir': l:root,
  \ 'options': l:options,
  \ 'down':    '40%'
  \})
endfunction
command! GFilesMonorepo call s:gitfiles_monorepo()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)