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 按键。
相关推荐
一水鉴天6 分钟前
整体设计 之 绪 思维导图引擎 :思维价值链分层评估的 思维引导和提示词导航 之 引 认知系统 之8 之 序 认知元架构 之3(豆包助手 之5)
架构·认知科学
愿时间能学会宽恕12 分钟前
SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全
spring boot·后端·安全
CodeSheep27 分钟前
稚晖君又开始摇人了,有点猛啊!
前端·后端·程序员
禁默27 分钟前
已知 inode 号,如何操作文件?Ext 文件系统增删查改底层逻辑拆解
linux·服务器·数据库
小宁爱Python31 分钟前
Django 从环境搭建到第一个项目
后端·python·django
许怀楠33 分钟前
【Linux】基础指令(下)
linux
uzong40 分钟前
深入浅出:画好技术图
后端·架构
咕咚.萌西1 小时前
RISC-V开发环境搭建
linux·硬件架构·risc-v
IT_陈寒1 小时前
Java性能优化:从这8个关键指标开始,让你的应用提速50%
前端·人工智能·后端
程序员清风1 小时前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
java·后端·面试