Update 2024-08-18 20:19 OpenBSD/amd64-x13
This commit is contained in:
		
							parent
							
								
									223d3fa4cf
								
							
						
					
					
						commit
						47cf6e96c5
					
				| @ -1,21 +0,0 @@ | |||||||
| MIT License |  | ||||||
| 
 |  | ||||||
| Copyright (c) 2021 Nabendu Maiti |  | ||||||
| 
 |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| of this software and associated documentation files (the "Software"), to deal |  | ||||||
| in the Software without restriction, including without limitation the rights |  | ||||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| copies of the Software, and to permit persons to whom the Software is |  | ||||||
| furnished to do so, subject to the following conditions: |  | ||||||
| 
 |  | ||||||
| The above copyright notice and this permission notice shall be included in all |  | ||||||
| copies or substantial portions of the Software. |  | ||||||
| 
 |  | ||||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| SOFTWARE. |  | ||||||
| @ -1,78 +0,0 @@ | |||||||
| # fzf_cscope.vim |  | ||||||
| 
 |  | ||||||
|  CSCOPE settings for vim using popup and preview window |  | ||||||
| """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  This file contains settings for vim's cscope interface to fzf (can use vim* >8 advanced popup feature), " plus some keyboard mappings that I've found useful. |  | ||||||
| 
 |  | ||||||
| ### Prerequisites  :  |  | ||||||
| 
 |  | ||||||
| 1. cscope  -- install using 'sudo apt install cscope' on ubuntu |  | ||||||
| 2. https://github.com/junegunn/fzf |  | ||||||
| 3. https://github.com/junegunn/fzf.vim |  | ||||||
| 
 |  | ||||||
| ### Installation: |  | ||||||
| 
 |  | ||||||
| Install fzf & fzf.vim before installing fzf_csope.vim and using it |  | ||||||
| 
 |  | ||||||
| `Using`  [pathogen.vim](https://github.com/tpope/vim-pathogen), and then simply copy and paste: |  | ||||||
| 
 |  | ||||||
| ```sh |  | ||||||
| mkdir -p ~/.vim/bundle |  | ||||||
| cd ~/.vim/bundle |  | ||||||
| git clone https://github.com/nmaiti/fzf_cscope.vim.git |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| using [vim Plug](https://github.com/junegunn/vim-plug) add following in your ~/.vimrc |  | ||||||
| 
 |  | ||||||
| ```sh |  | ||||||
| Plug 'nmaiti/fzf_cscope.vim' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### **key mappings** |  | ||||||
| 
 |  | ||||||
| Search options -  |  | ||||||
| ```sh |  | ||||||
| 's'   symbol: find all references to the token under cursor. |  | ||||||
| 'g'   global: find global definition(s) of the token under cursor |  | ||||||
| 'c'   calls:  find all calls to the function name under cursor. |  | ||||||
| 't'   text:   find all instances of the text under cursor. |  | ||||||
| 'e'   egrep:  egrep search for the word under cursor. |  | ||||||
| 'f'   file:   open the filename under cursor. |  | ||||||
| 'i'   includes: find files that include the filename under cursor. |  | ||||||
| 'd'   called: find functions that function under cursor calls. |  | ||||||
| 'a'   Assigned: Assigned to this symbol. |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ```shell |  | ||||||
| <Leader>k<search option key>  ------- search word/file under the current cursor |  | ||||||
| e.g.sc |  | ||||||
| <Leader>kc  -   find callers of current keyword/symbol |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| // Interactive cscope search |  | ||||||
| 
 |  | ||||||
| ```sh |  | ||||||
| <Leader><Leader>k<search option key>  ------- search something |  | ||||||
| e.g. |  | ||||||
| <Leader><Leader>ks  -   find symbol |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| **NOTE**: |  | ||||||
| 
 |  | ||||||
| 1. These key maps use multiple keystrokes (2 or 3 keys).  If you find that vim |  | ||||||
|    " keeps timing you out before you can complete them, try changing your timeout |  | ||||||
|    " settings, as explained below |  | ||||||
| 2. cscope_map.vim can also be used independently with it's own key mappings. If not csope_maps.vim is not present fzf_cscope.vim can use csope_maps.vim's keyboard shortcuts for convenience of programmers. |  | ||||||
|       In that case instead of '<Leader>k', '<Ctrl - \>' can be used. |  | ||||||
|   |  | ||||||
|  **Self promotion**: |  | ||||||
|   |  | ||||||
|  Try [zsh_vim config](https://github.com/nmaiti/zsh-vim-config/tree/to_plug) to_plug branch for latest vim features and plugins |  | ||||||
| 
 |  | ||||||
| @ -1,118 +0,0 @@ | |||||||
| """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |  | ||||||
| " CSCOPE settings for vim using popup and preview window |  | ||||||
| """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |  | ||||||
| " |  | ||||||
| " This file contains fzf shortcut for vim's cscope interface, |  | ||||||
| " with keyboard mappings. |  | ||||||
| " Prerequiites |  | ||||||
| " USAGE: |  | ||||||
| " -- vim 6:     Stick this file in your ~/.vim/plugin directory (or in a |  | ||||||
| "               'plugin' directory in some other directory that is in your |  | ||||||
| "               'runtimepath'. |  | ||||||
| " |  | ||||||
| " NOTE: |  | ||||||
| " These key maps use multiple keystrokes (2 or 3 keys).  If you find that vim |  | ||||||
| " keeps timing you out before you can complete them, try changing your timeout |  | ||||||
| " settings, as explained below. |  | ||||||
| " |  | ||||||
| " Happy cscoping, |  | ||||||
| " |  | ||||||
| " Nabendu Maiti       nbmaiti83@gmail.com     2021/3/14 |  | ||||||
| """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |  | ||||||
| 
 |  | ||||||
| function! Cscope(option, query, fullscreen) |  | ||||||
|     let color = '{ x = $1; $1 = ""; z = $3; $3 = ""; p = $2; $2 = "";  printf "\033[35m%s\033[0m:\033[32m%s\033[0m:\033[33;1m%s\033[0m:\033[34m%s\033[0m\n", x,z,p,$0;}' |  | ||||||
|     let command_fmt = "cscope -dL -%s %s %s %s '" |  | ||||||
| 
 |  | ||||||
|     let initial_command = printf(command_fmt, a:option, shellescape(a:query)," | awk '", color) |  | ||||||
|     let reload_command = printf(command_fmt, a:option, '{q}', " | awk '", color) |  | ||||||
|     let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]} |  | ||||||
|     call fzf#vim#grep(initial_command, 0, fzf#vim#with_preview(spec), a:fullscreen) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! CscopeQuery(option) |  | ||||||
|     call inputsave() |  | ||||||
|     if a:option == '0' |  | ||||||
|         let query = input('C Symbol: ') |  | ||||||
|     elseif a:option == '1' |  | ||||||
|         let query = input('Definition: ') |  | ||||||
|     elseif a:option == '2' |  | ||||||
|         let query = input('Functions calling: ') |  | ||||||
|     elseif a:option == '3' |  | ||||||
|         let query = input('Functions called by: ') |  | ||||||
|     elseif a:option == '4' |  | ||||||
|         let query = input('Text: ') |  | ||||||
|     elseif a:option == '6' |  | ||||||
|         let query = input('Egrep: ') |  | ||||||
|     elseif a:option == '7' |  | ||||||
|         let query = input('File: ') |  | ||||||
|     elseif a:option == '8' |  | ||||||
|         let query = input('Files #including: ') |  | ||||||
|     elseif a:option == '9' |  | ||||||
|         let query = input('Assignments to: ') |  | ||||||
|     else |  | ||||||
|         echo "Invalid option!" |  | ||||||
|         return |  | ||||||
|     endif |  | ||||||
|     call inputrestore() |  | ||||||
|     if query != "" |  | ||||||
|         call Cscope(a:option, query , 0) |  | ||||||
|     else |  | ||||||
|         echom "Cancelled Search!" |  | ||||||
|     endif |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| if mapcheck('<C-\>g') == "" |  | ||||||
|     "'s'   symbol: find all references to the token under cursor |  | ||||||
|     "'g'   global: find global definition(s) of the token under cursor |  | ||||||
|     "'c'   calls:  find all calls to the function name under cursor |  | ||||||
|     "'t'   text:   find all instances of the text under cursor |  | ||||||
|     "'e'   egrep:  egrep search for the word under cursor |  | ||||||
|     "'f'   file:   open the filename under cursor |  | ||||||
|     "'i'   includes: find files that include the filename under cursor |  | ||||||
|     "'d'   called: find functions that function under cursor calls |  | ||||||
|     "'a'   Assigned: Assigned to this symbol |  | ||||||
| 
 |  | ||||||
|     nnoremap <C-\>s :call Cscope('0', expand('<cword>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>g :call Cscope('1', expand('<cword>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>d :call Cscope('2', expand('<cword>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>c :call Cscope('3', expand('<cword>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>t :call Cscope('4', expand('<cword>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>e :call Cscope('6', expand('<cword>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>f :call Cscope('7', expand('<cfile>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>i :call Cscope('8', expand('<cfile>'), 0)<CR> |  | ||||||
|     nnoremap <C-\>a :call Cscope('9', expand('<cword>'), 0)<CR> |  | ||||||
| 
 |  | ||||||
|     nnoremap <C-\><C-\>s :call CscopeQuery('0')<CR> |  | ||||||
|     nnoremap <C-\><C-\>g :call CscopeQuery('1')<CR> |  | ||||||
|     nnoremap <C-\><C-\>d :call CscopeQuery('2')<CR> |  | ||||||
|     nnoremap <C-\><C-\>c :call CscopeQuery('3')<CR> |  | ||||||
|     nnoremap <C-\><C-\>t :call CscopeQuery('4')<CR> |  | ||||||
|     nnoremap <C-\><C-\>e :call CscopeQuery('6')<CR> |  | ||||||
|     nnoremap <C-\><C-\>f :call CscopeQuery('7')<CR> |  | ||||||
|     nnoremap <C-\><C-\>i :call CscopeQuery('8')<CR> |  | ||||||
|     nnoremap <C-\><C-\>a :call CscopeQuery('9')<CR> |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| " default and permanent key apping |  | ||||||
| nnoremap <silent> <Leader>ks :call Cscope('0', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>kg :call Cscope('1', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>kd :call Cscope('2', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>kc :call Cscope('3', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>kt :call Cscope('4', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>ke :call Cscope('6', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>kf :call Cscope('7', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>ki :call Cscope('8', expand('<cword>'), 0)<CR> |  | ||||||
| nnoremap <silent> <Leader>ka :call Cscope('9', expand('<cword>'), 0)<CR> |  | ||||||
| 
 |  | ||||||
| nnoremap <silent> <Leader><Leader>ks :call CscopeQuery('0')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>kg :call CscopeQuery('1')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>kd :call CscopeQuery('2')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>kc :call CscopeQuery('3')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>kt :call CscopeQuery('4')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>ke :call CscopeQuery('6')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>kf :call CscopeQuery('7')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>ki :call CscopeQuery('8')<CR> |  | ||||||
| nnoremap <silent> <Leader><Leader>ka :call CscopeQuery('9')<CR> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 184 KiB | 
| @ -1,66 +0,0 @@ | |||||||
| fzf-tags |  | ||||||
| ======== |  | ||||||
| 
 |  | ||||||
| `fzf-tags` bridges the gap between tags and fzf.vim. |  | ||||||
| 
 |  | ||||||
| It combines `:tag` and `:tselect` into a single improved command. |  | ||||||
| 
 |  | ||||||
| `:FZFTags` looks up the identifier under the cursor. |  | ||||||
| - If there are 0 or 1 definitions, the behavior is same as `:tag`. |  | ||||||
| - When there are multiple definitions, the results are piped to fzf for |  | ||||||
|   interactive filtering (https://github.com/junegunn/fzf#search-syntax). |  | ||||||
| 
 |  | ||||||
| `:FZFTselect` behaves just like `:tselect`. |  | ||||||
| - Loads the tags matching the argument into an FZF window. |  | ||||||
| - If no argument is provided, the last tag on the tag-stack is used. |  | ||||||
| 
 |  | ||||||
| This plugin uses the built-in `:tag` command under the hood, which |  | ||||||
| yields a couple benefits. |  | ||||||
| 
 |  | ||||||
| - Tag stack management works as expected (CTRL-T or `:pop` return you |  | ||||||
|   to your previous location). |  | ||||||
| - Tag priority works as expected (`:help tag-priority`). |  | ||||||
| 
 |  | ||||||
| Installation |  | ||||||
| ------------ |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| Plug 'zackhsi/fzf-tags' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Configuration |  | ||||||
| ------------- |  | ||||||
| 
 |  | ||||||
| ### Mappings |  | ||||||
| 
 |  | ||||||
| `fzf-tags` exposes the `<Plug>(fzf_tags)` mapping. |  | ||||||
| 
 |  | ||||||
| To override the default jump-to-tag binding: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| nmap <C-]> <Plug>(fzf_tags) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Additionally, `fzf-tags` exposes a fuzzy `:tselect`. To replace the default `:ts`: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| noreabbrev <expr> ts getcmdtype() == ":" && getcmdline() == 'ts' ? 'FZFTselect' : 'ts' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Prompt |  | ||||||
| 
 |  | ||||||
| To replace the default prompt `🔎`: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| let g:fzf_tags_prompt = "Gd " |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Layout |  | ||||||
| 
 |  | ||||||
| `fzf-tags` respects the global |  | ||||||
| [`g:fzf_layout`](https://github.com/junegunn/fzf/blob/master/README-VIM.md#configuration) |  | ||||||
| setting. For example: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'highlight': 'Comment' } } |  | ||||||
| ``` |  | ||||||
| @ -1,128 +0,0 @@ | |||||||
| scriptencoding utf-8 |  | ||||||
| 
 |  | ||||||
| let s:default_fzf_tags_prompt = ' 🔎 ' |  | ||||||
| let s:fzf_tags_prompt = get(g:, 'fzf_tags_prompt', s:default_fzf_tags_prompt) |  | ||||||
| 
 |  | ||||||
| let s:default_fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } |  | ||||||
| let s:fzf_layout = get(g:, 'fzf_layout', s:default_fzf_layout) |  | ||||||
| 
 |  | ||||||
| let s:actions = { |  | ||||||
|   \ 'ctrl-t': 'tab split', |  | ||||||
|   \ 'ctrl-x': 'split', |  | ||||||
|   \ 'ctrl-v': 'vsplit' } |  | ||||||
| 
 |  | ||||||
| function! fzf_tags#SelectCommand(identifier) |  | ||||||
|   let identifier = empty(a:identifier) ? s:tagstack_head() : a:identifier |  | ||||||
|   if empty(identifier) |  | ||||||
|     echohl Error |  | ||||||
|     echo "Tag stack empty" |  | ||||||
|     echohl None |  | ||||||
|   else |  | ||||||
|     call fzf_tags#Find(identifier) |  | ||||||
|   endif |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! fzf_tags#FindCommand(identifier) |  | ||||||
|   return fzf_tags#Find(empty(a:identifier) ? expand('<cword>') : a:identifier) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! fzf_tags#Find(identifier) |  | ||||||
|   let identifier = s:strip_leading_bangs(a:identifier) |  | ||||||
|   let source_lines = s:source_lines(identifier) |  | ||||||
| 
 |  | ||||||
|   if len(source_lines) == 0 |  | ||||||
|     echohl WarningMsg |  | ||||||
|     echo 'Tag not found: ' . identifier |  | ||||||
|     echohl None |  | ||||||
|   elseif len(source_lines) == 1 |  | ||||||
|     execute 'tag' identifier |  | ||||||
|   else |  | ||||||
|     let expect_keys = join(keys(s:actions), ',') |  | ||||||
|     let run_spec = { |  | ||||||
|           \ 'source': source_lines, |  | ||||||
|           \ 'sink*': function('s:sink', [identifier]), |  | ||||||
|           \ 'options': '--expect=' . expect_keys . ' --ansi --no-sort --tiebreak index --prompt "' . s:fzf_tags_prompt . '\"' . identifier . '\" > "', |  | ||||||
|           \ } |  | ||||||
|     let final_run_spec = extend(run_spec, s:fzf_layout) |  | ||||||
|     call fzf#run(final_run_spec) |  | ||||||
|   endif |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:tagstack_head() |  | ||||||
|   let stack = gettagstack() |  | ||||||
|   return stack.length != 0 ? stack.items[-1].tagname : "" |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:tagsearch_string(identifier) |  | ||||||
|   return '^' . a:identifier . '$' |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:strip_leading_bangs(identifier) |  | ||||||
|   if (a:identifier[0] !=# '!') |  | ||||||
|     return a:identifier |  | ||||||
|   else |  | ||||||
|     return s:strip_leading_bangs(a:identifier[1:]) |  | ||||||
|   endif |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:source_lines(identifier) |  | ||||||
|   let tagstring = s:tagsearch_string(a:identifier) |  | ||||||
|   let relevant_fields = map( |  | ||||||
|   \   taglist(tagstring, expand('%:p')), |  | ||||||
|   \   function('s:tag_to_string') |  | ||||||
|   \ ) |  | ||||||
|   return map(s:align_lists(relevant_fields), 'join(v:val, " ")') |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:tag_to_string(index, tag_dict) |  | ||||||
|   let components = [a:index + 1] |  | ||||||
|   if has_key(a:tag_dict, 'filename') |  | ||||||
|     call add(components, s:magenta(a:tag_dict['filename'])) |  | ||||||
|   endif |  | ||||||
|   if has_key(a:tag_dict, 'class') |  | ||||||
|     call add(components, s:green(a:tag_dict['class'])) |  | ||||||
|   endif |  | ||||||
|   if has_key(a:tag_dict, 'cmd') |  | ||||||
|     call add(components, s:red(a:tag_dict['cmd'])) |  | ||||||
|   endif |  | ||||||
|   return components |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:align_lists(lists) |  | ||||||
|   let maxes = {} |  | ||||||
|   for list in a:lists |  | ||||||
|     let i = 0 |  | ||||||
|     while i < len(list) |  | ||||||
|       let maxes[i] = max([get(maxes, i, 0), len(list[i])]) |  | ||||||
|       let i += 1 |  | ||||||
|     endwhile |  | ||||||
|   endfor |  | ||||||
|   for list in a:lists |  | ||||||
|     call map(list, "printf('%-'.maxes[v:key].'s', v:val)") |  | ||||||
|   endfor |  | ||||||
|   return a:lists |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:sink(identifier, selection) |  | ||||||
|   let selected_with_key = a:selection[0] |  | ||||||
|   let selected_text = a:selection[1] |  | ||||||
| 
 |  | ||||||
|   " Open new split or tab. |  | ||||||
|   if has_key(s:actions, selected_with_key) |  | ||||||
|     execute 'silent' s:actions[selected_with_key] |  | ||||||
|   endif |  | ||||||
| 
 |  | ||||||
|   " Go to tag! |  | ||||||
|   let l:count = split(selected_text)[0] |  | ||||||
|   execute l:count . 'tag /' . s:tagsearch_string(a:identifier) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:green(s) |  | ||||||
|   return "\033[32m" . a:s . "\033[m" |  | ||||||
| endfunction |  | ||||||
| function! s:magenta(s) |  | ||||||
|   return "\033[35m" . a:s . "\033[m" |  | ||||||
| endfunction |  | ||||||
| function! s:red(s) |  | ||||||
|   return "\033[31m" . a:s . "\033[m" |  | ||||||
| endfunction |  | ||||||
| @ -1,3 +0,0 @@ | |||||||
| command! -nargs=? -bar FZFTags :call fzf_tags#FindCommand(<q-args>) |  | ||||||
| command! -nargs=? -bar FZFTselect :call fzf_tags#SelectCommand(<q-args>) |  | ||||||
| nnoremap <silent> <Plug>(fzf_tags) :FZFTags<Return> |  | ||||||
| @ -1,21 +0,0 @@ | |||||||
| MIT License |  | ||||||
| 
 |  | ||||||
| Copyright (c) 2021 Junegunn Choi |  | ||||||
| 
 |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| of this software and associated documentation files (the "Software"), to deal |  | ||||||
| in the Software without restriction, including without limitation the rights |  | ||||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| copies of the Software, and to permit persons to whom the Software is |  | ||||||
| furnished to do so, subject to the following conditions: |  | ||||||
| 
 |  | ||||||
| The above copyright notice and this permission notice shall be included in all |  | ||||||
| copies or substantial portions of the Software. |  | ||||||
| 
 |  | ||||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| SOFTWARE. |  | ||||||
| @ -1,443 +0,0 @@ | |||||||
| fzf :heart: vim |  | ||||||
| =============== |  | ||||||
| 
 |  | ||||||
| Things you can do with [fzf][fzf] and Vim. |  | ||||||
| 
 |  | ||||||
| Rationale |  | ||||||
| --------- |  | ||||||
| 
 |  | ||||||
| [fzf][fzf] itself is not a Vim plugin, and the official repository only |  | ||||||
| provides the [basic wrapper function][run] for Vim. It's up to the users to |  | ||||||
| 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" |  | ||||||
| implementation of the features they can find in the alternative Vim plugins. |  | ||||||
| 
 |  | ||||||
| Why you should use fzf on Vim |  | ||||||
| ----------------------------- |  | ||||||
| 
 |  | ||||||
| Because you can and you love fzf. |  | ||||||
| 
 |  | ||||||
| fzf runs asynchronously and can be orders of magnitude faster than similar Vim |  | ||||||
| plugins. However, the benefit may not be noticeable if the size of the input |  | ||||||
| is small, which is the case for many of the commands provided here. |  | ||||||
| Nevertheless I wrote them anyway since it's really easy to implement custom |  | ||||||
| selector with fzf. |  | ||||||
| 
 |  | ||||||
| Installation |  | ||||||
| ------------ |  | ||||||
| 
 |  | ||||||
| fzf.vim depends on the basic Vim plugin of [the main fzf |  | ||||||
| repository][fzf-main], which means you need to **set up both "fzf" and |  | ||||||
| "fzf.vim" on Vim**. To learn more about fzf/Vim integration, see |  | ||||||
| [README-VIM][README-VIM]. |  | ||||||
| 
 |  | ||||||
| [fzf-main]: https://github.com/junegunn/fzf |  | ||||||
| [README-VIM]: https://github.com/junegunn/fzf/blob/master/README-VIM.md |  | ||||||
| 
 |  | ||||||
| ### Using [vim-plug](https://github.com/junegunn/vim-plug) |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } |  | ||||||
| Plug 'junegunn/fzf.vim' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| `fzf#install()` makes sure that you have the latest binary, but it's optional, |  | ||||||
| so you can omit it if you use a plugin manager that doesn't support hooks. |  | ||||||
| 
 |  | ||||||
| ### Dependencies |  | ||||||
| 
 |  | ||||||
| - [fzf][fzf-main] 0.41.1 or above |  | ||||||
| - For syntax-highlighted preview, install [bat](https://github.com/sharkdp/bat) |  | ||||||
| - If [delta](https://github.com/dandavison/delta) is available, `GF?`, |  | ||||||
|   `Commits` and `BCommits` will use it to format `git diff` output. |  | ||||||
| - `Ag` requires [The Silver Searcher (ag)][ag] |  | ||||||
| - `Rg` requires [ripgrep (rg)][rg] |  | ||||||
| - `Tags` and `Helptags` require Perl |  | ||||||
| 
 |  | ||||||
| Commands |  | ||||||
| -------- |  | ||||||
| 
 |  | ||||||
| | Command                | List                                                                                  | |  | ||||||
| | ---                    | ---                                                                                   | |  | ||||||
| | `:Files [PATH]`        | Files (runs `$FZF_DEFAULT_COMMAND` if defined)                                        | |  | ||||||
| | `:GFiles [OPTS]`       | Git files (`git ls-files`)                                                            | |  | ||||||
| | `:GFiles?`             | 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)               | |  | ||||||
| | `:Rg [PATTERN]`        | [rg][rg] search result (`ALT-A` to select all, `ALT-D` to deselect all)               | |  | ||||||
| | `:RG [PATTERN]`        | [rg][rg] search result; relaunch ripgrep on every keystroke                           | |  | ||||||
| | `:Lines [QUERY]`       | Lines in loaded buffers                                                               | |  | ||||||
| | `:BLines [QUERY]`      | Lines in the current buffer                                                           | |  | ||||||
| | `:Tags [QUERY]`        | Tags in the project (`ctags -R`)                                                      | |  | ||||||
| | `:BTags [QUERY]`       | Tags in the current buffer                                                            | |  | ||||||
| | `:Changes`             | Changelist across all open buffers                                                    | |  | ||||||
| | `:Marks`               | Marks                                                                                 | |  | ||||||
| | `:Jumps`               | Jumps                                                                                 | |  | ||||||
| | `:Windows`             | Windows                                                                               | |  | ||||||
| | `:Locate PATTERN`      | `locate` command output                                                               | |  | ||||||
| | `:History`             | `v:oldfiles` and open buffers                                                         | |  | ||||||
| | `:History:`            | Command history                                                                       | |  | ||||||
| | `:History/`            | Search history                                                                        | |  | ||||||
| | `:Snippets`            | Snippets ([UltiSnips][us])                                                            | |  | ||||||
| | `:Commits [LOG_OPTS]`  | Git commits (requires [fugitive.vim][f])                                              | |  | ||||||
| | `:BCommits [LOG_OPTS]` | Git commits for the current buffer; visual-select lines to track changes in the range | |  | ||||||
| | `:Commands`            | Commands                                                                              | |  | ||||||
| | `:Maps`                | Normal mode mappings                                                                  | |  | ||||||
| | `:Helptags`            | Help tags <sup id="a1">[1](#helptags)</sup>                                           | |  | ||||||
| | `:Filetypes`           | File types |  | ||||||
| 
 |  | ||||||
| - 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 |  | ||||||
| - Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen |  | ||||||
| - You can set `g:fzf_vim.command_prefix` to give the same prefix to the commands |  | ||||||
|     - e.g. `let g:fzf_vim.command_prefix = 'Fzf'` and you have `FzfFiles`, etc. |  | ||||||
| 
 |  | ||||||
| (<a name="helptags">1</a>: `Helptags` will shadow the command of the same name |  | ||||||
| from [pathogen][pat]. But its functionality is still available via `call |  | ||||||
| pathogen#helptags()`. [↩](#a1)) |  | ||||||
| 
 |  | ||||||
| [pat]: https://github.com/tpope/vim-pathogen |  | ||||||
| [f]:   https://github.com/tpope/vim-fugitive |  | ||||||
| 
 |  | ||||||
| Customization |  | ||||||
| ------------- |  | ||||||
| 
 |  | ||||||
| ### Configuration options of the base plugin |  | ||||||
| 
 |  | ||||||
| Every command in fzf.vim internally calls `fzf#wrap` function of the main |  | ||||||
| repository which supports a set of global option variables. So please read |  | ||||||
| through [README-VIM][README-VIM] to learn more about them. |  | ||||||
| 
 |  | ||||||
| ### Configuration options for fzf.vim |  | ||||||
| 
 |  | ||||||
| All configuration values for this plugin are stored in `g:fzf_vim` dictionary, |  | ||||||
| so **make sure to initialize it before assigning any configuration values to |  | ||||||
| it**. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Initialize configuration dictionary |  | ||||||
| let g:fzf_vim = {} |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| #### Preview window |  | ||||||
| 
 |  | ||||||
| Some commands will show the preview window on the right. You can customize the |  | ||||||
| behavior with `g:fzf_vim.preview_window`. Here are some examples: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " This is the default option: |  | ||||||
| "   - Preview window on the right with 50% width |  | ||||||
| "   - CTRL-/ will toggle preview window. |  | ||||||
| " - Note that this array is passed as arguments to fzf#vim#with_preview function. |  | ||||||
| " - To learn more about preview window options, see `--preview-window` section of `man fzf`. |  | ||||||
| let g:fzf_vim.preview_window = ['right,50%', 'ctrl-/'] |  | ||||||
| 
 |  | ||||||
| " Preview window is hidden by default. You can toggle it with ctrl-/. |  | ||||||
| " It will show on the right with 50% width, but if the width is smaller |  | ||||||
| " than 70 columns, it will show above the candidate list |  | ||||||
| let g:fzf_vim.preview_window = ['hidden,right,50%,<70(up,40%)', 'ctrl-/'] |  | ||||||
| 
 |  | ||||||
| " Empty value to disable preview window altogether |  | ||||||
| let g:fzf_vim.preview_window = [] |  | ||||||
| 
 |  | ||||||
| " fzf.vim needs bash to display the preview window. |  | ||||||
| " On Windows, fzf.vim will first see if bash is in $PATH, then if |  | ||||||
| " Git bash (C:\Program Files\Git\bin\bash.exe) is available. |  | ||||||
| " If you want it to use a different bash, set this variable. |  | ||||||
| "   let g:fzf_vim = {} |  | ||||||
| "   let g:fzf_vim.preview_bash = 'C:\Git\bin\bash.exe' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| #### Command-level options |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " [Buffers] Jump to the existing window if possible |  | ||||||
| let g:fzf_vim.buffers_jump = 1 |  | ||||||
| 
 |  | ||||||
| " [[B]Commits] Customize the options used by 'git log': |  | ||||||
| let g:fzf_vim.commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' |  | ||||||
| 
 |  | ||||||
| " [Tags] Command to generate tags file |  | ||||||
| let g:fzf_vim.tags_command = 'ctags -R' |  | ||||||
| 
 |  | ||||||
| " [Commands] --expect expression for directly executing the command |  | ||||||
| let g:fzf_vim.commands_expect = 'alt-enter,ctrl-x' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| #### List type to handle multiple selections |  | ||||||
| 
 |  | ||||||
| The following commands will fill the quickfix list when multiple entries are |  | ||||||
| selected. |  | ||||||
| 
 |  | ||||||
| * `Ag` |  | ||||||
| * `Rg` / `RG` |  | ||||||
| * `Lines` / `BLines` |  | ||||||
| * `Tags` / `BTags` |  | ||||||
| 
 |  | ||||||
| By setting `g:fzf_vim.listproc`, you can make them use location list instead. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Default: Use quickfix list |  | ||||||
| let g:fzf_vim.listproc = { list -> fzf#vim#listproc#quickfix(list) } |  | ||||||
| 
 |  | ||||||
| " Use location list instead of quickfix list |  | ||||||
| let g:fzf_vim.listproc = { list -> fzf#vim#listproc#location(list) } |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| You can customize the list type per command by defining variables named |  | ||||||
| `g:fzf_vim.listproc_{command_name_in_lowercase}`. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Command-wise customization |  | ||||||
| let g:fzf_vim.listproc_ag = { list -> fzf#vim#listproc#quickfix(list) } |  | ||||||
| let g:fzf_vim.listproc_rg = { list -> fzf#vim#listproc#location(list) } |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| You can further customize the behavior by providing a custom function to |  | ||||||
| process the list instead of using the predefined `fzf#vim#listproc#quickfix` |  | ||||||
| or `fzf#vim#listproc#location`. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " A customized version of fzf#vim#listproc#quickfix. |  | ||||||
| " The last two lines are commented out not to move to the first entry. |  | ||||||
| function! g:fzf_vim.listproc(list) |  | ||||||
|   call setqflist(a:list) |  | ||||||
|   copen |  | ||||||
|   wincmd p |  | ||||||
|   " cfirst |  | ||||||
|   " normal! zvzz |  | ||||||
| endfunction |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Advanced customization |  | ||||||
| 
 |  | ||||||
| #### Vim functions |  | ||||||
| 
 |  | ||||||
| Each command in fzf.vim is backed by a Vim function. You can override |  | ||||||
| a command or define a variation of it by calling its corresponding function. |  | ||||||
| 
 |  | ||||||
| | Command   | Vim function                                                                     | |  | ||||||
| | ---       | ---                                                                              | |  | ||||||
| | `Files`   | `fzf#vim#files(dir, [spec dict], [fullscreen bool])`                             | |  | ||||||
| | `GFiles`  | `fzf#vim#gitfiles(git_options, [spec dict], [fullscreen bool])`                  | |  | ||||||
| | `GFiles?` | `fzf#vim#gitfiles('?', [spec dict], [fullscreen bool])`                          | |  | ||||||
| | `Buffers` | `fzf#vim#buffers([query string], [bufnrs list], [spec dict], [fullscreen bool])` | |  | ||||||
| | `Colors`  | `fzf#vim#colors([spec dict], [fullscreen bool])`                                 | |  | ||||||
| | `Rg`      | `fzf#vim#grep(command, [spec dict], [fullscreen bool])`                          | |  | ||||||
| | `RG`      | `fzf#vim#grep2(command_prefix, query, [spec dict], [fullscreen bool])`           | |  | ||||||
| | ...       | ...                                                                              | |  | ||||||
| 
 |  | ||||||
| (We can see that the last two optional arguments of each function are |  | ||||||
| identical. They are directly passed to `fzf#wrap` function. If you haven't |  | ||||||
| read [README-VIM][README-VIM] already, please read it before proceeding.) |  | ||||||
| 
 |  | ||||||
| #### Example: Customizing `Files` command |  | ||||||
| 
 |  | ||||||
| This is the default definition of `Files` command: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=? -complete=dir Files call fzf#vim#files(<q-args>, <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Let's say you want to a variation of it called `ProjectFiles` that only |  | ||||||
| searches inside `~/projects` directory. Then you can do it like this: |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang ProjectFiles call fzf#vim#files('~/projects', <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Or, if you want to override the command with different fzf options, just pass |  | ||||||
| a custom spec to the function. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=? -complete=dir Files |  | ||||||
|     \ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline']}, <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Want a preview window? |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=? -complete=dir Files |  | ||||||
|     \ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| It kind of works, but you probably want a nicer previewer program than `cat`. |  | ||||||
| fzf.vim ships [a versatile preview script](bin/preview.sh) you can readily |  | ||||||
| use. It internally executes [bat](https://github.com/sharkdp/bat) for syntax |  | ||||||
| highlighting, so make sure to install it. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=? -complete=dir Files |  | ||||||
|     \ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', '~/.vim/plugged/fzf.vim/bin/preview.sh {}']}, <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| However, it's not ideal to hard-code the path to the script which can be |  | ||||||
| different in different circumstances. So in order to make it easier to set up |  | ||||||
| the previewer, fzf.vim provides `fzf#vim#with_preview` helper function. |  | ||||||
| Similarly to `fzf#wrap`, it takes a spec dictionary and returns a copy of it |  | ||||||
| with additional preview options. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=? -complete=dir Files |  | ||||||
|     \ call fzf#vim#files(<q-args>, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| You can just omit the spec argument if you only want the previewer. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=? -complete=dir Files |  | ||||||
|     \ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| #### Example: `git grep` wrapper |  | ||||||
| 
 |  | ||||||
| The following example implements `GGrep` command that works similarly to |  | ||||||
| predefined `Ag` or `Rg` using `fzf#vim#grep`. |  | ||||||
| 
 |  | ||||||
| - We set the base directory to git root by setting `dir` attribute in spec |  | ||||||
|   dictionary. |  | ||||||
| - [The preview script](bin/preview.sh) supports `grep` format |  | ||||||
|   (`FILE_PATH:LINE_NO:...`), so we can just wrap the spec with |  | ||||||
|   `fzf#vim#with_preview` as before to enable previewer. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| command! -bang -nargs=* GGrep |  | ||||||
|   \ call fzf#vim#grep( |  | ||||||
|   \   'git grep --line-number -- '.fzf#shellescape(<q-args>), |  | ||||||
|   \   fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Mappings |  | ||||||
| -------- |  | ||||||
| 
 |  | ||||||
| | Mapping                            | Description                               | |  | ||||||
| | ---                                | ---                                       | |  | ||||||
| | `<plug>(fzf-maps-n)`               | Normal mode mappings                      | |  | ||||||
| | `<plug>(fzf-maps-i)`               | Insert mode mappings                      | |  | ||||||
| | `<plug>(fzf-maps-x)`               | Visual mode mappings                      | |  | ||||||
| | `<plug>(fzf-maps-o)`               | Operator-pending mappings                 | |  | ||||||
| | `<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-line)`        | Line completion (all open buffers)        | |  | ||||||
| | `<plug>(fzf-complete-buffer-line)` | Line completion (current buffer only)     | |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Mapping selecting mappings |  | ||||||
| nmap <leader><tab> <plug>(fzf-maps-n) |  | ||||||
| xmap <leader><tab> <plug>(fzf-maps-x) |  | ||||||
| omap <leader><tab> <plug>(fzf-maps-o) |  | ||||||
| 
 |  | ||||||
| " Insert mode completion |  | ||||||
| imap <c-x><c-k> <plug>(fzf-complete-word) |  | ||||||
| imap <c-x><c-f> <plug>(fzf-complete-path) |  | ||||||
| imap <c-x><c-l> <plug>(fzf-complete-line) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Completion functions |  | ||||||
| -------------------- |  | ||||||
| 
 |  | ||||||
| | Function                                 | Description                           | |  | ||||||
| | ---                                      | ---                                   | |  | ||||||
| | `fzf#vim#complete#path(command, [spec])` | Path completion                       | |  | ||||||
| | `fzf#vim#complete#word([spec])`          | Word completion                       | |  | ||||||
| | `fzf#vim#complete#line([spec])`          | Line completion (all open buffers)    | |  | ||||||
| | `fzf#vim#complete#buffer_line([spec])`   | Line completion (current buffer only) | |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Path completion with custom source command |  | ||||||
| inoremap <expr> <c-x><c-f> fzf#vim#complete#path('fd') |  | ||||||
| inoremap <expr> <c-x><c-f> fzf#vim#complete#path('rg --files') |  | ||||||
| 
 |  | ||||||
| " Word completion with custom spec with popup layout option |  | ||||||
| inoremap <expr> <c-x><c-k> fzf#vim#complete#word({'window': { 'width': 0.2, 'height': 0.9, 'xoffset': 1 }}) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Custom completion |  | ||||||
| ----------------- |  | ||||||
| 
 |  | ||||||
| `fzf#vim#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 as the source. |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Replace the default dictionary completion with fzf-based fuzzy completion |  | ||||||
| inoremap <expr> <c-x><c-k> fzf#vim#complete('cat /usr/share/dict/words') |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| For advanced uses, you can pass an options dictionary to the function. The set |  | ||||||
| of options is pretty much identical to that for `fzf#run` only with the |  | ||||||
| following exceptions: |  | ||||||
| 
 |  | ||||||
| - `reducer` (funcref) |  | ||||||
|     - Reducer transforms the output lines of fzf into a single string value |  | ||||||
| - `prefix` (string or funcref; default: `\k*$`) |  | ||||||
|     - Regular expression pattern to extract the completion prefix |  | ||||||
|     - Or a function to extract completion prefix |  | ||||||
| - Both `source` and `options` can be given as funcrefs that take the |  | ||||||
|   completion prefix as the argument and return the final value |  | ||||||
| - `sink` or `sink*` are ignored |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| " Global line completion (not just open buffers. ripgrep required.) |  | ||||||
| inoremap <expr> <c-x><c-l> fzf#vim#complete(fzf#wrap({ |  | ||||||
|   \ 'prefix': '^.*$', |  | ||||||
|   \ 'source': 'rg -n ^ --color always', |  | ||||||
|   \ 'options': '--ansi --delimiter : --nth 3..', |  | ||||||
|   \ 'reducer': { lines -> join(split(lines[0], ':\zs')[2:], '') }})) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Reducer example |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| function! s:make_sentence(lines) |  | ||||||
|   return substitute(join(a:lines), '^.', '\=toupper(submatch(0))', '').'.' |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| inoremap <expr> <c-x><c-s> fzf#vim#complete({ |  | ||||||
|   \ 'source':  'cat /usr/share/dict/words', |  | ||||||
|   \ 'reducer': function('<sid>make_sentence'), |  | ||||||
|   \ 'options': '--multi --reverse --margin 15%,0', |  | ||||||
|   \ 'left':    20}) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Status line of terminal buffer |  | ||||||
| ------------------------------ |  | ||||||
| 
 |  | ||||||
| When fzf starts in a terminal buffer (see [fzf/README-VIM.md][termbuf]), you |  | ||||||
| may want to customize the statusline of the containing buffer. |  | ||||||
| 
 |  | ||||||
| [termbuf]: https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzf-inside-terminal-buffer |  | ||||||
| 
 |  | ||||||
| ### Hide statusline |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| autocmd! FileType fzf set laststatus=0 noshowmode noruler |  | ||||||
|   \| autocmd BufLeave <buffer> set laststatus=2 showmode ruler |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Custom statusline |  | ||||||
| 
 |  | ||||||
| ```vim |  | ||||||
| function! s:fzf_statusline() |  | ||||||
|   " Override statusline as you like |  | ||||||
|   highlight fzf1 ctermfg=161 ctermbg=251 |  | ||||||
|   highlight fzf2 ctermfg=23 ctermbg=251 |  | ||||||
|   highlight fzf3 ctermfg=237 ctermbg=251 |  | ||||||
|   setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| autocmd! User FzfStatusLine call <SID>fzf_statusline() |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| License |  | ||||||
| ------- |  | ||||||
| 
 |  | ||||||
| MIT |  | ||||||
| 
 |  | ||||||
| [fzf]:   https://github.com/junegunn/fzf |  | ||||||
| [run]:   https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzfrun |  | ||||||
| [ag]:    https://github.com/ggreer/the_silver_searcher |  | ||||||
| [rg]:    https://github.com/BurntSushi/ripgrep |  | ||||||
| [us]:    https://github.com/SirVer/ultisnips |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,164 +0,0 @@ | |||||||
| " Copyright (c) 2015 Junegunn Choi |  | ||||||
| " |  | ||||||
| " MIT License |  | ||||||
| " |  | ||||||
| " Permission is hereby granted, free of charge, to any person obtaining |  | ||||||
| " a copy of this software and associated documentation files (the |  | ||||||
| " "Software"), to deal in the Software without restriction, including |  | ||||||
| " without limitation the rights to use, copy, modify, merge, publish, |  | ||||||
| " distribute, sublicense, and/or sell copies of the Software, and to |  | ||||||
| " permit persons to whom the Software is furnished to do so, subject to |  | ||||||
| " the following conditions: |  | ||||||
| " |  | ||||||
| " The above copyright notice and this permission notice shall be |  | ||||||
| " included in all copies or substantial portions of the Software. |  | ||||||
| " |  | ||||||
| " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
| " EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
| " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
| " NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |  | ||||||
| " LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |  | ||||||
| " OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |  | ||||||
| " WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
| let s:cpo_save = &cpo |  | ||||||
| set cpo&vim |  | ||||||
| let s:is_win = has('win32') || has('win64') |  | ||||||
| 
 |  | ||||||
| function! s:extend(base, extra) |  | ||||||
|   let base = copy(a:base) |  | ||||||
|   if has_key(a:extra, 'options') |  | ||||||
|     let extra = copy(a:extra) |  | ||||||
|     let extra.extra_options = remove(extra, 'options') |  | ||||||
|     return extend(base, extra) |  | ||||||
|   endif |  | ||||||
|   return extend(base, a:extra) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| if v:version >= 704 |  | ||||||
|   function! s:function(name) |  | ||||||
|     return function(a:name) |  | ||||||
|   endfunction |  | ||||||
| else |  | ||||||
|   function! s:function(name) |  | ||||||
|     " By Ingo Karkat |  | ||||||
|     return function(substitute(a:name, '^s:', matchstr(expand('<sfile>'), '<SNR>\d\+_\zefunction$'), '')) |  | ||||||
|   endfunction |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| function! fzf#vim#complete#word(...) |  | ||||||
|   let sources = empty(&dictionary) ? ['/usr/share/dict/words'] : split(&dictionary, ',') |  | ||||||
|   return fzf#vim#complete(s:extend({ |  | ||||||
|     \ 'source': 'cat ' . join(map(sources, 'fzf#shellescape(v:val)'))}, |  | ||||||
|     \ get(a:000, 0, fzf#wrap()))) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| " ---------------------------------------------------------------------------- |  | ||||||
| " <plug>(fzf-complete-path) |  | ||||||
| " <plug>(fzf-complete-file) |  | ||||||
| " <plug>(fzf-complete-file-ag) |  | ||||||
| " ---------------------------------------------------------------------------- |  | ||||||
| function! s:file_split_prefix(prefix) |  | ||||||
|   let expanded = expand(a:prefix) |  | ||||||
|   let slash = (s:is_win && !&shellslash) ? '\\' : '/' |  | ||||||
|   return isdirectory(expanded) ? |  | ||||||
|     \ [expanded, |  | ||||||
|     \  substitute(a:prefix, '[/\\]*$', slash, ''), |  | ||||||
|     \  ''] : |  | ||||||
|     \ [fnamemodify(expanded, ':h'), |  | ||||||
|     \  substitute(fnamemodify(a:prefix, ':h'), '[/\\]*$', slash, ''), |  | ||||||
|     \  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", |  | ||||||
|     \ fzf#shellescape(dir), fzf#shellescape('s:^:'.(empty(a:prefix) || a:prefix == tail ? '' : head).':')) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:file_options(prefix) |  | ||||||
|   let [_, head, tail] = s:file_split_prefix(a:prefix) |  | ||||||
|   return ['--prompt', head, '--query', tail] |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:fname_prefix(str) |  | ||||||
|   let isf = &isfname |  | ||||||
|   let white = [] |  | ||||||
|   let black = [] |  | ||||||
|   if isf =~ ',,,' |  | ||||||
|     call add(white, ',') |  | ||||||
|     let isf = substitute(isf, ',,,', ',', 'g') |  | ||||||
|   endif |  | ||||||
|   if isf =~ ',^,,' |  | ||||||
|     call add(black, ',') |  | ||||||
|     let isf = substitute(isf, ',^,,', ',', 'g') |  | ||||||
|   endif |  | ||||||
| 
 |  | ||||||
|   for token in split(isf, ',') |  | ||||||
|     let target = white |  | ||||||
|     if token[0] == '^' |  | ||||||
|       let target = black |  | ||||||
|       let token = token[1:] |  | ||||||
|     endif |  | ||||||
| 
 |  | ||||||
|     let ends = matchlist(token, '\(.\+\)-\(.\+\)') |  | ||||||
|     if empty(ends) |  | ||||||
|       call add(target, token) |  | ||||||
|     else |  | ||||||
|       let ends = map(ends[1:2], "len(v:val) == 1 ? char2nr(v:val) : str2nr(v:val)") |  | ||||||
|       for i in range(ends[0], ends[1]) |  | ||||||
|         call add(target, nr2char(i)) |  | ||||||
|       endfor |  | ||||||
|     endif |  | ||||||
|   endfor |  | ||||||
| 
 |  | ||||||
|   let prefix = a:str |  | ||||||
|   for offset in range(1, len(a:str)) |  | ||||||
|     let char = a:str[len(a:str) - offset] |  | ||||||
|     if (char =~ '\w' || index(white, char) >= 0) && index(black, char) < 0 |  | ||||||
|       continue |  | ||||||
|     endif |  | ||||||
|     let prefix = strpart(a:str, len(a:str) - offset + 1) |  | ||||||
|     break |  | ||||||
|   endfor |  | ||||||
| 
 |  | ||||||
|   return prefix |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! fzf#vim#complete#path(command, ...) |  | ||||||
|   let s:file_cmd = a:command |  | ||||||
|   return fzf#vim#complete(s:extend({ |  | ||||||
|   \ 'prefix':  s:function('s:fname_prefix'), |  | ||||||
|   \ 'source':  s:function('s:file_source'), |  | ||||||
|   \ 'options': s:function('s:file_options')}, get(a:000, 0, fzf#wrap()))) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| " ---------------------------------------------------------------------------- |  | ||||||
| " <plug>(fzf-complete-line) |  | ||||||
| " <plug>(fzf-complete-buffer-line) |  | ||||||
| " ---------------------------------------------------------------------------- |  | ||||||
| function! s:reduce_line(lines) |  | ||||||
|   return join(split(a:lines[0], '\t\zs')[3:], '') |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| function! fzf#vim#complete#line(...) |  | ||||||
|   let [display_bufnames, lines] = fzf#vim#_lines(0) |  | ||||||
|   let nth = display_bufnames ? 4 : 3 |  | ||||||
|   return fzf#vim#complete(s:extend({ |  | ||||||
|   \ 'prefix':  '^.*$', |  | ||||||
|   \ 'source':  lines, |  | ||||||
|   \ 'options': '--tiebreak=index --ansi --nth '.nth.'.. --tabstop=1', |  | ||||||
|   \ 'reducer': s:function('s:reduce_line')}, get(a:000, 0, fzf#wrap()))) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! fzf#vim#complete#buffer_line(...) |  | ||||||
|   return fzf#vim#complete(s:extend({ |  | ||||||
|   \ 'prefix': '^.*$', |  | ||||||
|   \ 'source': fzf#vim#_uniq(getline(1, '$'))}, get(a:000, 0, fzf#wrap()))) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| let &cpo = s:cpo_save |  | ||||||
| unlet s:cpo_save |  | ||||||
| 
 |  | ||||||
| @ -1,38 +0,0 @@ | |||||||
| " Copyright (c) 2023 Junegunn Choi |  | ||||||
| " |  | ||||||
| " MIT License |  | ||||||
| " |  | ||||||
| " Permission is hereby granted, free of charge, to any person obtaining |  | ||||||
| " a copy of this software and associated documentation files (the |  | ||||||
| " "Software"), to deal in the Software without restriction, including |  | ||||||
| " without limitation the rights to use, copy, modify, merge, publish, |  | ||||||
| " distribute, sublicense, and/or sell copies of the Software, and to |  | ||||||
| " permit persons to whom the Software is furnished to do so, subject to |  | ||||||
| " the following conditions: |  | ||||||
| " |  | ||||||
| " The above copyright notice and this permission notice shall be |  | ||||||
| " included in all copies or substantial portions of the Software. |  | ||||||
| " |  | ||||||
| " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
| " EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
| " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
| " NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |  | ||||||
| " LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |  | ||||||
| " OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |  | ||||||
| " WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
| function! fzf#vim#listproc#quickfix(list) |  | ||||||
|   call setqflist(a:list) |  | ||||||
|   copen |  | ||||||
|   wincmd p |  | ||||||
|   cfirst |  | ||||||
|   normal! zvzz |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! fzf#vim#listproc#location(list) |  | ||||||
|   call setloclist(0, a:list) |  | ||||||
|   lopen |  | ||||||
|   wincmd p |  | ||||||
|   lfirst |  | ||||||
|   normal! zvzz |  | ||||||
| endfunction |  | ||||||
| @ -1,3 +0,0 @@ | |||||||
| #!/usr/bin/env ruby |  | ||||||
| 
 |  | ||||||
| puts 'preview.rb is deprecated. Use preview.sh instead.' |  | ||||||
| @ -1,86 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| REVERSE="\x1b[7m" |  | ||||||
| RESET="\x1b[m" |  | ||||||
| 
 |  | ||||||
| if [[ $# -lt 1 ]]; then |  | ||||||
|   echo "usage: $0 [--tag] FILENAME[:LINENO][:IGNORED]" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [[ $1 = --tag ]]; then |  | ||||||
|   shift |  | ||||||
|   "$(dirname "${BASH_SOURCE[0]}")/tagpreview.sh" "$@" |  | ||||||
|   exit $? |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Ignore if an empty path is given |  | ||||||
| [[ -z $1 ]] && exit |  | ||||||
| 
 |  | ||||||
| IFS=':' read -r -a INPUT <<< "$1" |  | ||||||
| FILE=${INPUT[0]} |  | ||||||
| CENTER=${INPUT[1]} |  | ||||||
| 
 |  | ||||||
| if [[ "$1" =~ ^[A-Za-z]:\\ ]]; then |  | ||||||
|   FILE=$FILE:${INPUT[1]} |  | ||||||
|   CENTER=${INPUT[2]} |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [[ -n "$CENTER" && ! "$CENTER" =~ ^[0-9] ]]; then |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| CENTER=${CENTER/[^0-9]*/} |  | ||||||
| 
 |  | ||||||
| # MS Win support |  | ||||||
| if [[ "$FILE" =~ '\' ]]; then |  | ||||||
|   if [ -z "$MSWINHOME" ]; then |  | ||||||
|     MSWINHOME="$HOMEDRIVE$HOMEPATH" |  | ||||||
|   fi |  | ||||||
|   if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null ; then |  | ||||||
|     MSWINHOME="${MSWINHOME//\\/\\\\}" |  | ||||||
|     FILE="${FILE/#\~\\/$MSWINHOME\\}" |  | ||||||
|     FILE=$(wslpath -u "$FILE") |  | ||||||
|   elif [ -n "$MSWINHOME" ]; then |  | ||||||
|     FILE="${FILE/#\~\\/$MSWINHOME\\}" |  | ||||||
|   fi |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| FILE="${FILE/#\~\//$HOME/}" |  | ||||||
| if [ ! -r "$FILE" ]; then |  | ||||||
|   echo "File not found ${FILE}" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ -z "$CENTER" ]; then |  | ||||||
|   CENTER=0 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Sometimes bat is installed as batcat. |  | ||||||
| if command -v batcat > /dev/null; then |  | ||||||
|   BATNAME="batcat" |  | ||||||
| elif command -v bat > /dev/null; then |  | ||||||
|   BATNAME="bat" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ -z "$FZF_PREVIEW_COMMAND" ] && [ "${BATNAME:+x}" ]; then |  | ||||||
|   ${BATNAME} --style="${BAT_STYLE:-numbers}" --color=always --pager=never \ |  | ||||||
|       --highlight-line=$CENTER -- "$FILE" |  | ||||||
|   exit $? |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| FILE_LENGTH=${#FILE} |  | ||||||
| MIME=$(file --dereference --mime -- "$FILE") |  | ||||||
| if [[ "${MIME:FILE_LENGTH}" =~ binary ]]; then |  | ||||||
|   echo "$MIME" |  | ||||||
|   exit 0 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| DEFAULT_COMMAND="highlight -O ansi -l {} || coderay {} || rougify {} || cat {}" |  | ||||||
| CMD=${FZF_PREVIEW_COMMAND:-$DEFAULT_COMMAND} |  | ||||||
| CMD=${CMD//{\}/$(printf %q "$FILE")} |  | ||||||
| 
 |  | ||||||
| eval "$CMD" 2> /dev/null | awk "{ \ |  | ||||||
|     if (NR == $CENTER) \ |  | ||||||
|         { gsub(/\x1b[[0-9;]*m/, \"&$REVERSE\"); printf(\"$REVERSE%s\n$RESET\", \$0); } \ |  | ||||||
|     else printf(\"$RESET%s\n\", \$0); \ |  | ||||||
|     }" |  | ||||||
| @ -1,73 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| REVERSE="\x1b[7m" |  | ||||||
| RESET="\x1b[m" |  | ||||||
| 
 |  | ||||||
| if [ -z "$1" ]; then |  | ||||||
|   echo "usage: $0 FILENAME:TAGFILE:EXCMD" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| IFS=':' read -r FILE TAGFILE EXCMD <<< "$*" |  | ||||||
| 
 |  | ||||||
| # Complete file paths which are relative to the given tag file |  | ||||||
| if [ "${FILE:0:1}" != "/" ]; then |  | ||||||
|   FILE="$(dirname "${TAGFILE}")/${FILE}" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ ! -r "$FILE" ]; then |  | ||||||
|   echo "File not found ${FILE}" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # If users aren't using vim, they are probably using neovim |  | ||||||
| if command -v vim > /dev/null; then |  | ||||||
|   VIMNAME="vim" |  | ||||||
| elif command -v nvim > /dev/null; then |  | ||||||
|   VIMNAME="nvim" |  | ||||||
| else |  | ||||||
|   echo "Cannot preview tag: vim or nvim unavailable" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| CENTER="$("${VIMNAME}" -R -i NONE -u NONE -e -m -s "${FILE}" \ |  | ||||||
|               -c "set nomagic" \ |  | ||||||
|               -c "${EXCMD}" \ |  | ||||||
|               -c 'let l=line(".") | new | put =l | print | qa!')" || exit |  | ||||||
| 
 |  | ||||||
| START_LINE="$(( CENTER - FZF_PREVIEW_LINES / 2 ))" |  | ||||||
| if (( START_LINE <= 0 )); then |  | ||||||
|     START_LINE=1 |  | ||||||
| fi |  | ||||||
| END_LINE="$(( START_LINE + FZF_PREVIEW_LINES - 1 ))" |  | ||||||
| 
 |  | ||||||
| # Sometimes bat is installed as batcat. |  | ||||||
| if command -v batcat > /dev/null; then |  | ||||||
|   BATNAME="batcat" |  | ||||||
| elif command -v bat > /dev/null; then |  | ||||||
|   BATNAME="bat" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ -z "$FZF_PREVIEW_COMMAND" ] && [ "${BATNAME:+x}" ]; then |  | ||||||
|   ${BATNAME} --style="${BAT_STYLE:-numbers}" \ |  | ||||||
|              --color=always \ |  | ||||||
|              --pager=never \ |  | ||||||
|              --wrap=never \ |  | ||||||
|              --terminal-width="${FZF_PREVIEW_COLUMNS}" \ |  | ||||||
|              --line-range="${START_LINE}:${END_LINE}" \ |  | ||||||
|              --highlight-line="${CENTER}" \ |  | ||||||
|              "$FILE" |  | ||||||
|   exit $? |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| DEFAULT_COMMAND="highlight -O ansi -l {} || coderay {} || rougify {} || cat {}" |  | ||||||
| CMD=${FZF_PREVIEW_COMMAND:-$DEFAULT_COMMAND} |  | ||||||
| CMD=${CMD//{\}/$(printf %q "$FILE")} |  | ||||||
| 
 |  | ||||||
| eval "$CMD" 2> /dev/null | awk "{ \ |  | ||||||
|     if (NR >= $START_LINE && NR <= $END_LINE) { \ |  | ||||||
|         if (NR == $CENTER) \ |  | ||||||
|             { gsub(/\x1b[[0-9;]*m/, \"&$REVERSE\"); printf(\"$REVERSE%s\n$RESET\", \$0); } \ |  | ||||||
|         else printf(\"$RESET%s\n\", \$0); \ |  | ||||||
|         } \ |  | ||||||
|     }" |  | ||||||
| @ -1,15 +0,0 @@ | |||||||
| #!/usr/bin/env perl |  | ||||||
| 
 |  | ||||||
| use strict; |  | ||||||
| 
 |  | ||||||
| foreach my $file (@ARGV) { |  | ||||||
|   open my $lines, $file; |  | ||||||
|   while (<$lines>) { |  | ||||||
|     unless (/^\!/) { |  | ||||||
|       s/^[^\t]*/sprintf("%-24s", $&)/e; |  | ||||||
|       s/$/\t$file/; |  | ||||||
|       print; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   close $lines; |  | ||||||
| } |  | ||||||
| @ -1,515 +0,0 @@ | |||||||
| fzf-vim.txt	fzf-vim	Last change: October 14 2023 |  | ||||||
| FZF-VIM - TABLE OF CONTENTS                                *fzf-vim* *fzf-vim-toc* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
|   fzf :heart: vim                                |fzf-vim-fzfheart-vim| |  | ||||||
|     Rationale                                    |fzf-vim-rationale| |  | ||||||
|     Why you should use fzf on Vim                |fzf-vim-why-you-should-use-fzf-on-vim| |  | ||||||
|     Installation                                 |fzf-vim-installation| |  | ||||||
|       Using vim-plug                             |fzf-vim-using-vim-plug| |  | ||||||
|       Dependencies                               |fzf-vim-dependencies| |  | ||||||
|     Commands                                     |fzf-vim-commands| |  | ||||||
|     Customization                                |fzf-vim-customization| |  | ||||||
|       Configuration options of the base plugin   |fzf-vim-configuration-options-of-the-base-plugin| |  | ||||||
|       Configuration options for fzf.vim          |fzf-vim-configuration-options-for-fzf-vim| |  | ||||||
|         Preview window                           |fzf-vim-preview-window| |  | ||||||
|         Command-level options                    |fzf-vim-command-level-options| |  | ||||||
|         List type to handle multiple selections  |fzf-vim-list-type-to-handle-multiple-selections| |  | ||||||
|       Advanced customization                     |fzf-vim-advanced-customization| |  | ||||||
|         Vim functions                            |fzf-vim-vim-functions| |  | ||||||
|         Example: Customizing Files command       |fzf-vim-example-customizing-files-command| |  | ||||||
|         Example: git grep wrapper                |fzf-vim-example-git-grep-wrapper| |  | ||||||
|     Mappings                                     |fzf-vim-mappings| |  | ||||||
|     Completion functions                         |fzf-vim-completion-functions| |  | ||||||
|     Custom completion                            |fzf-vim-custom-completion| |  | ||||||
|       Reducer example                            |fzf-vim-reducer-example| |  | ||||||
|     Status line of terminal buffer               |fzf-vim-status-line-of-terminal-buffer| |  | ||||||
|       Hide statusline                            |fzf-vim-hide-statusline| |  | ||||||
|       Custom statusline                          |fzf-vim-custom-statusline| |  | ||||||
|     License                                      |fzf-vim-license| |  | ||||||
| 
 |  | ||||||
| FZF :HEART: VIM                                           *fzf-vim-fzfheart-vim* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| Things you can do with {fzf}{1} and Vim. |  | ||||||
| 
 |  | ||||||
|                                            {1} https://github.com/junegunn/fzf |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| RATIONALE                                                    *fzf-vim-rationale* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| {fzf}{1} itself is not a Vim plugin, and the official repository only provides |  | ||||||
| the {basic wrapper function}{2} for Vim. It's up to the users to 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" implementation of |  | ||||||
| the features they can find in the alternative Vim plugins. |  | ||||||
| 
 |  | ||||||
|           {1} https://github.com/junegunn/fzf |  | ||||||
|           {2} https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzfrun |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| WHY YOU SHOULD USE FZF ON VIM            *fzf-vim-why-you-should-use-fzf-on-vim* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| Because you can and you love fzf. |  | ||||||
| 
 |  | ||||||
| fzf runs asynchronously and can be orders of magnitude faster than similar Vim |  | ||||||
| plugins. However, the benefit may not be noticeable if the size of the input |  | ||||||
| is small, which is the case for many of the commands provided here. |  | ||||||
| Nevertheless I wrote them anyway since it's really easy to implement custom |  | ||||||
| selector with fzf. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| INSTALLATION                                              *fzf-vim-installation* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| fzf.vim depends on the basic Vim plugin of {the main fzf repository}{1}, which |  | ||||||
| means you need to set up both "fzf" and "fzf.vim" on Vim. To learn more about |  | ||||||
| fzf/Vim integration, see {README-VIM}{3}. |  | ||||||
| 
 |  | ||||||
|                  {1} https://github.com/junegunn/fzf |  | ||||||
|                  {3} https://github.com/junegunn/fzf/blob/master/README-VIM.md |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| < Using vim-plug >____________________________________________________________~ |  | ||||||
|                                                         *fzf-vim-using-vim-plug* |  | ||||||
| > |  | ||||||
|     Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } |  | ||||||
|     Plug 'junegunn/fzf.vim' |  | ||||||
| < |  | ||||||
| `fzf#install()` makes sure that you have the latest binary, but it's optional, |  | ||||||
| so you can omit it if you use a plugin manager that doesn't support hooks. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| < Dependencies >______________________________________________________________~ |  | ||||||
|                                                           *fzf-vim-dependencies* |  | ||||||
| 
 |  | ||||||
|  - {fzf}{1} 0.41.1 or above |  | ||||||
|  - For syntax-highlighted preview, install {bat}{4} |  | ||||||
|  - If {delta}{5} is available, `GF?`, `Commits` and `BCommits` will use it to |  | ||||||
|    format `git diff` output. |  | ||||||
|  - `Ag` requires {The Silver Searcher (ag)}{6} |  | ||||||
|  - `Rg` requires {ripgrep (rg)}{7} |  | ||||||
|  - `Tags` and `Helptags` require Perl |  | ||||||
| 
 |  | ||||||
|                              {1} https://github.com/junegunn/fzf |  | ||||||
|                              {4} https://github.com/sharkdp/bat |  | ||||||
|                              {5} https://github.com/dandavison/delta |  | ||||||
|                              {6} https://github.com/ggreer/the_silver_searcher |  | ||||||
|                              {7} https://github.com/BurntSushi/ripgrep |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| COMMANDS                                                      *fzf-vim-commands* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
|        *:Files* *:GFiles* *:Buffers* *:Colors* *:Ag* *:Rg* *:RG* *:Lines* *:BLines* *:Tags* *:BTags* |  | ||||||
|  *:Changes* *:Marks* *:Jumps* *:Windows* *:Locate* *:History* *:Snippets* *:Commits* *:BCommits* |  | ||||||
|                                           *:Commands* *:Maps* *:Helptags* *:Filetypes* |  | ||||||
| 
 |  | ||||||
|  -----------------------+-------------------------------------------------------------------------------------- |  | ||||||
|  Command                | List                                                                                 ~ |  | ||||||
|  -----------------------+-------------------------------------------------------------------------------------- |  | ||||||
|   `:Files [PATH]`         | Files (runs  `$FZF_DEFAULT_COMMAND`  if defined) |  | ||||||
|   `:GFiles [OPTS]`        | Git files ( `git ls-files` ) |  | ||||||
|   `:GFiles?`              | Git files ( `git status` ) |  | ||||||
|   `:Buffers`              | Open buffers |  | ||||||
|   `:Colors`               | Color schemes |  | ||||||
|   `:Ag [PATTERN]`         | {ag}{6} search result ( `ALT-A`  to select all,  `ALT-D`  to deselect all) |  | ||||||
|   `:Rg [PATTERN]`         | {rg}{7} search result ( `ALT-A`  to select all,  `ALT-D`  to deselect all) |  | ||||||
|   `:RG [PATTERN]`         | {rg}{7} search result; relaunch ripgrep on every keystroke |  | ||||||
|   `:Lines [QUERY]`        | Lines in loaded buffers |  | ||||||
|   `:BLines [QUERY]`       | Lines in the current buffer |  | ||||||
|   `:Tags [QUERY]`         | Tags in the project ( `ctags -R` ) |  | ||||||
|   `:BTags [QUERY]`        | Tags in the current buffer |  | ||||||
|   `:Changes`              | Changelist across all open buffers |  | ||||||
|   `:Marks`                | Marks |  | ||||||
|   `:Jumps`                | Jumps |  | ||||||
|   `:Windows`              | Windows |  | ||||||
|   `:Locate PATTERN`       |  `locate`  command output |  | ||||||
|   `:History`              |  `v:oldfiles`  and open buffers |  | ||||||
|   `:History:`             | Command history |  | ||||||
|   `:History/`             | Search history |  | ||||||
|   `:Snippets`             | Snippets ({UltiSnips}{8}) |  | ||||||
|   `:Commits [LOG_OPTS]`   | Git commits (requires {fugitive.vim}{9}) |  | ||||||
|   `:BCommits [LOG_OPTS]`  | Git commits for the current buffer; visual-select lines to track changes in the range |  | ||||||
|   `:Commands`             | Commands |  | ||||||
|   `:Maps`                 | Normal mode mappings |  | ||||||
|   `:Helptags`             | Help tags [1] |  | ||||||
|   `:Filetypes`            | File types |  | ||||||
|  -----------------------+-------------------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
|                                                       *g:fzf_vim.command_prefix* |  | ||||||
| 
 |  | ||||||
|  - 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 |  | ||||||
|  - Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen |  | ||||||
|  - You can set `g:fzf_vim.command_prefix` to give the same prefix to the commands |  | ||||||
|    - e.g. `let g:fzf_vim.command_prefix = 'Fzf'` and you have `FzfFiles`, etc. |  | ||||||
| 
 |  | ||||||
| (1: `Helptags` will shadow the command of the same name from {pathogen}{10}. |  | ||||||
| But its functionality is still available via `call pathogen#helptags()`. [↩]) |  | ||||||
| 
 |  | ||||||
|                              {6} https://github.com/ggreer/the_silver_searcher |  | ||||||
|                              {7} https://github.com/BurntSushi/ripgrep |  | ||||||
|                              {7} https://github.com/BurntSushi/ripgrep |  | ||||||
|                              {8} https://github.com/SirVer/ultisnips |  | ||||||
|                              {9} https://github.com/tpope/vim-fugitive |  | ||||||
|                              {10} https://github.com/tpope/vim-pathogen |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| CUSTOMIZATION                                            *fzf-vim-customization* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| < Configuration options of the base plugin >__________________________________~ |  | ||||||
|                               *fzf-vim-configuration-options-of-the-base-plugin* |  | ||||||
| 
 |  | ||||||
| Every command in fzf.vim internally calls `fzf#wrap` function of the main |  | ||||||
| repository which supports a set of global option variables. So please read |  | ||||||
| through {README-VIM}{3} to learn more about them. |  | ||||||
| 
 |  | ||||||
|                  {3} https://github.com/junegunn/fzf/blob/master/README-VIM.md |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| < Configuration options for fzf.vim >_________________________________________~ |  | ||||||
|                                      *fzf-vim-configuration-options-for-fzf-vim* |  | ||||||
| 
 |  | ||||||
|                                                                      *g:fzf_vim* |  | ||||||
| 
 |  | ||||||
| All configuration values for this plugin are stored in `g:fzf_vim` dictionary, |  | ||||||
| so make sure to initialize it before assigning any configuration values to it. |  | ||||||
| > |  | ||||||
|     " Initialize configuration dictionary |  | ||||||
|     let g:fzf_vim = {} |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| Preview window~ |  | ||||||
|                                                         *fzf-vim-preview-window* |  | ||||||
| 
 |  | ||||||
|                                                       *g:fzf_vim.preview_window* |  | ||||||
| 
 |  | ||||||
| Some commands will show the preview window on the right. You can customize the |  | ||||||
| behavior with `g:fzf_vim.preview_window`. Here are some examples: |  | ||||||
| 
 |  | ||||||
|                                                         *g:fzf_vim.preview_bash* |  | ||||||
| > |  | ||||||
|     " This is the default option: |  | ||||||
|     "   - Preview window on the right with 50% width |  | ||||||
|     "   - CTRL-/ will toggle preview window. |  | ||||||
|     " - Note that this array is passed as arguments to fzf#vim#with_preview function. |  | ||||||
|     " - To learn more about preview window options, see `--preview-window` section of `man fzf`. |  | ||||||
|     let g:fzf_vim.preview_window = ['right,50%', 'ctrl-/'] |  | ||||||
| 
 |  | ||||||
|     " Preview window is hidden by default. You can toggle it with ctrl-/. |  | ||||||
|     " It will show on the right with 50% width, but if the width is smaller |  | ||||||
|     " than 70 columns, it will show above the candidate list |  | ||||||
|     let g:fzf_vim.preview_window = ['hidden,right,50%,<70(up,40%)', 'ctrl-/'] |  | ||||||
| 
 |  | ||||||
|     " Empty value to disable preview window altogether |  | ||||||
|     let g:fzf_vim.preview_window = [] |  | ||||||
| 
 |  | ||||||
|     " fzf.vim needs bash to display the preview window. |  | ||||||
|     " On Windows, fzf.vim will first see if bash is in $PATH, then if |  | ||||||
|     " Git bash (C:\Program Files\Git\bin\bash.exe) is available. |  | ||||||
|     " If you want it to use a different bash, set this variable. |  | ||||||
|     "   let g:fzf_vim = {} |  | ||||||
|     "   let g:fzf_vim.preview_bash = 'C:\Git\bin\bash.exe' |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| Command-level options~ |  | ||||||
|                                                  *fzf-vim-command-level-options* |  | ||||||
| 
 |  | ||||||
| *g:fzf_vim.commands_expect* *g:fzf_vim.tags_command* *g:fzf_vim.commits_log_options* |  | ||||||
|                                                         *g:fzf_vim.buffers_jump* |  | ||||||
| > |  | ||||||
|     " [Buffers] Jump to the existing window if possible |  | ||||||
|     let g:fzf_vim.buffers_jump = 1 |  | ||||||
| 
 |  | ||||||
|     " [[B]Commits] Customize the options used by 'git log': |  | ||||||
|     let g:fzf_vim.commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' |  | ||||||
| 
 |  | ||||||
|     " [Tags] Command to generate tags file |  | ||||||
|     let g:fzf_vim.tags_command = 'ctags -R' |  | ||||||
| 
 |  | ||||||
|     " [Commands] --expect expression for directly executing the command |  | ||||||
|     let g:fzf_vim.commands_expect = 'alt-enter,ctrl-x' |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| List type to handle multiple selections~ |  | ||||||
|                                *fzf-vim-list-type-to-handle-multiple-selections* |  | ||||||
| 
 |  | ||||||
| The following commands will fill the quickfix list when multiple entries are |  | ||||||
| selected. |  | ||||||
| 
 |  | ||||||
|  - `Ag` |  | ||||||
|  - `Rg` / `RG` |  | ||||||
|  - `Lines` / `BLines` |  | ||||||
|  - `Tags` / `BTags` |  | ||||||
| 
 |  | ||||||
|                                                             *g:fzf_vim.listproc* |  | ||||||
| 
 |  | ||||||
| By setting `g:fzf_vim.listproc`, you can make them use location list instead. |  | ||||||
| > |  | ||||||
|     " Default: Use quickfix list |  | ||||||
|     let g:fzf_vim.listproc = { list -> fzf#vim#listproc#quickfix(list) } |  | ||||||
| 
 |  | ||||||
|     " Use location list instead of quickfix list |  | ||||||
|     let g:fzf_vim.listproc = { list -> fzf#vim#listproc#location(list) } |  | ||||||
| < |  | ||||||
| You can customize the list type per command by defining variables named |  | ||||||
| `g:fzf_vim.listproc_{command_name_in_lowercase}`. |  | ||||||
| 
 |  | ||||||
|                                    *g:fzf_vim.listproc_rg* *g:fzf_vim.listproc_ag* |  | ||||||
| > |  | ||||||
|     " Command-wise customization |  | ||||||
|     let g:fzf_vim.listproc_ag = { list -> fzf#vim#listproc#quickfix(list) } |  | ||||||
|     let g:fzf_vim.listproc_rg = { list -> fzf#vim#listproc#location(list) } |  | ||||||
| < |  | ||||||
| You can further customize the behavior by providing a custom function to |  | ||||||
| process the list instead of using the predefined `fzf#vim#listproc#quickfix` |  | ||||||
| or `fzf#vim#listproc#location`. |  | ||||||
| > |  | ||||||
|     " A customized version of fzf#vim#listproc#quickfix. |  | ||||||
|     " The last two lines are commented out not to move to the first entry. |  | ||||||
|     function! g:fzf_vim.listproc(list) |  | ||||||
|       call setqflist(a:list) |  | ||||||
|       copen |  | ||||||
|       wincmd p |  | ||||||
|       " cfirst |  | ||||||
|       " normal! zvzz |  | ||||||
|     endfunction |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| < Advanced customization >____________________________________________________~ |  | ||||||
|                                                 *fzf-vim-advanced-customization* |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Vim functions~ |  | ||||||
|                                                          *fzf-vim-vim-functions* |  | ||||||
| 
 |  | ||||||
| Each command in fzf.vim is backed by a Vim function. You can override a |  | ||||||
| command or define a variation of it by calling its corresponding function. |  | ||||||
| 
 |  | ||||||
|  ----------+--------------------------------------------------------------------------------- |  | ||||||
|  Command   | Vim function                                                                    ~ |  | ||||||
|  ----------+--------------------------------------------------------------------------------- |  | ||||||
|   `Files`    |  `fzf#vim#files(dir, [spec dict], [fullscreen bool])` |  | ||||||
|   `GFiles`   |  `fzf#vim#gitfiles(git_options, [spec dict], [fullscreen bool])` |  | ||||||
|   `GFiles?`  |  `fzf#vim#gitfiles('?', [spec dict], [fullscreen bool])` |  | ||||||
|   `Buffers`  |  `fzf#vim#buffers([query string], [bufnrs list], [spec dict], [fullscreen bool])` |  | ||||||
|   `Colors`   |  `fzf#vim#colors([spec dict], [fullscreen bool])` |  | ||||||
|   `Rg`       |  `fzf#vim#grep(command, [spec dict], [fullscreen bool])` |  | ||||||
|   `RG`       |  `fzf#vim#grep2(command_prefix, query, [spec dict], [fullscreen bool])` |  | ||||||
|  ...       | ... |  | ||||||
|  ----------+--------------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
| (We can see that the last two optional arguments of each function are |  | ||||||
| identical. They are directly passed to `fzf#wrap` function. If you haven't |  | ||||||
| read {README-VIM}{3} already, please read it before proceeding.) |  | ||||||
| 
 |  | ||||||
|                  {3} https://github.com/junegunn/fzf/blob/master/README-VIM.md |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Example: Customizing Files command~ |  | ||||||
|                                      *fzf-vim-example-customizing-files-command* |  | ||||||
| 
 |  | ||||||
| This is the default definition of `Files` command: |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=? -complete=dir Files call fzf#vim#files(<q-args>, <bang>0) |  | ||||||
| < |  | ||||||
| Let's say you want to a variation of it called `ProjectFiles` that only |  | ||||||
| searches inside `~/projects` directory. Then you can do it like this: |  | ||||||
| > |  | ||||||
|     command! -bang ProjectFiles call fzf#vim#files('~/projects', <bang>0) |  | ||||||
| < |  | ||||||
| Or, if you want to override the command with different fzf options, just pass |  | ||||||
| a custom spec to the function. |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=? -complete=dir Files |  | ||||||
|         \ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline']}, <bang>0) |  | ||||||
| < |  | ||||||
| Want a preview window? |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=? -complete=dir Files |  | ||||||
|         \ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, <bang>0) |  | ||||||
| < |  | ||||||
| It kind of works, but you probably want a nicer previewer program than `cat`. |  | ||||||
| fzf.vim ships {a versatile preview script}{11} you can readily use. It |  | ||||||
| internally executes {bat}{4} for syntax highlighting, so make sure to install |  | ||||||
| it. |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=? -complete=dir Files |  | ||||||
|         \ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', '~/.vim/plugged/fzf.vim/bin/preview.sh {}']}, <bang>0) |  | ||||||
| < |  | ||||||
| However, it's not ideal to hard-code the path to the script which can be |  | ||||||
| different in different circumstances. So in order to make it easier to set up |  | ||||||
| the previewer, fzf.vim provides `fzf#vim#with_preview` helper function. |  | ||||||
| Similarly to `fzf#wrap`, it takes a spec dictionary and returns a copy of it |  | ||||||
| with additional preview options. |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=? -complete=dir Files |  | ||||||
|         \ call fzf#vim#files(<q-args>, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), <bang>0) |  | ||||||
| < |  | ||||||
| You can just omit the spec argument if you only want the previewer. |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=? -complete=dir Files |  | ||||||
|         \ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0) |  | ||||||
| < |  | ||||||
|                                             {11} bin/preview.sh |  | ||||||
|                                             {4} https://github.com/sharkdp/bat |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Example: git grep wrapper~ |  | ||||||
|                                               *fzf-vim-example-git-grep-wrapper* |  | ||||||
| 
 |  | ||||||
| The following example implements `GGrep` command that works similarly to |  | ||||||
| predefined `Ag` or `Rg` using `fzf#vim#grep`. |  | ||||||
| 
 |  | ||||||
|                                                                          *:LINE* |  | ||||||
| 
 |  | ||||||
|  - We set the base directory to git root by setting `dir` attribute in spec |  | ||||||
|    dictionary. |  | ||||||
|  - {The preview script}{11} supports `grep` format (`FILE_PATH:LINE_NO:...`), so |  | ||||||
|    we can just wrap the spec with `fzf#vim#with_preview` as before to enable |  | ||||||
|    previewer. |  | ||||||
| > |  | ||||||
|     command! -bang -nargs=* GGrep |  | ||||||
|       \ call fzf#vim#grep( |  | ||||||
|       \   'git grep --line-number -- '.fzf#shellescape(<q-args>), |  | ||||||
|       \   fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0) |  | ||||||
| < |  | ||||||
|                                                            {11} bin/preview.sh |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| MAPPINGS                                                      *fzf-vim-mappings* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
|  ---------------------------------+------------------------------------------ |  | ||||||
|  Mapping                          | Description                              ~ |  | ||||||
|  ---------------------------------+------------------------------------------ |  | ||||||
|  <plug>(fzf-maps-n)               | Normal mode mappings |  | ||||||
|  <plug>(fzf-maps-i)               | Insert mode mappings |  | ||||||
|  <plug>(fzf-maps-x)               | Visual mode mappings |  | ||||||
|  <plug>(fzf-maps-o)               | Operator-pending mappings |  | ||||||
|  <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-line)        | Line completion (all open buffers) |  | ||||||
|  <plug>(fzf-complete-buffer-line) | Line completion (current buffer only) |  | ||||||
|  ---------------------------------+------------------------------------------ |  | ||||||
| > |  | ||||||
|     " Mapping selecting mappings |  | ||||||
|     nmap <leader><tab> <plug>(fzf-maps-n) |  | ||||||
|     xmap <leader><tab> <plug>(fzf-maps-x) |  | ||||||
|     omap <leader><tab> <plug>(fzf-maps-o) |  | ||||||
| 
 |  | ||||||
|     " Insert mode completion |  | ||||||
|     imap <c-x><c-k> <plug>(fzf-complete-word) |  | ||||||
|     imap <c-x><c-f> <plug>(fzf-complete-path) |  | ||||||
|     imap <c-x><c-l> <plug>(fzf-complete-line) |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| COMPLETION FUNCTIONS                              *fzf-vim-completion-functions* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
|  -----------------------------------------+-------------------------------------- |  | ||||||
|  Function                                 | Description                          ~ |  | ||||||
|  -----------------------------------------+-------------------------------------- |  | ||||||
|   `fzf#vim#complete#path(command, [spec])`  | Path completion |  | ||||||
|   `fzf#vim#complete#word([spec])`           | Word completion |  | ||||||
|   `fzf#vim#complete#line([spec])`           | Line completion (all open buffers) |  | ||||||
|   `fzf#vim#complete#buffer_line([spec])`    | Line completion (current buffer only) |  | ||||||
|  -----------------------------------------+-------------------------------------- |  | ||||||
| > |  | ||||||
|     " Path completion with custom source command |  | ||||||
|     inoremap <expr> <c-x><c-f> fzf#vim#complete#path('fd') |  | ||||||
|     inoremap <expr> <c-x><c-f> fzf#vim#complete#path('rg --files') |  | ||||||
| 
 |  | ||||||
|     " Word completion with custom spec with popup layout option |  | ||||||
|     inoremap <expr> <c-x><c-k> fzf#vim#complete#word({'window': { 'width': 0.2, 'height': 0.9, 'xoffset': 1 }}) |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| CUSTOM COMPLETION                                    *fzf-vim-custom-completion* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| `fzf#vim#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 as the source. |  | ||||||
| > |  | ||||||
|     " Replace the default dictionary completion with fzf-based fuzzy completion |  | ||||||
|     inoremap <expr> <c-x><c-k> fzf#vim#complete('cat /usr/share/dict/words') |  | ||||||
| < |  | ||||||
| For advanced uses, you can pass an options dictionary to the function. The set |  | ||||||
| of options is pretty much identical to that for `fzf#run` only with the |  | ||||||
| following exceptions: |  | ||||||
| 
 |  | ||||||
|  - `reducer` (funcref) |  | ||||||
|    - Reducer transforms the output lines of fzf into a single string value |  | ||||||
|  - `prefix` (string or funcref; default: `\k*$`) |  | ||||||
|    - Regular expression pattern to extract the completion prefix |  | ||||||
|    - Or a function to extract completion prefix |  | ||||||
|  - Both `source` and `options` can be given as funcrefs that take the completion |  | ||||||
|    prefix as the argument and return the final value |  | ||||||
|  - `sink` or `sink*` are ignored |  | ||||||
| > |  | ||||||
|     " Global line completion (not just open buffers. ripgrep required.) |  | ||||||
|     inoremap <expr> <c-x><c-l> fzf#vim#complete(fzf#wrap({ |  | ||||||
|       \ 'prefix': '^.*$', |  | ||||||
|       \ 'source': 'rg -n ^ --color always', |  | ||||||
|       \ 'options': '--ansi --delimiter : --nth 3..', |  | ||||||
|       \ 'reducer': { lines -> join(split(lines[0], ':\zs')[2:], '') }})) |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| < Reducer example >___________________________________________________________~ |  | ||||||
|                                                        *fzf-vim-reducer-example* |  | ||||||
| > |  | ||||||
|     function! s:make_sentence(lines) |  | ||||||
|       return substitute(join(a:lines), '^.', '\=toupper(submatch(0))', '').'.' |  | ||||||
|     endfunction |  | ||||||
| 
 |  | ||||||
|     inoremap <expr> <c-x><c-s> fzf#vim#complete({ |  | ||||||
|       \ 'source':  'cat /usr/share/dict/words', |  | ||||||
|       \ 'reducer': function('<sid>make_sentence'), |  | ||||||
|       \ 'options': '--multi --reverse --margin 15%,0', |  | ||||||
|       \ 'left':    20}) |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| STATUS LINE OF TERMINAL BUFFER          *fzf-vim-status-line-of-terminal-buffer* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| When fzf starts in a terminal buffer (see {fzf/README-VIM.md}{12}), you may |  | ||||||
| want to customize the statusline of the containing buffer. |  | ||||||
| 
 |  | ||||||
| {12} https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzf-inside-terminal-buffer |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| < Hide statusline >___________________________________________________________~ |  | ||||||
|                                                        *fzf-vim-hide-statusline* |  | ||||||
| > |  | ||||||
|     autocmd! FileType fzf set laststatus=0 noshowmode noruler |  | ||||||
|       \| autocmd BufLeave <buffer> set laststatus=2 showmode ruler |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| < Custom statusline >_________________________________________________________~ |  | ||||||
|                                                      *fzf-vim-custom-statusline* |  | ||||||
| > |  | ||||||
|     function! s:fzf_statusline() |  | ||||||
|       " Override statusline as you like |  | ||||||
|       highlight fzf1 ctermfg=161 ctermbg=251 |  | ||||||
|       highlight fzf2 ctermfg=23 ctermbg=251 |  | ||||||
|       highlight fzf3 ctermfg=237 ctermbg=251 |  | ||||||
|       setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f |  | ||||||
|     endfunction |  | ||||||
| 
 |  | ||||||
|     autocmd! User FzfStatusLine call <SID>fzf_statusline() |  | ||||||
| < |  | ||||||
| 
 |  | ||||||
| LICENSE                                                        *fzf-vim-license* |  | ||||||
| ============================================================================== |  | ||||||
| 
 |  | ||||||
| MIT |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ============================================================================== |  | ||||||
| vim:tw=78:sw=2:ts=2:ft=help:norl:nowrap: |  | ||||||
| @ -1,63 +0,0 @@ | |||||||
| :Ag	fzf-vim.txt	/*:Ag* |  | ||||||
| :BCommits	fzf-vim.txt	/*:BCommits* |  | ||||||
| :BLines	fzf-vim.txt	/*:BLines* |  | ||||||
| :BTags	fzf-vim.txt	/*:BTags* |  | ||||||
| :Buffers	fzf-vim.txt	/*:Buffers* |  | ||||||
| :Changes	fzf-vim.txt	/*:Changes* |  | ||||||
| :Colors	fzf-vim.txt	/*:Colors* |  | ||||||
| :Commands	fzf-vim.txt	/*:Commands* |  | ||||||
| :Commits	fzf-vim.txt	/*:Commits* |  | ||||||
| :Files	fzf-vim.txt	/*:Files* |  | ||||||
| :Filetypes	fzf-vim.txt	/*:Filetypes* |  | ||||||
| :GFiles	fzf-vim.txt	/*:GFiles* |  | ||||||
| :Helptags	fzf-vim.txt	/*:Helptags* |  | ||||||
| :History	fzf-vim.txt	/*:History* |  | ||||||
| :Jumps	fzf-vim.txt	/*:Jumps* |  | ||||||
| :LINE	fzf-vim.txt	/*:LINE* |  | ||||||
| :Lines	fzf-vim.txt	/*:Lines* |  | ||||||
| :Locate	fzf-vim.txt	/*:Locate* |  | ||||||
| :Maps	fzf-vim.txt	/*:Maps* |  | ||||||
| :Marks	fzf-vim.txt	/*:Marks* |  | ||||||
| :RG	fzf-vim.txt	/*:RG* |  | ||||||
| :Rg	fzf-vim.txt	/*:Rg* |  | ||||||
| :Snippets	fzf-vim.txt	/*:Snippets* |  | ||||||
| :Tags	fzf-vim.txt	/*:Tags* |  | ||||||
| :Windows	fzf-vim.txt	/*:Windows* |  | ||||||
| fzf-vim	fzf-vim.txt	/*fzf-vim* |  | ||||||
| fzf-vim-advanced-customization	fzf-vim.txt	/*fzf-vim-advanced-customization* |  | ||||||
| fzf-vim-command-level-options	fzf-vim.txt	/*fzf-vim-command-level-options* |  | ||||||
| fzf-vim-commands	fzf-vim.txt	/*fzf-vim-commands* |  | ||||||
| fzf-vim-completion-functions	fzf-vim.txt	/*fzf-vim-completion-functions* |  | ||||||
| fzf-vim-configuration-options-for-fzf-vim	fzf-vim.txt	/*fzf-vim-configuration-options-for-fzf-vim* |  | ||||||
| fzf-vim-configuration-options-of-the-base-plugin	fzf-vim.txt	/*fzf-vim-configuration-options-of-the-base-plugin* |  | ||||||
| fzf-vim-custom-completion	fzf-vim.txt	/*fzf-vim-custom-completion* |  | ||||||
| fzf-vim-custom-statusline	fzf-vim.txt	/*fzf-vim-custom-statusline* |  | ||||||
| fzf-vim-customization	fzf-vim.txt	/*fzf-vim-customization* |  | ||||||
| fzf-vim-dependencies	fzf-vim.txt	/*fzf-vim-dependencies* |  | ||||||
| fzf-vim-example-customizing-files-command	fzf-vim.txt	/*fzf-vim-example-customizing-files-command* |  | ||||||
| fzf-vim-example-git-grep-wrapper	fzf-vim.txt	/*fzf-vim-example-git-grep-wrapper* |  | ||||||
| fzf-vim-fzfheart-vim	fzf-vim.txt	/*fzf-vim-fzfheart-vim* |  | ||||||
| fzf-vim-hide-statusline	fzf-vim.txt	/*fzf-vim-hide-statusline* |  | ||||||
| fzf-vim-installation	fzf-vim.txt	/*fzf-vim-installation* |  | ||||||
| fzf-vim-license	fzf-vim.txt	/*fzf-vim-license* |  | ||||||
| fzf-vim-list-type-to-handle-multiple-selections	fzf-vim.txt	/*fzf-vim-list-type-to-handle-multiple-selections* |  | ||||||
| fzf-vim-mappings	fzf-vim.txt	/*fzf-vim-mappings* |  | ||||||
| fzf-vim-preview-window	fzf-vim.txt	/*fzf-vim-preview-window* |  | ||||||
| fzf-vim-rationale	fzf-vim.txt	/*fzf-vim-rationale* |  | ||||||
| fzf-vim-reducer-example	fzf-vim.txt	/*fzf-vim-reducer-example* |  | ||||||
| fzf-vim-status-line-of-terminal-buffer	fzf-vim.txt	/*fzf-vim-status-line-of-terminal-buffer* |  | ||||||
| fzf-vim-toc	fzf-vim.txt	/*fzf-vim-toc* |  | ||||||
| fzf-vim-using-vim-plug	fzf-vim.txt	/*fzf-vim-using-vim-plug* |  | ||||||
| fzf-vim-vim-functions	fzf-vim.txt	/*fzf-vim-vim-functions* |  | ||||||
| fzf-vim-why-you-should-use-fzf-on-vim	fzf-vim.txt	/*fzf-vim-why-you-should-use-fzf-on-vim* |  | ||||||
| g:fzf_vim	fzf-vim.txt	/*g:fzf_vim* |  | ||||||
| g:fzf_vim.buffers_jump	fzf-vim.txt	/*g:fzf_vim.buffers_jump* |  | ||||||
| g:fzf_vim.command_prefix	fzf-vim.txt	/*g:fzf_vim.command_prefix* |  | ||||||
| g:fzf_vim.commands_expect	fzf-vim.txt	/*g:fzf_vim.commands_expect* |  | ||||||
| g:fzf_vim.commits_log_options	fzf-vim.txt	/*g:fzf_vim.commits_log_options* |  | ||||||
| g:fzf_vim.listproc	fzf-vim.txt	/*g:fzf_vim.listproc* |  | ||||||
| g:fzf_vim.listproc_ag	fzf-vim.txt	/*g:fzf_vim.listproc_ag* |  | ||||||
| g:fzf_vim.listproc_rg	fzf-vim.txt	/*g:fzf_vim.listproc_rg* |  | ||||||
| g:fzf_vim.preview_bash	fzf-vim.txt	/*g:fzf_vim.preview_bash* |  | ||||||
| g:fzf_vim.preview_window	fzf-vim.txt	/*g:fzf_vim.preview_window* |  | ||||||
| g:fzf_vim.tags_command	fzf-vim.txt	/*g:fzf_vim.tags_command* |  | ||||||
| @ -1,163 +0,0 @@ | |||||||
| " Copyright (c) 2015 Junegunn Choi |  | ||||||
| " |  | ||||||
| " MIT License |  | ||||||
| " |  | ||||||
| " Permission is hereby granted, free of charge, to any person obtaining |  | ||||||
| " a copy of this software and associated documentation files (the |  | ||||||
| " "Software"), to deal in the Software without restriction, including |  | ||||||
| " without limitation the rights to use, copy, modify, merge, publish, |  | ||||||
| " distribute, sublicense, and/or sell copies of the Software, and to |  | ||||||
| " permit persons to whom the Software is furnished to do so, subject to |  | ||||||
| " the following conditions: |  | ||||||
| " |  | ||||||
| " The above copyright notice and this permission notice shall be |  | ||||||
| " included in all copies or substantial portions of the Software. |  | ||||||
| " |  | ||||||
| " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
| " EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
| " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
| " NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |  | ||||||
| " LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |  | ||||||
| " OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |  | ||||||
| " WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
| if exists('g:loaded_fzf_vim') |  | ||||||
|   finish |  | ||||||
| endif |  | ||||||
| let g:loaded_fzf_vim = 1 |  | ||||||
| 
 |  | ||||||
| let s:cpo_save = &cpo |  | ||||||
| set cpo&vim |  | ||||||
| let s:is_win = has('win32') || has('win64') |  | ||||||
| 
 |  | ||||||
| function! s:conf(name, default) |  | ||||||
|   let conf = get(g:, 'fzf_vim', {}) |  | ||||||
|   let val = get(conf, a:name, get(g:, 'fzf_' . a:name, a:default)) |  | ||||||
|   return val |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! s:defs(commands) |  | ||||||
|   let prefix = s:conf('command_prefix', '') |  | ||||||
|   if prefix =~# '^[^A-Z]' |  | ||||||
|     echoerr 'g:fzf_command_prefix must start with an uppercase letter' |  | ||||||
|     return |  | ||||||
|   endif |  | ||||||
|   for command in a:commands |  | ||||||
|     let name = ':'.prefix.matchstr(command, '\C[A-Z]\S\+') |  | ||||||
|     if 2 != exists(name) |  | ||||||
|       execute substitute(command, '\ze\C[A-Z]', prefix, '') |  | ||||||
|     endif |  | ||||||
|   endfor |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| call s:defs([ |  | ||||||
| \'command!      -bang -nargs=? -complete=dir Files              call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=? GitFiles                         call fzf#vim#gitfiles(<q-args>, fzf#vim#with_preview(<q-args> == "?" ? { "placeholder": "" } : {}), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=? GFiles                           call fzf#vim#gitfiles(<q-args>, fzf#vim#with_preview(<q-args> == "?" ? { "placeholder": "" } : {}), <bang>0)', |  | ||||||
| \'command! -bar -bang -nargs=? -complete=buffer Buffers         call fzf#vim#buffers(<q-args>, fzf#vim#with_preview({ "placeholder": "{1}" }), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* Lines                            call fzf#vim#lines(<q-args>, <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* BLines                           call fzf#vim#buffer_lines(<q-args>, <bang>0)', |  | ||||||
| \'command! -bar -bang Colors                                    call fzf#vim#colors(<bang>0)', |  | ||||||
| \'command!      -bang -nargs=+ -complete=dir Locate             call fzf#vim#locate(<q-args>, fzf#vim#with_preview(), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* Ag                               call fzf#vim#ag(<q-args>, fzf#vim#with_preview(), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* Rg                               call fzf#vim#grep("rg --column --line-number --no-heading --color=always --smart-case -- ".fzf#shellescape(<q-args>), fzf#vim#with_preview(), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* RG                               call fzf#vim#grep2("rg --column --line-number --no-heading --color=always --smart-case -- ", <q-args>, fzf#vim#with_preview(), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* Tags                             call fzf#vim#tags(<q-args>, fzf#vim#with_preview({ "placeholder": "--tag {2}:{-1}:{3..}" }), <bang>0)', |  | ||||||
| \'command!      -bang -nargs=* BTags                            call fzf#vim#buffer_tags(<q-args>, fzf#vim#with_preview({ "placeholder": "{2}:{3..}" }), <bang>0)', |  | ||||||
| \'command! -bar -bang Snippets                                  call fzf#vim#snippets(<bang>0)', |  | ||||||
| \'command! -bar -bang Commands                                  call fzf#vim#commands(<bang>0)', |  | ||||||
| \'command! -bar -bang Jumps                                     call fzf#vim#jumps(<bang>0)', |  | ||||||
| \'command! -bar -bang Marks                                     call fzf#vim#marks(<bang>0)', |  | ||||||
| \'command! -bar -bang Changes                                   call fzf#vim#changes(<bang>0)', |  | ||||||
| \'command! -bar -bang Helptags                                  call fzf#vim#helptags(fzf#vim#with_preview({ "placeholder": "--tag {2}:{3}:{4}" }), <bang>0)', |  | ||||||
| \'command! -bar -bang Windows                                   call fzf#vim#windows(fzf#vim#with_preview({ "placeholder": "{2}" }), <bang>0)', |  | ||||||
| \'command! -bar -bang -nargs=* -range=% -complete=file Commits  let b:fzf_winview = winsaveview() | <line1>,<line2>call fzf#vim#commits(<q-args>, fzf#vim#with_preview({ "placeholder": "" }), <bang>0)', |  | ||||||
| \'command! -bar -bang -nargs=* -range=% BCommits                let b:fzf_winview = winsaveview() | <line1>,<line2>call fzf#vim#buffer_commits(<q-args>, fzf#vim#with_preview({ "placeholder": "" }), <bang>0)', |  | ||||||
| \'command! -bar -bang Maps                                      call fzf#vim#maps("n", <bang>0)', |  | ||||||
| \'command! -bar -bang Filetypes                                 call fzf#vim#filetypes(<bang>0)', |  | ||||||
| \'command!      -bang -nargs=* History                          call s:history(<q-args>, fzf#vim#with_preview(), <bang>0)']) |  | ||||||
| 
 |  | ||||||
| function! s:history(arg, extra, bang) |  | ||||||
|   let bang = a:bang || a:arg[len(a:arg)-1] == '!' |  | ||||||
|   if a:arg[0] == ':' |  | ||||||
|     call fzf#vim#command_history(bang) |  | ||||||
|   elseif a:arg[0] == '/' |  | ||||||
|     call fzf#vim#search_history(bang) |  | ||||||
|   else |  | ||||||
|     call fzf#vim#history(a:extra, bang) |  | ||||||
|   endif |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| function! fzf#complete(...) |  | ||||||
|   return call('fzf#vim#complete', a:000) |  | ||||||
| endfunction |  | ||||||
| 
 |  | ||||||
| if (has('nvim') || has('terminal') && has('patch-8.0.995')) && (s:conf('statusline', 1) || s:conf('nvim_statusline', 1)) |  | ||||||
|   function! s:fzf_restore_colors() |  | ||||||
|     if exists('#User#FzfStatusLine') |  | ||||||
|       doautocmd User FzfStatusLine |  | ||||||
|     else |  | ||||||
|       if $TERM !~ "256color" |  | ||||||
|         highlight default fzf1 ctermfg=1 ctermbg=8 guifg=#E12672 guibg=#565656 |  | ||||||
|         highlight default fzf2 ctermfg=2 ctermbg=8 guifg=#BCDDBD guibg=#565656 |  | ||||||
|         highlight default fzf3 ctermfg=7 ctermbg=8 guifg=#D9D9D9 guibg=#565656 |  | ||||||
|       else |  | ||||||
|         highlight default fzf1 ctermfg=161 ctermbg=238 guifg=#E12672 guibg=#565656 |  | ||||||
|         highlight default fzf2 ctermfg=151 ctermbg=238 guifg=#BCDDBD guibg=#565656 |  | ||||||
|         highlight default fzf3 ctermfg=252 ctermbg=238 guifg=#D9D9D9 guibg=#565656 |  | ||||||
|       endif |  | ||||||
|       setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f |  | ||||||
|     endif |  | ||||||
|   endfunction |  | ||||||
| 
 |  | ||||||
|   function! s:fzf_vim_term() |  | ||||||
|     if get(w:, 'airline_active', 0) |  | ||||||
|       let w:airline_disabled = 1 |  | ||||||
|       autocmd BufWinLeave <buffer> let w:airline_disabled = 0 |  | ||||||
|     endif |  | ||||||
|     autocmd WinEnter,ColorScheme <buffer> call s:fzf_restore_colors() |  | ||||||
| 
 |  | ||||||
|     setlocal nospell |  | ||||||
|     call s:fzf_restore_colors() |  | ||||||
|   endfunction |  | ||||||
| 
 |  | ||||||
|   augroup _fzf_statusline |  | ||||||
|     autocmd! |  | ||||||
|     autocmd FileType fzf call s:fzf_vim_term() |  | ||||||
|   augroup END |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| if !exists('g:fzf#vim#buffers') |  | ||||||
|   let g:fzf#vim#buffers = {} |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| augroup fzf_buffers |  | ||||||
|   autocmd! |  | ||||||
|   if exists('*reltimefloat') |  | ||||||
|     autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = reltimefloat(reltime()) |  | ||||||
|   else |  | ||||||
|     autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = localtime() |  | ||||||
|   endif |  | ||||||
|   autocmd BufDelete * silent! call remove(g:fzf#vim#buffers, expand('<abuf>')) |  | ||||||
| augroup END |  | ||||||
| 
 |  | ||||||
| inoremap <expr> <plug>(fzf-complete-word)        fzf#vim#complete#word() |  | ||||||
| if s:is_win |  | ||||||
|   inoremap <expr> <plug>(fzf-complete-path)      fzf#vim#complete#path('dir /s/b') |  | ||||||
|   inoremap <expr> <plug>(fzf-complete-file)      fzf#vim#complete#path('dir /s/b/a:-d') |  | ||||||
| else |  | ||||||
|   inoremap <expr> <plug>(fzf-complete-path)      fzf#vim#complete#path("find . -path '*/\.*' -prune -o -print \| sed '1d;s:^..::'") |  | ||||||
|   inoremap <expr> <plug>(fzf-complete-file)      fzf#vim#complete#path("find . -path '*/\.*' -prune -o -type f -print -o -type l -print \| sed 's:^..::'") |  | ||||||
| endif |  | ||||||
| inoremap <expr> <plug>(fzf-complete-file-ag)     fzf#vim#complete#path('ag -l -g ""') |  | ||||||
| inoremap <expr> <plug>(fzf-complete-line)        fzf#vim#complete#line() |  | ||||||
| inoremap <expr> <plug>(fzf-complete-buffer-line) fzf#vim#complete#buffer_line() |  | ||||||
| 
 |  | ||||||
| nnoremap <silent> <plug>(fzf-maps-n) :<c-u>call fzf#vim#maps('n', 0)<cr> |  | ||||||
| inoremap <silent> <plug>(fzf-maps-i) <c-o>:call fzf#vim#maps('i', 0)<cr> |  | ||||||
| xnoremap <silent> <plug>(fzf-maps-x) :<c-u>call fzf#vim#maps('x', 0)<cr> |  | ||||||
| onoremap <silent> <plug>(fzf-maps-o) <c-c>:<c-u>call fzf#vim#maps('o', 0)<cr> |  | ||||||
| 
 |  | ||||||
| let &cpo = s:cpo_save |  | ||||||
| unlet s:cpo_save |  | ||||||
| 
 |  | ||||||
							
								
								
									
										15
									
								
								.vim/vimrc
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								.vim/vimrc
									
									
									
									
									
								
							| @ -120,21 +120,6 @@ inoremap <tab> <C-R>=CleverTab()<CR> | |||||||
| "packadd termdebug | "packadd termdebug | ||||||
| "let g:termdebugger = "egdb" | "let g:termdebugger = "egdb" | ||||||
| 
 | 
 | ||||||
| " ########################################### |  | ||||||
| " # VIM FZF |  | ||||||
| " ########################################### |  | ||||||
| let g:fzf_layout = { 'down': '60%' } |  | ||||||
| let g:fzf_action = { 'ctrl-t': 'tab split', 'ctrl-x': 'vsplit' } |  | ||||||
| 
 |  | ||||||
| noreabbrev <expr> ts getcmdtype() == ":" && getcmdline() == 'ts' ? 'FZFTselect' : 'ts' |  | ||||||
| nmap gt <Plug>(fzf_tags) |  | ||||||
| 
 |  | ||||||
| nnoremap <leader>g :RG <C-R>=expand("<cword>")<CR><CR> |  | ||||||
| nnoremap <leader>f :Files<CR> |  | ||||||
| nnoremap <leader>b :Buffers<CR> |  | ||||||
| nnoremap <leader>t :Tags<CR> |  | ||||||
| nnoremap <leader>h :History<CR> |  | ||||||
| 
 |  | ||||||
| " ########################################### | " ########################################### | ||||||
| " # TAGBAR | " # TAGBAR | ||||||
| " ########################################### | " ########################################### | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 c0dev0id
						c0dev0id