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 按键。
相关推荐
dessler11 分钟前
Linux系统-ubuntu系统安装
linux·运维·云计算
AskHarries1 小时前
Java字节码增强库ByteBuddy
java·后端
荒Huang1 小时前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
佳佳_1 小时前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
许野平2 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
hjjdebug3 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯3 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流3 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
斑布斑布3 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
Spring_java_gg3 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全