FZF Usage Guide
I've been using FZF for a little while, but not very effectively. So thought I'd get down some usage guides to help me when I turn to it in future and get the muscle memory firing.
As ever, fzf --help
is your friend. In Vim :help FZF
.
From Terminal
Opening a file with fzf using bash expansion. Below will run fzf where you can type to find the target file, when you have the target file selected hit enter and it will be opened in Vim.
vim $(fzf)
You can also run fzf in a tmux pane.
vim $(fzf-tmux)
Open multiple files, tab to select.
vim $(fzf -m)
From Vim
I have the following in my .vimrc
let mapleader = "\<Space>"
nnoremap <leader>o :FZF -m<cr>
nnoremap <leader>r :FZF -m ~/home/tome/repos<cr>
nnoremap <leader>1 :FZF -m ../<cr>
nnoremap <leader>2 :FZF -m ../../<cr>
nnoremap <leader>3 :FZF -m ../../../<cr>
This means I can hit Space + o to find files in current directory, with multi select. Then Ctrl + t to open the selections in tabs or enter if only 1 file selected.
CtrlP allowed you to switch directory, this doesn't seem to be possible with FZF so the mappings with numbers allow me to open FZF in parent directories.
Sometimes I only need to search git repositories, hence r mapping above. In addition to this you can search git commits (once you have vim-fugitive installed) with :Commits. To run this in a new tab:
:tabnew | :Commits
In vim gt
and Gt
allow you to select next and previous tabs, you can also do 1gt
, 2gt
to move to a tab by order. This can get a bit cumbersome, FZF allows you to run a :Buffers
command that will open up the fzf interface so you can quickly select a buffer to open, by the provided index or by typing.
:Buffers
For convenience I use the below mapping.
nnoremap <leader>b :Buffers<cr>
Want to switch color schemes in Vim
:Colors
If you have the Silver Searcher installed ( sudo apt-get install silversearcher-ag
on Ubuntu) you can run :Ag some_pattern
to find files containing the pattern.
To search through lines in the current buffer use Lines which will allow you to find any line by typing text that is in that line.
Use :Locate
to find files with specific extension ( at least that's how I started using this ), e.g. :Locate .md
If you use Vim you forget mappings occasionally ( hard to keep track when you get plugin bloat), well :Commands
has got your back. It will show you all the available commands in Vim, including for plugins.
Below is from :help FZF
with all Commands listed.
-----------------+--------------------------------------------------
Command | List
-----------------+--------------------------------------------------
Files [PATH] | Files (similar to `:FZF` )
GitFiles | Git files
Buffers | Open buffers
Colors | Color schemes
Ag [PATTERN] | {ag}{5} search result (ALT-A to select all, ALT-D to deselect all)
Lines | Lines in loaded buffers
BLines | Lines in the current buffer
Tags [QUERY] | Tags in the project ( `ctags -R` )
BTags [QUERY] | Tags in the current buffer
Marks | Marks
Windows | Windows
Locate PATTERN | `locate` command output
History | `v:oldfiles` and open buffers
History: | Command history
History/ | Search history
Snippets | Snippets ({UltiSnips}{6})
Commits | Git commits (requires {fugitive.vim}{7})
BCommits | Git commits for the current buffer
Commands | Commands
Maps | Normal mode mappings
Helptags | Help tags [1]
-----------------+--------------------------------------------------
If you don't have this plugin, you need it!! It's excellent.