You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用rga、fzf搜索PDF并通过sioyek打开对应页码

解决方案

要实现用rga+fzf搜索PDF内容并调用sioyek定位到匹配页码,核心是正确提取rga输出里的PDF路径和页码,以下是直接可用的脚本和分步说明:

直接可用的脚本

#!/bin/bash
# 传入搜索关键词,比如:./rga-sioyek.sh "你的搜索词"
QUERY="$1"

rga --pretty -i "$QUERY" | fzf | sed -E 's/(.*):Page ([0-9]+):.*/\1 \2/' | while read -r PDF PAGE; do
    sioyek "$PDF" --page "$PAGE"
done

分步解释

  1. rga搜索:rga --pretty -i "$QUERY"

    • --pretty强制rga输出标准化格式:PDF文件路径:Page N:匹配内容,这是提取参数的基础
    • -i忽略大小写,适配不同的搜索需求
  2. fzf选择:fzf

    • 把rga的搜索结果传入fzf,可视化选择你要打开的匹配项
  3. 提取参数:sed -E 's/(.*):Page ([0-9]+):.*/\1 \2/'

    • 用正则匹配rga的输出行,捕获PDF路径(第一组)和页码数字(第二组),直接输出路径 页码的格式
    • 比awk更简洁,无需额外处理字符串
  4. 调用sioyek:while read -r PDF PAGE; do sioyek "$PDF" --page "$PAGE"; done

    • 读取提取出的路径和页码,调用sioyek的--page参数直接定位到目标页
    • 引号包裹变量,兼容带空格的PDF路径

适配官方rga-fzf脚本的修改

如果你用的是官方rga-fzf脚本,只需要替换其中打开编辑器的部分:
找到类似nvim "$file"的行,替换成上述的参数提取+sioyek调用逻辑即可,比如:

# 替换原脚本里的打开逻辑
selected=$(fzf ...) # 原fzf选择部分
echo "$selected" | sed -E 's/(.*):Page ([0-9]+):.*/\1 \2/' | while read -r PDF PAGE; do
    sioyek "$PDF" --page "$PAGE"
done

注意事项

  • 确保sioyek已加入系统PATH,能直接在终端调用
  • 如果rga输出的页码格式有变体(比如Page 003),正则依然能正确提取数字
  • 若需要搜索特定目录,在rga后加上目录路径即可:rga --pretty -i "$QUERY" ./docs/

内容的提问来源于stack exchange,提问作者jumper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:32:50