Add mappings

This commit is contained in:
Junegunn Choi 2015-08-22 01:00:31 +09:00
parent b26dc157b9
commit 813b58b3ea
2 changed files with 76 additions and 12 deletions

View file

@ -1,7 +1,7 @@
fzf.vim fzf :heart: vim
======= ===============
A set of [fzf][fzf]-based Vim commands. A set of [fzf][fzf]-based commands and mappings.
Rationale Rationale
--------- ---------
@ -12,10 +12,10 @@ write their own Vim commands with it. However, I've learned that many users of
fzf are not familiar with Vimscript and are looking for the "default" fzf are not familiar with Vimscript and are looking for the "default"
implementation of the features they can find in the alternative Vim plugins. implementation of the features they can find in the alternative Vim plugins.
This repository is a bundle of fzf-based commands extracted from my This repository is a bundle of fzf-based commands and mappings extracted from
[.vimrc][vimrc] to address such needs. The commands are opinionated and not my [.vimrc][vimrc] to address such needs. They are *not* designed to be
designed to be extremely flexible or configurable, and they are not guaranteed flexible or configurable, nor are not guaranteed to be backward-compatible at
to be backward-compatible. the moment, so you might want to treat this repository as a reference.
Installation Installation
------------ ------------
@ -27,8 +27,8 @@ Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': 'yes \| ./install' }
Plug 'junegunn/fzf.vim' Plug 'junegunn/fzf.vim'
``` ```
List of commands Commands
---------------- --------
| Command | List | | Command | List |
| --- | --- | | --- | --- |
@ -44,7 +44,7 @@ List of commands
| `Snippets` | Snippets ([UltiSnips][us]) | | `Snippets` | Snippets ([UltiSnips][us]) |
| `Commands` | User-defined commands | | `Commands` | User-defined commands |
- All commands except `Colors` support `CTRL-T` / `CTRL-X` / `CTRL-V` key - Most commands support `CTRL-T` / `CTRL-X` / `CTRL-V` key
bindings to open in a new tab, a new split, or in a new vertical split. bindings to open in a new tab, a new split, or in a new vertical split.
- Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen - Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen
@ -61,8 +61,25 @@ let g:fzf_action = {
let g:fzf_layout = { 'down': '40%' } let g:fzf_layout = { 'down': '40%' }
``` ```
Fuzzy completion helper Mappings
----------------------- --------
| Mapping | Description |
| --- | --- |
| `<plug>(fzf-complete-word)` | `cat /usr/share/dict/words` |
| `<plug>(fzf-complete-path)` | Path completion using `find` (file + dir) |
| `<plug>(fzf-complete-file)` | File completion using `find` |
| `<plug>(fzf-complete-file-ag)` | File completion using `ag` |
### Usage
```vim
imap <c-x><c-k> <plug>(fzf-complete-word)
imap <c-x><c-f> <plug>(fzf-complete-path)
imap <c-x><c-j> <plug>(fzf-complete-file-ag)
```
### Completion helper
`fzf#complete` is a helper function for creating custom fuzzy completion using `fzf#complete` is a helper function for creating custom fuzzy completion using
fzf. If the first parameter is a command string or a Vim list, it will be used fzf. If the first parameter is a command string or a Vim list, it will be used

View file

@ -482,6 +482,53 @@ function! fzf#complete(...)
return '' return ''
endfunction endfunction
" ----------------------------------------------------------------------------
" <plug>(fzf-complete-word)
" ----------------------------------------------------------------------------
inoremap <expr> <plug>(fzf-complete-word) fzf#complete('cat /usr/share/dict/words')
" ----------------------------------------------------------------------------
" <plug>(fzf-complete-path)
" <plug>(fzf-complete-file)
" <plug>(fzf-complete-file-ag)
" ----------------------------------------------------------------------------
function! s:file_split_prefix(prefix)
let expanded = expand(a:prefix)
return isdirectory(expanded) ?
\ [expanded,
\ substitute(a:prefix, '/*$', '/', ''),
\ ''] :
\ [fnamemodify(expanded, ':h'),
\ substitute(fnamemodify(a:prefix, ':h'), '/*$', '/', ''),
\ fnamemodify(expanded, ':t')]
endfunction
function! s:file_source(prefix)
let [dir, head, tail] = s:file_split_prefix(a:prefix)
return printf(
\ "cd %s && ".s:file_cmd." | sed 's:^:%s:'",
\ shellescape(dir), empty(a:prefix) || a:prefix == tail ? '' : head)
endfunction
function! s:file_options(prefix)
let [_, head, tail] = s:file_split_prefix(a:prefix)
return printf('--prompt %s --query %s', shellescape(head), shellescape(tail))
endfunction
function! s:complete_file(bang, command)
let s:file_cmd = a:command
return fzf#complete(extend({
\ 'prefix': '\S*$',
\ 'source': function('<sid>file_source'),
\ 'options': function('<sid>file_options')}, a:bang ? {} : s:win()))
endfunction
inoremap <expr> <plug>(fzf-complete-path)
\ <sid>complete_file(0, "find . -path '*/\.*' -prune -o -print \| sed '1d;s:^..::'")
inoremap <expr> <plug>(fzf-complete-file)
\ <sid>complete_file(0, "find . -path '*/\.*' -prune -o -type f -print -o -type l -print \| sed '1d;s:^..::'")
inoremap <expr> <plug>(fzf-complete-file-ag) <sid>complete_file(0, "ag -l -g ''")
" ------------------------------------------------------------------ " ------------------------------------------------------------------
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save