前置条件
Mac
和Linux
我都比较习惯使用 zsh + tmux 做为终端工具,所以接下来我们谈论在 zsh 模式下安装 fzf 以及他的使用。
介绍(Introduce)
-
它是一个用于命令行的交互式 Unix 过滤器,可以与任何列表一起使用;文件 、命令历史记录 、进程 、主机名 、书签 、git 提交等。
-
主要特性:
- 轻便且无依赖
- 非常快
- 一套综合的功能
- 灵活的展示页面
- 支持
VIM/NEOVIM
插件、按键绑定、自动提示等
安装(Install)
fzf
提供源码,如果我们只想要一个工具命令,而不考虑 VIM 等的兼容问题,那么我们可以直接安装一个可执行程序- Ubuntu :
echo y | sudo apt-get install fzf
- Mac :
echo y | sudo brew install fzf
- Ubuntu :
- 开头我也说了,我们需要在 zsh 环境下且我也是个 VIM 控,所以源码安装就必须操作起来了。
shell
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
- 在
install
的过程中可能会涉及到外网的访问,所以这里最好还是能翻墙安装下。
多系统安装方式
Package Manager | Linux Distribution | Command |
---|---|---|
APK | Alpine Linux | sudo apk add fzf |
APT | Debian 9+/Ubuntu 19.10+ | sudo apt install fzf |
Conda | conda install -c conda-forge fzf |
|
DNF | Fedora | sudo dnf install fzf |
Nix | NixOS, etc. | nix-env -iA nixpkgs.fzf |
Pacman | Arch Linux | sudo pacman -S fzf |
pkg | FreeBSD | pkg install fzf |
pkgin | NetBSD | pkgin install fzf |
pkg_add | OpenBSD | pkg_add fzf |
Portage | Gentoo | emerge --ask app-shells/fzf |
XBPS | Void Linux | sudo xbps-install -S fzf |
Zypper | openSUSE | sudo zypper install fzf |
fzf-tmux script
- 顾名思义知道他是在
Tmux
环境下使用的 fzf 脚本插件。
- 查看当前项目分之列表,仅展示 10 个 , 这里经过测试在
tmux
环境下使用fzf
和fzf-tmux
效果是一样的。
shell
git branch | fzf-tmux -d 10
命令行模式下快捷键绑定
- 在我们安装的时候会看到在设置我们的快捷键,当然我们是在 zsh 中。
- 默认的设置了 3 个快捷键。接下来我们使用下三个快捷键。
Ctrl + T
- 他的作用就是将我们当前的文件夹进
- fzf 主要的功能就是模糊搜索,这样我们只需要输入关键信息就可以搜索到了。这里结合 GitHub - sharkdp/bat: A cat(1) clone with wings.. 可以完成对文件的预览。按照
github
上安装即可,然后在我们的环境配置文件中配置下变量FZF_CTRL_T_OPTS
。
shell
Set FZF_CTRL_T_COMMAND to override the default command
Set FZF_CTRL_T_OPTS to pass additional options to fzf
-
我这里是在
Ubuntu
安装的 bat ,他的安装名叫batcat
,你可以按照官网给的建议给他建立一个软连接,建议不要用别名的方式,别名的方式在某些场景下会出现不生效。 -
配置在
~/.zshrc
中
shell
export FZF_CTRL_T_OPTS="
--preview 'batcat -n --color=always {}'
--bind 'ctrl-/:change-preview-window(down|hidden|)'"
- 目前不知道如何通过快捷键滚动预览窗口的内容,只能通过鼠标进行滚动。
Ctrl + R
- 渲染处历史记录,将选中的命令粘贴到命令行中 h
-
这个是我最喜欢的快捷键了。因为我们有的时候突然想执行之前的命令,但是太长不好记,虽然 zsh 有通过历史记录提示的插件,但是他也是根据开头进行匹配的,而 fzf 本身的模糊功能更加灵活。这样我只需要知道关键字就可以了。
-
这里需要注意的是
Ctrl+R
按一次和按两次效果不一样的。
-
我们能够发现第一次是
+
模式,这里我的理解是已单词为整体匹配。而第二次Ctrl+R
则未-
模式,它是按照每个字母进行匹配的,实际使用场景中应该是+
模式更为常用吧。 -
同样他也支持配置环境变量的方式更改执行参数
shell
Set FZF_CTRL_R_OPTS to pass additional options to fzf
- 官方给了一个预览命令全部内容和复制命令的配置
shell
export FZF_CTRL_R_OPTS="
--preview 'echo {}' --preview-window up:3:hidden:wrap
--bind 'ctrl-/:toggle-preview'
--bind 'ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort'
--color header:italic
--header 'Press CTRL-Y to copy command into clipboard'"
- 我的 Ubuntu 是通过 xsel 来实现剪切板管理的,这里
pbcopy
换对应的 xsel 命令即可。
Alt + C
-
一个是文件路径,一个是历史记录,还剩下一个是文件目录。因为我们需要经常通过终端进行路径的跳转。所以这个操作也是很常用的。
-
同样我们可以定制对文件目录的预览,官方给的是按树形结构预览
ini
export FZF_ALT_C_OPTS="--preview 'tree -C {}'"
- 我的 mac 上
Alt + C
被yabai
占用了。所以这里我选择改为Ctrl+E
正好Luarnvim
中快捷键操作文件目录的快捷键对应为E
按键。