使用 fzf 实现文件快速查找、打开及执行

使用 fzf 实现文件快速查找、打开及执行

本文将介绍如何安装 fzf,配置文件,以便使用 cdfcdd 函数来快速查找、打开、编辑、编译并运行文件或快速进入指定目录。cdf 是一个文件查找和执行工具,cdd 是一个目录查找工具。默认情况下,cdf 使用 Visual Studio Code (code) 打开文件,同时支持 vimgccg++python 等多种执行选项。


步骤 1:安装 fzf

fzf 是一个命令行模糊查找工具,我们需要安装它以支持模糊搜索。可以通过以下命令来安装:

  • 使用 Homebrew (macOS/Linux)

    brew install fzf
    
  • Ubuntu/Debian

    sudo apt update
    sudo apt install fzf
    
  • 安装脚本(适用于大多数系统)

    git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
    ~/.fzf/install
    

    按提示完成安装。

  • 更多安装选项:参考 fzf 的官方文档 fzf GitHub。


步骤 2:将 cdfcdd 函数添加到 Shell 配置文件

为了在终端中直接调用 cdfcdd 函数,我们需要将这两个函数添加到 Shell 配置文件(如 .bashrc.zshrc)中。

将函数添加到配置文件
  1. 打开 Shell 配置文件:运行以下命令打开配置文件:

    # 对于 Bash 用户
    vim ~/.bashrc# 对于 Zsh 用户
    vim ~/.zshrc
    
  2. 复制并粘贴以下代码到配置文件中

    # 用于模糊查找并打开或执行指定文件,默认使用 VS Code 打开
    function cdf() {local search_name="${1:-}"  # 第一个参数为搜索名称(文件名或路径)local editor="${2:-code}"   # 第二个参数为编辑器或执行器,默认为 code (VS Code)# 捕获 Ctrl+C 的信号trap 'return' INT# 查找当前目录及其下 2 层子目录的所有文件,返回文件名,并交由 fzf 进行正则表达式过滤local file=$(find . -maxdepth 2 -type f -exec basename {} \; 2>/dev/null | fzf --query="$search_name" --extended --select-1 --exit-0)# 检查 fzf 的退出状态码,非零时直接退出函数if [[ $? -ne 0 ]]; thentrap - INT  # 取消 trap,恢复默认行为returnfi# 如果 file 为空(用户未选择),也退出if [[ -z "$file" ]]; thentrap - INTreturnfi# 重新查找文件的完整路径local full_path=$(find . -maxdepth 2 -type f -name "$file" 2>/dev/null | head -n 1)trap - INT  # 取消 trap,恢复默认行为# 根据第二个参数决定是打开编辑器、编译或执行代码if [[ "$editor" == "code" ]]; then# 默认使用 VS Code 打开文件code "$full_path"else# 使用指定的编辑器或编译器case "$editor" invim)vim "$full_path"  # 使用 vim 打开文件;;gcc)local output_file="${file%.*}.out"  # 将输出文件命名为 '文件名.out'gcc "$full_path" -o "$output_file" && echo "Compiled to $output_file"if [[ -x "$output_file" ]]; thenecho "Executing $output_file..."./"$output_file"fi;;g++)local output_file="${file%.*}.out"  # 将输出文件命名为 '文件名.out'g++ "$full_path" -o "$output_file" && echo "Compiled to $output_file"if [[ -x "$output_file" ]]; thenecho "Executing $output_file..."./"$output_file"fi;;python)python "$full_path"  # 运行 Python 文件;;*)echo "不支持的编辑器或执行器:$editor";;esacfi
    }# 用于模糊查找并进入包含指定名称的文件夹
    function cdd() {local search_name="${1:-}"  # 使用输入的关键字(如果没有提供,则为空)# 查找所有目录,递归遍历,并交由 fzf 进行正则表达式过滤local dir=$(find ~ -type d 2>/dev/null | fzf --query="$search_name" --extended --select-1 --exit-0)# 检查 fzf 的退出状态码,非零时直接退出函数if [[ $? -ne 0 ]]; thenreturnfi# 如果 dir 为空(用户未选择),也退出if [[ -z "$dir" ]]; thenreturnficd "$dir"
    }
    
  3. 保存并关闭配置文件:按 Esc 键,然后输入 :wq 保存并退出编辑器。

  4. 刷新配置文件:在终端中运行以下命令,使新配置立即生效。

    # 如果使用 Bash
    source ~/.bashrc# 如果使用 Zsh
    source ~/.zshrc
    

步骤 3:使用 cdfcdd 函数

cdf 函数

cdf 函数用于查找、打开和执行文件。默认情况下,它会使用 VS Code 打开文件。如果指定了不同的执行器(如 vimgccg++python),它会根据指定执行器执行相应操作。

用法

cdf <文件名搜索关键字> [执行器]
  • <文件名搜索关键字>:文件名或文件名部分。
  • [执行器]:可选参数,用于指定打开文件的编辑器或执行器,支持 codevimgccg++python 等。

示例

# 默认使用 VS Code 打开文件
cdf "example.c"# 使用 vim 打开文件
cdf "example.c" vim# 使用 gcc 编译并运行文件
cdf "example.c" gcc# 使用 g++ 编译并运行文件
cdf "example.cpp" g++# 运行 Python 文件
cdf "script.py" python
cdd 函数

cdd 函数用于在 ~ 目录及其子目录中查找并进入包含指定名称的文件夹。

用法

cdd <文件夹名称>
  • <文件夹名称>:要查找的文件夹名称或部分名称。

示例

# 查找并进入名称包含 "Documents" 的文件夹
cdd "Documents"# 查找并进入名称包含 "projects" 的文件夹
cdd "projects"

注意事项

  • 查找深度cdf 函数默认只递归查找当前目录下 2 层子目录(通过 -maxdepth 2 实现)。如果需要更深的层级,可以将 -maxdepth 2 修改为适合的值。
  • 编译并执行:对于 gccg++cdf 函数会编译指定文件并将输出文件命名为 <文件名>.out。编译成功后会自动执行生成的可执行文件。
  • 执行权限:确保生成的可执行文件具有执行权限。如果权限不足,可以使用 chmod +x output_file 来授予执行权限。
  • 环境变量:确保 code(VS Code 命令行)和其他编译器(如 gccg++python)已正确添加到系统路径中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4447.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

为何打造智慧园区?给我们带来哪些便利

在当今社会&#xff0c;智慧园区作为一种创新的城市发展模式&#xff0c;受到越来越多城市规划者和开发商的关注。打造智慧园区旨在通过信息技术、智能设备和数据互联等手段&#xff0c;提升城市管理的效率、改善居民生活质量、推动可持续发展。下面将探讨为什么要打造智慧园区…

6:arm condition code flags详细的讲解

目录 6.1 arm的 condition code flag 的详细讲解 6.1.1C 6.1.2Z 6.1.3N 6.1.4V 6.1 arm的 condition code flag 的详细讲解 在这篇文章中&#xff0c;我更加严格与严谨的讲解一下 arm的四个condition code flags&#xff0c;因为这个在汇编中还是非常重要的。 6.1.1C 在…

scala学习记录,Set,Map

set&#xff1a;集合&#xff0c;表示没有重复元素的集合&#xff0c;特点&#xff1a;唯一 语法格式&#xff1a;val 变量名 Set [类型]&#xff08;元素1&#xff0c;元素2...&#xff09; 可变不可变 可变&#xff08;mutable&#xff09;可对元素进行添加&#xff0c;删…

Linux权限解析:用户、组和权限的协同

​​​​​​​在Linux系统中&#xff0c;权限决定了谁能做什么。本文将指导你如何掌握这些权限&#xff0c;以确保你的系统既安全又高效&#xff01; 目录 1.shell命令及其运行原理 2.Linu权限的概念 (1) 用户 (2) 切换用户命令su (3) 指令提权命令sudo (4) 什么是权限…

Centos Linux 7 搭建邮件服务器(postfix + dovecot)

准备工作 1. 一台公网服务器&#xff08;需要不被服务商限制发件收件的&#xff0c;也就是端口25、110、143、465、587、993、995不被限制&#xff09;&#xff0c;如有防火墙或安全组需要把这些端口开放 2. 一个域名&#xff0c;最好是com cn org的一级域名 3. 域名备案&am…

Python绘制完整正弦余弦函数曲线

1&#xff0c;将正弦函数&#xff0c;余弦函数及坐标轴绘制在同一个界面方便对比观察&#xff0c;不同函数的曲线变化 import turtle # 导入turtle图形库&#xff0c;用于绘图 import math # 导入math库&#xff0c;用于数学计算&#xff0c;如三角函数# 设置绘图窗口 scre…

TON链上的代币开发与小程序开发:模式与要求

TON&#xff08;The Open Network&#xff09;链是由Telegram团队开发的区块链网络&#xff0c;旨在提供更快、更高效、更去中心化的基础设施&#xff0c;支持智能合约、去中心化应用&#xff08;DApp&#xff09;以及多种数字资产和代币的创建。随着TON链生态的不断成熟&#…

CTF中的phar反序列化 [SWPU 2018]SimplePHP

以[SWPU 2018]SimplePHP 这道题为例 页面可以查看文件和上传文件 点击查看文件,发现url变成/file.php?file 猜测可能存在文件包含,可以读取文件 尝试读取index.php文件 回显了源码 再读取base.php 只看最后有信息的代码: <!--flag is in f1ag.php--> 提示flag在f1…

图文并茂java源码解析-HashMap

文章目录 HashMap结构HashMap的Entry了解的哈希冲突解决方法有哪些?HashMap是线程安全的吗?hashmap的put过程介绍一下jdk8的获取hash的方法jdk8的获取索引的方法 hashmap的put过程介绍一下hashmap 调用get方法一定安全吗?HashMap一般用什么做Key?为啥String适合做Key呢?为…

【JavaEE】认识进程

一、操作系统&#xff08;operating system&#xff09; 操作系统是一组做计算机资源管理的软件的统称&#xff0c;它能够把一个计算机上的所有硬件资源和软件资源都管理好&#xff1a;能够管理好各种硬件资源&#xff0c;让他们很好的相互配合&#xff0c;能够管理好各种软件…

Android——横屏竖屏

系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况&#xff0c;Android设计了一中配置变更机制&#xff0c;在指定的环境配置发生变更之时&#xff0c;无需重启活动页面&#xff0c;只需执行特定的变更行为。该机制的视线过程分为两步&#xff1a; 修改 Androi…

基于卷积神经网络(CNN)的时间序列预测,15个输入1个输出,可以更改数据集,MATLAB代码

1. 数据收集与预处理 数据清洗&#xff1a;处理缺失值、异常值等。特征工程&#xff1a;提取有助于预测的特征。数据标准化&#xff1a;将时间序列数据标准化&#xff0c;使其具有零均值和单位方差&#xff0c;有助于模型训练。滑动窗口划分&#xff1a;将时间序列数据划分为多…

css 文字一行没有放满不进行换行

在开发过程中&#xff0c;经常会出现一行的文字没有放满 就出现了换行的情况 word-break: break-all;

社区团购 2.0 版本发展与创新模式研究:融合新元素的机遇与挑战

摘要&#xff1a;本文深入探讨了社区团购 2.0 版本的发展模式&#xff0c;以便利连锁店为核心的新形态对传统社区团购的冲击和革新。同时&#xff0c;分析了山东小爱联盟推动的爱客优选模式特点&#xff0c;包括佣金体系、运营模式等。在此基础上&#xff0c;研究如何将开源 AI…

isaac sim 14 物理学习(车辆动力学)

文章内容均来自博客文章、官方文档手册等 参考内容 Nvidia Isaac Sim代码编程 入门教程 2024&#xff08;7&#xff09;_isaac sim franka-CSDN博客 Python Bindings API — omni_physics 106.1 documentation Physics — Omniverse IsaacSim latest documentation Vehicle…

理解Laravel中的pipeline

pipeline在laravel的启动过程中出现次数很多&#xff0c;要了解laravel的启动过程和生命周期&#xff0c;理解pipeline就是其中的一个关键点。网上对pipeline的讲解很少&#xff0c;所以我自己写一写吧。 首先还是来看看调用栈&#xff0c;也就是从一个请求开始到返回响应&…

基于uniapp和java的电动车智能充电系统软件平台的设计

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 对电动车智能充电系统进行设计和开发。通过使用本系统可有效地减少运营成本&#xff0c;提高管理效率。 根据近年来社会…

使用css和html制作导航栏

代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#m{background-color: antiquewhite;width: 100%;height: 50px;}#i{float: left;width: 100px;height: 50px;li…

怎样使用pycharm的服务?

‌在PyCharm中使用服务器的步骤如下‌&#xff1a; ‌打开PyCharm&#xff0c;选择“File”->“Settings”‌。‌选择左侧工具栏中的“Project:…”‌&#xff0c;然后选择“Python Interpreter”。‌点击右上角的“Add Interpreter”‌&#xff0c;选择“On SSH”。‌如果…