PSFzf is a PowerShell module that wraps fzf, a fuzzy file finder for the command line.
To change to a user selected directory:
Get-ChildItem . -Recurse -Attributes Directory | Invoke-Fzf | Set-Location
To edit a file:
Get-ChildItem . -Recurse -Attributes !Directory | Invoke-Fzf | % { notepad $_ }
For day-to-day usage, see the helper functions included with this module.
Press Ctrl+t to start PSFzf to select provider paths. PSFzf will parse the current token and use that as the starting path to search from. If current token is empty, or the token isn't a valid path, PSFzf will search below the current working directory.
Multiple items can be selected. If more than one is selected by the user, the results are returned as a comma separated list. Results are properly quoted if they contain whitespace.
Press Ctrl+r to start PSFzf to select a command in the command history saved by PSReadline. PSFzf will insert the command into the current line, but it will not execute the command.
PSFzf does not override Ctrl+r by default. To confirm that you want to override PSReadline's chord binding, use the Set-PsFzfOption
command:
# replace 'Ctrl+t' and 'Ctrl+r' with your preferred bindings:
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'
Press Alt+c to start PSFzf to select a directory. Set-Location
will be called with the selected directory.
Press Alt+a to start PSFzf to select command line arguments used in PSReadline history. The picked argument will be inserted in the current line. The line that would result from the selection is shown in the preview window.
PSFzf can replace the standard tab completion:
Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { Invoke-FzfTabCompletion }
To activate continuous completion, press the directory separator character to complete the current selection and start tab completion for the next part of the container path.
PSFzf supports specialized tab expansion with a small set of commands. After typing the default trigger command, which defaults to "**
", and press Tab, PsFzf tab expansion will provide selectable list of options.
The following commands are supported:
Command | Notes |
---|---|
git |
Uses posh-git for providing tab completion options. Requires at least version 1.0.0 Beta 4. |
Get-Service , Start-Service , Stop-Service |
Allows the user to select between the installed services. |
Get-Process , Start-Process |
Allows the user to select between running processes. |
To override the trigger command, set FZF_COMPLETION_TRIGGER
to your preferred trigger sequence.
Use the following command to enable tab expansion:
Set-PsFzfOption -TabExpansion
Invoke-Fzf
works with input from a pipeline. However, if you make your selection before fzf has finished receiving and parsing from standard in, you might see a Stopped pipeline input
error. This is because PSFzf must throw an exception to cancel pipeline processing. If you pipe the output of Invoke-Fzf
to whatever action you wish to do based on your selection, the action will occur. The following will not work if the pipeline is cancelled:
Set-Location (Get-ChildItem . -Recurse | ? { $_.PSIsContainer } | Invoke-Fzf)
The following will work if the pipeline is cancelled:
Get-ChildItem . -Recurse | ? { $_.PSIsContainer } | Invoke-Fzf | Set-Location
PsFzf supports overriding behavior by setting these fzf environment variables:
FZF_DEFAULT_COMMAND
- The command specified in this environment variable will override the default command when PSFZF detects that the current location is a file system provider.FZF_CTRL_T_COMMAND
- The command specified in this environment variable will be used when Ctrl+t is pressed by the user.FZF_Alt_C_COMMAND
- The command specified in this environment variable will be used when Alt+c is pressed by the user.
In addition to its core function Invoke-Fzf, PSFzf includes a set of useful functions and aliases:
Function | Alias | Description |
---|---|---|
Invoke-FuzzyEdit |
fe |
Starts an editor for the selected files in the fuzzy finder. |
Invoke-FuzzyFasd |
ff |
Starts fzf with input from the files saved in fasd (non-Windows) or fasdr (Windows) and sets the current location. |
Invoke-FuzzyZLocation |
fz |
Starts fzf with input from the history of ZLocation and sets the current location. |
Invoke-FuzzyGitStatus |
fgs |
Starts fzf with input from output of the git status function. |
Invoke-FuzzyHistory |
fh |
Rerun a previous command from history based on the user's selection in fzf. |
Invoke-FuzzyKillProcess |
fkill |
Runs Stop-Process on processes selected by the user in fzf. |
Invoke-FuzzySetLocation |
fd |
Sets the current location from the user's selection in fzf. |
Set-LocationFuzzyEverything |
cde |
Sets the current location based on the Everything database. |
Follow the installation instructions for fzf before installing PSFzf. PSFzf will run Get-Command
to find fzf
in your path.
The latest version of fzf
is available via Chocolatey, or you can download the fzf
binary and place it in your path. Run Get-Command fzf*.exe
to verify that PowerShell can find the executable.
PSFzf has been tested under PowerShell 5.0 & 6.0.
Use Homebrew or download the binary and place it in your path. Run Get-Command fzf*
to verify that PowerShell can find the executable.
PSFzf has been tested under PowerShell 6.0.
PSFzf has been tested under PowerShell 6.0 in the Windows Subsystem for Linux.
PSFzf is available on the PowerShell Gallery. PSReadline should be imported before PSFzf as PSFzf registers PSReadline key handlers listed in the PSReadline integration section.
Invoke-FuzzyFasd
requires Fasdr to be previously installed under Windows. Other platforms require Fasd to be installed.Invoke-FuzzyZLocation
requires ZLocation and works only under Windows.Set-LocationFuzzyEverything
works only under Windows and requires PSEverything to be previously installed.Invoke-FuzzyGitStatus
requires git to be installed.