linux的终端下如何快速查找文件;历史记录 - FZF 模糊带你解决

前置条件

  • MacLinux 我都比较习惯使用 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
  • 开头我也说了,我们需要在 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 环境下使用 fzffzf-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 + Cyabai 占用了。所以这里我选择改为 Ctrl+E 正好 Luarnvim 中快捷键操作文件目录的快捷键对应为 E 按键。
相关推荐
拖孩2 分钟前
微信群太多,管理麻烦?那试试接入AI助手吧~
前端·后端·微信
Humbunklung11 分钟前
Rust枚举:让数据类型告别单调乏味
开发语言·后端·rust
Winner130015 分钟前
Debian、Buildroot 和 Ubuntu 都是基于 Linux 的系统区别
linux·ubuntu·debian
radient18 分钟前
Golang-GMP 万字洗髓经
后端·架构
Code季风19 分钟前
Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)
前端·微服务·架构·go·gin
蓝倾19 分钟前
如何使用API接口实现淘宝商品上下架监控?
前端·后端·api
鹏程十八少20 分钟前
9.Android 设计模式 模板方法 在项目中的实战
架构
舂春儿21 分钟前
如何快速统计项目代码行数
前端·后端
Pedantic22 分钟前
我们什么时候应该使用协议继承?——Swift 协议继承的应用与思
前端·后端
Codebee23 分钟前
如何利用OneCode注解驱动,快速训练一个私有的AI代码助手
前端·后端·面试