vf 是一个非常强大且灵活的命令行工具,全称是 view filter(视图过滤器),它允许你从任何命令的输出、文件或标准输入中,以交互式的方式筛选、排序、搜索、预览和操作数据,你可以把它想象成一个“活”的 grep + sort + less + jq 的组合体。

核心特点
- 交互式:不像
grep那样执行一次就结束,vf启动后会进入一个交互式界面,你的所有操作都会实时反映在视图上。 - 即时反馈:你输入的任何筛选条件都会立即生效,让你可以快速探索和定位数据。
- 功能丰富:支持正则表达式、模糊搜索、排序、列操作、执行外部命令等。
- 通用性强:可以处理任何文本数据,无论是命令输出、日志文件还是 JSON/CSV 数据。
安装
vf 通常不是系统默认自带的,你需要先安装它。
-
macOS (使用 Homebrew)
brew install vf
-
Linux (使用 APT)
# 对于 Debian/Ubuntu sudo apt update sudo apt install vf
-
从源码安装
(图片来源网络,侵删)git clone https://github.com/lotabout/vf.git cd vf cargo install --path .
基本用法
vf 的基本语法非常简单:
# 从文件中筛选 vf filename.txt # 从命令的输出中筛选 some_command | vf # 直接在 vf 中输入文本进行测试 echo -e "apple\nbanana\ncherry\n123\nabc" | vf
启动 vf 后,你会看到一个类似下面这样的界面:
# vf - Interactive Filter
# Press ? for help
--- Match All ---
apple
banana
cherry
123
abc
---
核心交互命令
在 vf 的交互界面中,你可以使用以下快捷键和命令。输入 或 h 可以随时查看帮助。
搜索和筛选
这是 vf 最核心的功能。

| 命令/快捷键 | 描述 | 示例 |
|---|---|---|
| (正则搜索) | 进入正则表达式搜索模式,输入 /pattern 来筛选包含该模式的行。 |
/app (筛选包含 "app" 的行) |
f (模糊搜索) |
进入模糊搜索模式,输入 f<your_text> 来筛选包含这些字符的行,顺序不重要。 |
fap (会匹配 "apple", "grape", "pineapple" 等) |
F (反向模糊) |
反向模糊搜索,筛选不包含这些字符的行。 | Fap (会匹配 "banana", "cherry" 等) |
Ctrl-u |
清空当前搜索框,显示所有行。 |
导航和选择
| 命令/快捷键 | 描述 |
|---|---|
j / |
向下移动光标。 |
k / |
向上移动光标。 |
Ctrl-d / Ctrl-f |
向下翻页。 |
Ctrl-u / Ctrl-b |
向上翻页。 |
gg / Home |
跳到第一行。 |
G / End |
跳到最后一行。 |
v |
切换选择模式,进入选择模式后,可以用 j/k 来选择多行,再次按 v 退出选择模式。 |
Ctrl-a |
全选所有匹配的行。 |
Ctrl-x |
取消所有选择。 |
执行操作
当你选择好想要的行后,可以执行各种操作。
| 命令/快捷键 | 描述 |
|---|---|
Enter |
确认并退出,将当前选中的行(如果没有选择,则为光标所在行)输出到标准输出,vf 退出,这是最常用的操作。 |
y |
复制,将选中的行复制到系统剪贴板。 |
d |
删除,从视图中删除选中的行(不会影响原始文件)。 |
执行外部命令,将选中的行作为参数,执行一个外部命令。!git checkout 会对所有选中的行执行 git checkout <line_content>。 |
|
c |
修改,进入编辑模式,可以修改当前行的内容。 |
q |
退出,不进行任何操作,直接退出 vf。 |
视图和模式切换
| 命令/快捷键 | 描述 |
|---|---|
m |
切换匹配模式,在 "Match All" (显示所有) 和 "Match" (只显示匹配) 之间切换。 |
进入 Ex 模式,类似于 Vim,可以执行一些更复杂的命令,sort (排序)、delete (删除行) 等,输入 后按 Enter 查看可用命令。 |
|
s |
切换排序,对当前视图进行排序。 |
w |
写入文件,将当前视图的内容保存到一个文件中。 |
实战示例
示例 1:筛选 ps 命令的输出
你想查找所有包含 "node" 关键字的进程,并杀掉它们。
ps aux | vf
- 启动
vf后,输入/node进行正则搜索。 - 你会看到所有包含 "node" 的进程被筛选出来。
- 按
Ctrl-a全选这些行。 - 按 键,然后输入
kill -9。 vf会提示你将要执行kill -9 <pid>,确认后,所有选中的 Node.js 进程都会被终止。
示例 2:在日志文件中快速定位错误
你有一个巨大的 error.log 文件,想找到所有 "ERROR" 级别且包含 "timeout" 的日志。
cat error.log | vf
- 输入
/ERROR筛选出所有 ERROR 级别的日志。 - 输入
ftimeout进行模糊搜索,进一步筛选出包含 "timeout" 的日志。 - 使用
j/k浏览结果,找到你关心的那条日志。 - 按
Enter退出,vf会把这一行输出到终端,方便你复制或进一步处理。
示例 3:处理 CSV/JSON 文件
假设你有一个 users.csv 文件,内容如下:
name,age,city Alice,25,New York Bob,30,Los Angeles Charlie,22,Chicago David,35,New York
你想找到所有年龄大于 30 岁的用户。
cat users.csv | vf
- 输入
/,[0-9]{2},来查找年龄是两位数的行(这只是一个示例,更复杂的筛选可能需要 命令)。 - 更好的方式是使用 命令,输入
/,([3-9][0-9]),,这个正则表达式会匹配年龄在 30-99 之间的行。 - 按
Enter执行,符合条件的行(David)会被筛选出来。 - 按
Enter退出,即可得到结果。
vf 是一个能极大提升你在命令行下处理数据效率的工具,它的交互式特性让你可以“对话式”地探索数据,而不是像传统工具那样“一次性”地处理。
学习建议:
- 先安装它。
- 用
echo "hello\nworld\nvf\nis\ngreat" | vf试试水。 - (正则),
f(模糊),v(选择),Enter(确认),q(退出) 这几个核心操作。 - 在日常工作中,多用它来
grep文件、筛选ps输出、查看日志,很快你就会离不开它。
