本页面介绍了安装fzf(一个命令行模糊查找器)的各种方法,并解释了安装过程如何设置shell集成组件。有关从源代码构建fzf以进行开发的信息,请参阅从源代码构建。
fzf可以通过多种方法安装,包括包管理器、安装脚本或直接二进制下载。安装过程通常包含两个主要组件
fzf二进制可执行文件在macOS上,fzf可以使用Homebrew或MacPorts安装。
请注意,通过包管理器安装时,shell集成必须单独设置。
fzf在大多数Linux发行版软件包仓库中可用
| 包管理器 | Linux发行版 | 命令 |
|---|---|---|
| APK | Alpine Linux | sudo apk add fzf |
| APT | Debian 9+/Ubuntu 19.10+ | sudo apt install fzf |
| DNF | Fedora | sudo dnf install fzf |
| Pacman | Arch Linux | sudo pacman -S fzf |
| Portage | Gentoo | emerge --ask app-shells/fzf |
| XBPS | Void Linux | sudo xbps-install -S fzf |
| Zypper | openSUSE | sudo zypper install fzf |
跨平台包管理器
在Windows上,支持多种包管理器
Git安装方法使用主install脚本,该脚本实现了全面的平台检测、二进制管理和shell集成设置
install 脚本提供了这些命令行选项,定义在install33-65
| 选项 | 可变 | 功能 |
|---|---|---|
--all | auto_completion=1,key_bindings=1 | 启用所有功能 |
--xdg | prefix=${XDG_CONFIG_HOME} | 使用XDG目录结构 |
--key-bindings / --no-key-bindings | key_bindings | 控制键绑定设置 |
--completion / --no-completion | auto_completion | 控制模糊完成 |
--update-rc / --no-update-rc | update_config | 控制shell RC文件修改 |
--no-bash / --no-zsh / --no-fish | shells | 排除特定shell |
来源:install67-68 install83-103 install105-113 install135-164 install167-189 install219-285 install297-338 install363-384
安装脚本实现了几个关键的二进制管理功能
check_binary() 函数此函数位于install83-103
FZF_DEFAULT_OPTS= "$fzf_base"/bin/fzf --versionversion=0.62.0匹配download() 函数此函数位于install135-164
$fzf_base/bin 目录https://github.com/junegunn/fzf/releases/download/v$version/${platform_file}try_curl()然后try_wget()下载chmod +x fzf设置可执行权限位于install167-189的平台检测将系统架构映射到发布文件
fzf通过GitHub版本发布为多个平台提供预编译的二进制文件。二进制分发系统由GoReleaser配置和特定于平台的构建目标管理。
.goreleaser.yml 配置定义了构建目标 .goreleaser.yml9-41
| 平台 | 架构 | 备注 |
|---|---|---|
darwin | amd64,arm64 | macOS Intel/Apple Silicon |
linux | amd64,arm,arm64,loong64,ppc64le,s390x | 各种Linux架构 |
windows | amd64,arm,arm64 | Windows平台 |
freebsd | amd64 | FreeBSD(有限的ARM支持) |
openbsd | amd64 | OpenBSD(有限的ARM支持) |
发布二进制文件遵循以下模式:fzf-{version}-{os}_{arch}.{ext}
安装脚本平台检测示例install171-187
fzf-0.62.0-darwin_arm64.tar.gzfzf-0.62.0-linux_amd64.tar.gzfzf-0.62.0-windows_amd64.zipfzf-0.62.0-freebsd_amd64.tar.gzPowerShell安装脚本install.ps1 处理Windows特有的安装 install.ps11-66
install.ps1 中的关键函数check_binary() 函数 install.ps15-24
$fzf_base\bin\fzf.exe --version$version="0.62.0"匹配download() 函数 install.ps126-61
https://github.com/junegunn/fzf/releases/download/v$version/$fileInvoke-WebRequest (v3+) 或 Net.WebClient (旧版本)Microsoft.PowerShell.Archive\Expand-Archive提取ZIP压缩包icacls设置文件权限Makefile 定义了特定于架构的构建目标 Makefile29-74
运行时架构检测使用uname -m映射Makefile42-74来选择合适的二进制目标。
来源:.goreleaser.yml9-41 install171-187 install.ps11-66 Makefile29-74
fzf中的shell集成是通过嵌入在main.go和由安装脚本生成的shell特定配置文件来实现的。
main.go 文件使用Go的embed 指令嵌入shell脚本 main.go17-33
这些脚本可以通过命令行标志访问
fzf --bash:输出bash的键绑定和补全fzf --zsh:输出zsh的键绑定和补全fzf --fish:输出fish的键绑定来源:main.go48-82 install243-285 install287-295 install363-384
安装脚本使用这些关键函数生成特定于shell的配置文件
append_line() 函数此函数位于install297-338
update,line,file,pattern\grep -nF检查现有配置行Bash/Zsh 设置 install243-285
Fish 设置 install287-295
fish_user_paths通用变量fish_user_key_bindings.fish函数fzf --fish | source进行键绑定append_line() 函数将fzf集成到shell RC文件中 install356-361
~/.bashrc${ZDOTDIR:-~}/.zshrc${XDG_CONFIG_HOME:-$HOME/.config}/fish/functions/来源:install297-338 install356-361 install363-384
安装会创建一个分层文件结构,其布局根据安装选项而有所不同
当使用--xdg 标志时 install44-47布局会改变
安装脚本使用这些关键路径变量install9-12
| 可变 | 默认值 | XDG 值 |
|---|---|---|
prefix | '~/.fzf' | '"${XDG_CONFIG_HOME:-$HOME/.config}"/fzf/fzf' |
prefix_expand | ~/.fzf | ${XDG_CONFIG_HOME:-$HOME/.config}/fzf/fzf |
fish_dir | ${XDG_CONFIG_HOME:-$HOME/.config}/fish | 相同 |
来源: install9-12 install44-47 install287-295 install359-361 install364-384
要升级现有的 fzf 安装
| 安装方法 | 升级命令 |
|---|---|
| Git | cd ~/.fzf && git pull && ./install |
| Homebrew | brew update && brew upgrade fzf |
| MacPorts | sudo port upgrade fzf |
| Chocolatey | choco upgrade fzf |
| vim-plug | :PlugUpdate fzf |
来源: README.md232-244
fzf 仓库包含一个卸载脚本,用于移除 fzf 及其所有 shell 集成组件
此脚本将:
如果您使用 --xdg 选项安装,请使用此选项从 XDG 目录中移除文件。
来源: uninstall1-115
安装脚本实现了全面的二进制文件验证,以确保正确安装。
Unix/Linux (install 脚本) install83-103
Windows (install.ps1) install.ps15-24
二进制版本通过 ldflags 在构建时设置 Makefile27
main.go 中的版本变量 main.go14-15
版本输出在主函数中处理 main.go75-82
来源: install83-103 install.ps15-24 main.go14-15 main.go75-82 Makefile27
缺少 shell 集成:如果 shell 集成不起作用,请确保您的 shell 配置文件源自 fzf shell 文件。您可能需要重启 shell 或手动加载这些文件。
未找到二进制文件:请确保 fzf 二进制文件在您的 PATH 中。安装脚本会尝试将其添加到您的 PATH,但您可能需要手动完成此操作。
权限问题:请确保您有在目标目录中安装所需的权限。对于系统范围的包管理器安装,请考虑使用 sudo。
版本不兼容:如果您遇到兼容性问题,请检查 fzf 版本,并确保其与您的操作系统和 shell 版本兼容。
来源: install83-103 install350-398
在 macOS 上,请注意,当使用 bash 时,您应确保您的 .bash_profile 引用 .bashrc,因为安装脚本默认会修改 .bashrc。
在 Windows 上,shell 集成在 WSL(适用于 Linux 的 Windows 子系统)、Git Bash 或 MSYS2 环境中效果最佳。原生 Windows 命令提示符和 PowerShell 的功能有限。
在 Linux 上,请检查您的发行版包管理器是否将 shell 集成文件安装在与 fzf 脚本默认假定位置不同的位置。您可能需要手动找到并加载它们。
check_binary() 函数download() 函数install.ps1 中的关键函数append_line() 函数