当前位置: 首页 > news >正文

使用 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.mrgr.cn/news/63435.html

相关文章:

  • nginx反向代理及负载均衡
  • el-date-picker日期时间选择器的选择时间限制到分钟级别
  • AcWing 906:区间分组 ← 区间问题+优先队列
  • 深入解析 C++ 类型转换
  • 【人工智能】自然语言生成的前沿探索:利用GPT-2和BERT实现自动文本生成与完形填空
  • 关于扫描模型 拓扑 和 传递贴图工作流笔记
  • Windows SEH异常处理讨论
  • Tile38命令-【Keys】
  • 卡尔曼滤波-应用白话
  • 在JAVA中使用Paho MQTT客户端
  • ArkTS基础
  • Excel函数学习记录
  • Matlab中国三大自然分区
  • 智慧园区有哪些优势
  • Java解析word中的表格或者文本
  • 揭秘云计算 | 1、云从哪里来?
  • Redis(2):内存模型
  • 物联网设备如何助力实现高效远程老人监护
  • batc和mini-batch
  • Java面试题十五
  • 基于springboot的Java学习论坛平台
  • prometheus 快速入门
  • python enum用法
  • opencv - py_imgproc - py_grabcut GrabCut 算法提取前景
  • JavaScript 实战技巧:让你成为前端高手的必备知识3(进阶版)
  • 【环境问题】pycharm远程服务器文件路径问题