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 按键。
相关推荐
aherhuo2 分钟前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
檀越剑指大厂29 分钟前
【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较
linux·运维·服务器
车载诊断技术1 小时前
电子电气架构 --- 什么是EPS?
网络·人工智能·安全·架构·汽车·需求分析
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
2301_819287123 小时前
ce第六次作业
linux·运维·服务器·网络
武汉联从信息3 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
刘大辉在路上3 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
Aileen_0v03 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
州周4 小时前
Ftp目录整个下载
linux·服务器·数据库
Jackey_Song_Odd4 小时前
Ubuntu 24.04.1 解决部分中文字符(门、径)显示错误的问题
linux·ubuntu