From 9e2aa1a710d0e04fc7707b8879b1df56aaf22fd3 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 21 Apr 2016 01:01:59 +0900 Subject: [PATCH] GitFiles? --- README.md | 3 ++- autoload/fzf/vim.vim | 24 ++++++++++++++++++++---- doc/fzf-vim.txt | 3 ++- plugin/fzf.vim | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4547bea..35f4cea 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,8 @@ Commands | Command | List | | --- | --- | | `Files [PATH]` | Files (similar to `:FZF`) | -| `GitFiles` | Git files | +| `GitFiles` | Git files (git ls-files) | +| `GitFiles?` | Git files (git status) | | `Buffers` | Open buffers | | `Colors` | Color schemes | | `Ag [PATTERN]` | [ag][ag] search result (`ALT-A` to select all, `ALT-D` to deselect all) | diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index c3c529d..99c78ec 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -357,18 +357,34 @@ function! fzf#vim#history(...) endfunction " ------------------------------------------------------------------ -" GitFiles +" GitFiles[?] " ------------------------------------------------------------------ -function! fzf#vim#gitfiles(...) +function! s:git_status_sink(lines) abort + if len(a:lines) < 2 + return + endif + let lines = extend(a:lines[0:0], map(a:lines[1:], 'v:val[3:]')) + return s:common_sink(lines) +endfunction + +function! fzf#vim#gitfiles(args, ...) let root = systemlist('git rev-parse --show-toplevel')[0] if v:shell_error return s:warn('Not in git repo') endif + if a:args !~ '^?' + return s:fzf(fzf#vim#wrap({ + \ 'source': 'git ls-files', + \ 'dir': root, + \ 'options': '-m --prompt "GitFiles> "' + \}), a:000) + endif return s:fzf(fzf#vim#wrap({ - \ 'source': 'git ls-tree --name-only -r HEAD', + \ 'source': 'git -c color.status=always status --short', \ 'dir': root, - \ 'options': '-m --prompt "GitFiles> "' + \ 'sink*': s:function('s:git_status_sink'), + \ 'options': '--ansi --multi --nth 2..,.. --prompt "GitFiles?> "' \}), a:000) endfunction diff --git a/doc/fzf-vim.txt b/doc/fzf-vim.txt index c54d0fd..10dab45 100644 --- a/doc/fzf-vim.txt +++ b/doc/fzf-vim.txt @@ -75,7 +75,8 @@ COMMANDS *fzf-vim-commands* Command | List ~ -----------------+------------------------------------------------------------------- `Files [PATH]` | Files (similar to `:FZF` ) - `GitFiles` | Git files + `GitFiles` | Git files (git ls-files) + `GitFiles?` | Git files (git status) `Buffers` | Open buffers `Colors` | Color schemes `Ag [PATTERN]` | {ag}{5} search result (ALT-A to select all, ALT-D to deselect all) diff --git a/plugin/fzf.vim b/plugin/fzf.vim index bd8095e..53eed62 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -43,7 +43,7 @@ endfunction call s:defs([ \'command! -bang -nargs=? -complete=dir Files call fzf#vim#files(, s:w(0))', -\'command! -bang GitFiles call fzf#vim#gitfiles(s:w(0))', +\'command! -bang -nargs=? GitFiles call fzf#vim#gitfiles(, s:w(0))', \'command! -bang Buffers call fzf#vim#buffers(s:w(0))', \'command! -bang Lines call fzf#vim#lines(s:w(0))', \'command! -bang BLines call fzf#vim#buffer_lines(s:w(0))',