📢 欢迎访问我的博客 | 关系先于实体

tmux · vim 8 · ranger · fzf · ripgrep — 五件套从入门到实战

tmux · vim 8 · ranger · fzf · ripgrep — 五件套从入门到实战

生成于 2026-08-06 · 在你的终端里,键盘就是一切


目录

  1. tmux — 终端复用器
  2. vim 8 — 文本编辑器
  3. ranger — 终端文件管理器
  4. fzf — 模糊搜索器
  5. ripgrep — 高速内容搜索
  6. 组合工作流 — 工具联动
  7. 速查卡

1. tmux — 终端复用器

让一个终端窗口变成多个,断线不丢任务

tmux(Terminal Multiplexer)的核心能力是会话持久化窗口/面板分割。你在 tmux 里运行的所有程序,即使关闭终端窗口、断开 SSH,依然在后台运行,重新 attach 就能回到原样。

核心概念

概念 说明 类比
Session 会话 一个独立的工作环境,包含多个窗口 像一台虚拟电脑
Window 窗口 会话内的标签页,每个窗口占满整个终端 像浏览器的标签页
Pane 面板 窗口内的分割区域,可以同时看到多个终端 像分屏

典型场景

  • 长时间任务不断线:跑训练、编译、下载等耗时任务时放进 tmux,断开 SSH 后任务继续执行,回来 attach 即可恢复。
  • 多面板同时看:一个面板写代码、一个面板看日志、一个面板跑测试,不用切换窗口。
  • 多项目并行:每个项目一个 session,随时切换,互不干扰。
  • 结对编程:两人 attach 同一个 session,实时看到对方操作。

基本操作

前缀键:所有 tmux 快捷键都需要先按 Ctrl+b(称为 prefix),松开后再按功能键。

会话管理

# 新建会话
tmux                          # 匿名会话
tmux new -s work              # 名为 work 的会话

# 脱离会话(任务继续在后台运行)
Ctrl+b  d                     # 在 tmux 内按

# 查看所有会话
tmux ls

# 重新进入会话
tmux attach -t work           # attach 到 work 会话
tmux a                        # attach 到最近一个会话

# 关闭会话
tmux kill-session -t work

# 重命名会话
Ctrl+b  $

窗口管理

操作 快捷键
新建窗口 Ctrl+b c
下一个窗口 Ctrl+b n
上一个窗口 Ctrl+b p
按编号切换 Ctrl+b 数字
列表选择 Ctrl+b w
重命名窗口 Ctrl+b ,
关闭窗口 Ctrl+b &

面板分割

操作 快捷键
左右分割 Ctrl+b %
上下分割 Ctrl+b "
切换面板 Ctrl+b 方向键
顺时针切换 Ctrl+b o
关闭当前面板 Ctrl+b x 或输入 exit
面板全屏/还原 Ctrl+b z
调整面板大小 Ctrl+b 然后按住 Ctrl+方向键
面板布局切换 Ctrl+b Space

实用配置(~/.tmux.conf)

# 鼠标支持(可点击切换面板、拖拽调整大小)
set -g mouse on

# 基于终端启动的序号从 1 开始(0 太远了)
set -g base-index 1
setw -g pane-base-index 1

# 更直观的分割键
bind | split-window -h
bind - split-window -v

# 256 色支持
set -g default-terminal "screen-256color"

# 状态栏样式
set -g status-bg colour235
set -g status-fg colour137
set -g status-left "[#S] "
set -g status-right "%H:%M | %Y-%m-%d"

修改后生效:tmux source-file ~/.tmux.conf

记忆口诀detach(脱离)、create(新建窗口)、% 像竖线(左右分)、" 像横线(上下分)。


2. vim 8 — 文本编辑器

模态编辑的王者,键盘即一切

vim 的核心思想是模态编辑:不同模式下按键含义完全不同。Normal 模式用来导航和操作,Insert 模式用来输入文本,Visual 模式用来选择。掌握模态编辑后,编辑速度远超鼠标操作。vim 8 新增了异步任务、内置终端、包管理等功能。

四种模式

模式 进入方式 用途
Normal 模式 Esc 导航、复制、粘贴、删除、搜索
Insert 模式 i / a / o 输入文字
Visual 模式 v / V / Ctrl+v 选中文本(字符/行/块)
Command 模式 : 执行命令(保存、替换、设置等)

典型场景

  • 快速编辑配置文件:SSH 到服务器后直接 vim nginx.conf,改完 :wq 即可,无需 GUI。
  • 写代码:配合插件(如 coc.nvim)实现补全、跳转、Lint,轻量级 IDE。
  • 批量替换:全文件批量替换变量名,:%s/old/new/g 一行搞定。
  • 多行编辑:Visual Block 模式(Ctrl+v)批量添加注释、修改前缀。

移动(Normal 模式)

按键 功能
h j k l 左 下 上 右
w / b 下一个/上一个单词开头
e 单词末尾
0 / ` 按键
------ ------
h j k l 左 下 上 右
w / b 下一个/上一个单词开头
e 单词末尾
行首 / 行尾
gg / G 文件开头 / 文件末尾
{ / } 上/下一个空行(段落跳转)
Ctrl+d / Ctrl+u 向下/上翻半页
Ctrl+f / Ctrl+b 向下/上翻整页
* / # 搜索光标下的词(下一个/上一个)
gd 跳到局部定义

编辑操作

按键 功能
i 光标前插入
a 光标后插入
o 下方新开一行插入
O 上方新开一行插入
x 删除光标处字符
dd 删除整行
dw 删除一个单词
cc 删除整行并进入插入模式
cw 删除单词并进入插入模式
u 撤销
Ctrl+r 重做
yy 复制整行
p / P 粘贴到下方 / 上方
. 重复上一次操作(最强快捷键)

常用命令(Command 模式)

:w              " 保存
:q              " 退出
:wq             " 保存并退出
:q!             " 不保存强制退出
:w new.txt      " 另存为

:%s/旧/新/g     " 全文替换
:%s/旧/新/gc    " 全文替换(逐个确认)
:10,20s/旧/新/g " 第10-20行替换

:set number     " 显示行号
:set relativenumber  " 相对行号
:set paste      " 粘贴模式(防止缩进错乱)
:set nopaste    " 关闭粘贴模式

:!ls            " 执行外部命令
:read !date     " 把命令输出插入当前文件

:sp 文件名       " 水平分屏打开文件
:vs 文件名       " 垂直分屏打开文件
Ctrl+w 方向键    " 切换分屏

Visual Block 批量操作

# 批量加注释:
1. Ctrl+v 进入块选模式
2. j/k 选中要注释的行
3. Shift+i 输入 #
4. 按 Esc,稍等片刻所有选中行都会加上 #

# 批量删除注释:
1. Ctrl+v 选中 # 所在列
2. 按 d 删除

vim 8 新特性

特性 说明
异步任务 job_start() 后台运行命令不阻塞编辑,插件可做实时 Lint
内置终端 :terminal vim 里直接开终端,Ctrl+w 切换回 vim
包管理 :packadd 原生插件管理,把插件放 ~/.vim/pack/ 即可
定时器 timer_start() 定时执行 VimScript 函数

学习路径:先记住 ihjkl:wq 这 7 个键就能基本使用 → 然后学 dd yy p u . 提高效率 → 再学搜索替换和 Visual Block → 最后学配置和插件。


3. ranger — 终端文件管理器

三栏式 Vim 风格文件管理,键盘操作一切

ranger 采用 Miller Columns 三栏布局:左栏显示上级目录、中栏显示当前目录文件列表、右栏实时预览选中文件内容。所有操作用 Vim 风格按键完成,双手不离键盘。已集成 fzf 实现模糊文件名搜索文件内容搜索

界面布局

┌──────────┬──────────────────┬──────────────────┐
│ 上级目录  │   当前目录文件列表  │   选中文件预览     │
│          │                  │                  │
│  📁 src   │  📄 index.html   │  <!DOCTYPE html>  │
│  📁 css   │>📄 style.css     │  body {           │
│  📁 js    │  📄 main.js      │    margin: 0;    │
│          │  📁 images       │  }                │
└──────────┴──────────────────┴──────────────────┘
                ↑ 光标所在栏

典型场景

  • 快速浏览文件:三栏同时看到上级、当前、预览,比 ls + cat 高效得多。
  • 批量操作文件:Space 多选 → yy 复制 / dd 剪切 → 导航到目标 → pp 粘贴。
  • 批量重命名:bulkrename 打开编辑器批量改文件名,保存即生效。
  • 模糊搜索文件:按 f 呼出 fzf,输入几个字母直接跳到目标文件。
  • 搜索文件内容:按 G 用 ripgrep + fzf 搜索所有文件内容,实时预览。
  • 代码预览:右栏自动高亮显示代码,配合 highlight 插件效果更好。

导航操作

按键 功能
h 返回上级目录
j / k 光标下移 / 上移
l 进入目录 / 打开文件
gg / G 跳到列表顶部 / 底部
/ 当前目录内搜索文件名
n / N 下一个 / 上一个搜索结果
Ctrl+d / Ctrl+u 向下 / 向上翻半页
m<字母> 设置书签
'<字母> 跳到书签

文件操作

按键 功能
yy 复制(yank)选中文件
dd 剪切选中文件
pp 粘贴
dD 删除文件
cw 重命名
Space 选中 / 取消选中
V 可视模式批量选择
uv 取消所有选中
zh 显示 / 隐藏隐藏文件
o 排序方式菜单
r 选择打开方式

命令模式(按 : 进入)

命令 功能
:mkdir 名称 新建目录
:touch 名称 新建文件
:chmod 755 修改权限
:shell 命令 执行 shell 命令
:bulkrename 批量重命名(超强)
:filter 关键词 过滤当前目录文件
:fzf_select fzf 模糊搜索文件名
:fzf_grep fzf + ripgrep 搜索文件内容

已配置的快捷键

f → fzf 搜索文件名(模糊匹配,递归搜索子目录)

G → fzf + ripgrep 搜索文件内容(大写 G)

配置文件位置

~/.config/ranger/
├── rc.conf       # 快捷键和设置
├── commands.py   # 自定义命令(fzf_select / fzf_grep 在这里)
├── rifle.conf    # 文件打开规则
└── scope.sh      # 文件预览脚本

退出后 cd 到浏览目录:在 ~/.bashrc 中添加 ranger 函数包装,退出后自动跳转到最后浏览的目录。运行 ranger --copy-config=all 生成配置文件。


4. fzf — 模糊搜索器

通用的命令行模糊查找工具,万物皆可搜

fzf(Fuzzy Finder)是一个通用模糊搜索过滤器:它从标准输入读取候选列表,提供一个交互式界面让你快速筛选和选择。它可以和几乎所有命令行工具组合使用——文件、目录、命令历史、Git 分支、进程……都可以 fzf。

核心原理

任何命令的输出 ──管道──▶ fzf ──▶ 你选中的结果

# 例子:从 find 结果中模糊选择文件
find . -type f | fzf

# 例子:从命令历史中搜索
history | fzf

# 例子:从 Git 分支中切换
git branch | fzf

典型场景

  • 快速打开文件vim $(fzf)code $(fzf),不用记路径。
  • 快速 cd 目录cd $(find . -type d | fzf),深层目录一键跳转。
  • 搜索命令历史:按 Ctrl+r 模糊搜索历史命令,比默认反向搜索强得多。
  • 切换 Git 分支git checkout $(git branch | fzf),分支多时特别方便。
  • 搜索进程kill $(ps aux | fzf | awk '{print $2}'),杀进程不用记 PID。
  • 配合 ranger:ranger 里按 f 搜文件名、按 G 搜文件内容。

Shell 集成快捷键(bash)

快捷键 功能
Ctrl+r 模糊搜索命令历史
Ctrl+t 在当前命令行中插入选中的文件路径
Alt+c 模糊选择目录并 cd 进入

最常用的三个Ctrl+r 搜历史命令、Ctrl+t 插入文件路径、Alt+c 跳目录。装完 fzf 后这三个快捷键自动启用。

fzf 界面操作

按键 功能
输入文字 实时模糊匹配过滤
/ 上下移动选择
Ctrl+k / Ctrl+j 上下移动(同方向键)
Tab 多选(配合 -m 参数)
Enter 确认选择
Esc / Ctrl+c 取消退出

搜索语法

输入 含义 示例
abc 模糊匹配,按顺序包含 a、b、c app → application
'abc 精确匹配(单引号开头) 'main → main.py(不含 mainline)
^abc 前缀匹配 ^test → test_*.py
`abc 输入 含义
------ ------ ------
abc 模糊匹配,按顺序包含 a、b、c app → application
'abc 精确匹配(单引号开头) 'main → main.py(不含 mainline)
^abc 前缀匹配 ^test → test_*.py
| 后缀匹配 | .md$ → 所有 .md 文件
!abc 排除匹配 .md !index → .md 文件但不含 index
| 或匹配 .md | .txt → md 或 txt 文件
(空格) 与匹配 src test → 同时含 src 和 test

常用组合命令

# 用 vim 打开 fzf 选中的文件
vim $(fzf)

# 用 VS Code 打开
code $(fzf)

# cd 到 fzf 选中的目录
cd $(find . -type d | fzf)

# 搜索并 kill 进程
kill -9 $(ps aux | fzf | awk '{print $2}')

# 搜索文件并用 bat 查看(带语法高亮)
fzf --preview 'bat --color=always {}'

# Git 分支切换
git checkout $(git branch | fzf | tr -d ' ')

# 搜索文件内容(配合 ripgrep)
rg --line-number '' | fzf | cut -d: -f1

推荐环境变量(~/.bashrc)

# fzf 默认搜索命令(用 fd 替代 find,更快)
export FZF_DEFAULT_COMMAND='find . -type f -not -path "*/\.git/*"'

# fzf 默认选项
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'

# Ctrl+t 搜索文件时的预览
export FZF_CTRL_T_OPTS='--preview "bat --color=always --style=numbers {} 2>/dev/null || cat {}"'

# Alt+c 搜索目录时的预览
export FZF_ALT_C_OPTS='--preview "tree -C {} | head -50"'

5. ripgrep — 高速内容搜索

比 grep 快 10 倍的现代替代品

ripgrep(命令名 rg)是一个递归目录内容搜索工具,类似 grep -r 但速度快得多。它默认跳过 .gitignore 中排除的文件和隐藏文件,支持 Unicode、正则表达式、多种文件类型过滤。是搜索代码内容的最佳工具。

为什么比 grep 快

特性 grep ripgrep
多线程并行搜索 ❌ 单线程 ✅ 多核并行
自动跳过 .gitignore ❌ 需手动配置 ✅ 默认跳过
跳过隐藏文件 ❌ 默认搜索 ✅ 默认跳过
跳过二进制文件 ⚠️ 输出乱码 ✅ 自动跳过
内存映射(mmap) ✅ 大文件自动用 mmap
正则引擎 PCRE(较慢) Rust regex(高度优化)

典型场景

  • 搜索代码内容rg "function" 快速找出所有包含 function 的代码行。
  • 只搜特定类型rg "import" -t py 只在 Python 文件里搜 import。
  • 统计匹配数量rg -c "TODO" 每个文件有多少个 TODO 一目了然。
  • 替换内容预览:配合 sed 做搜索替换,rg 负责找到位置。
  • 搜 Markdown 笔记rg "侦探" -t md 在所有 .md 笔记里搜"侦探"。
  • 配合 fzf:管道给 fzf 做交互式选择,ranger 的 G 就是这个原理。

基础用法

# 基本搜索(递归搜索当前目录)
rg "关键词"

# 在指定目录搜索
rg "关键词" /path/to/dir

# 只搜特定文件类型
rg "import" -t py          # 只搜 Python 文件
rg "import" -t js -t ts    # 搜 JS 和 TS 文件
rg "import" -T py          # 排除 Python 文件

# 搜索多个关键词(正则 OR)
rg "TODO|FIXME|HACK"

# 忽略大小写
rg -i "error"

# 全词匹配
rg -w "config"             # 不匹配 configuration

# 固定字符串(不按正则解析)
rg -F "array[0]"           # 搜索字面量 array[0]

# 只显示文件名(不显示内容)
rg -l "关键词"

# 显示匹配数量
rg -c "TODO"

# 显示匹配行号和内容(默认行为)
rg --line-number "关键词"

# 上下文显示
rg -C 3 "关键词"           # 显示匹配行及前后各 3 行
rg -B 2 "关键词"           # 前 2 行
rg -A 2 "关键词"           # 后 2 行

高级用法

# 搜索隐藏文件(默认跳过)
rg --hidden "关键词"

# 不遵守 .gitignore(搜索所有文件)
rg --no-ignore "关键词"

# 只搜索文件名(不是内容)
rg --files | rg "test"     # 找文件名含 test 的文件

# 替换预览(不实际修改文件)
rg "old_name" -r "new_name"

# JSON 输出(适合脚本处理)
rg --json "关键词"

# 统计每个文件的匹配数并排序
rg -c "TODO" | sort -t: -k2 -rn

# 搜索二进制文件中的文本
rg -a "关键词"

# 多线程控制
rg -j 4 "关键词"           # 用 4 个线程

常用文件类型

-t 参数 文件类型
-t py Python (.py)
-t js JavaScript (.js)
-t ts TypeScript (.ts)
-t go Go (.go)
-t rs Rust (.rs)
-t java Java (.java)
-t c C (.c .h)
-t cpp C++ (.cpp .cc .hpp)
-t sh Shell (.sh .bash)
-t md Markdown (.md)
-t html HTML (.html .htm)
-t css CSS (.css)
-t json JSON (.json)
-t yaml YAML (.yaml .yml)

查看所有支持的类型:rg --type-list

对比记忆grep "x" filerg "x"(自动递归);grep -r "x" .rg "x"grep -ri "x" .rg -i "x"grep -rl "x" .rg -l "x"


6. 组合工作流 — 工具联动

五个工具不是孤立使用的,组合起来才是完整的终端工作流

场景一:tmux + vim + ranger 全终端开发

# 1. 开一个 tmux session
tmux new -s dev

# 2. 左边用 ranger 浏览文件,右边用 vim 写代码
Ctrl+b %              # 左右分割
左侧: ranger           # 浏览文件
Ctrl+b →              # 切到右侧
右侧: vim main.py      # 写代码

# 3. 再开一个底部面板跑命令
Ctrl+b "              # 上下分割
Ctrl+b ↓              # 切到底部
python main.py        # 运行代码

# 4. 断开(任务不丢)
Ctrl+b d

# 5. 回来
tmux a -t dev

场景二:ranger + fzf + ripgrep 快速定位文件

# 在 ranger 中:

# 按名搜文件 → 按 f,输入几个字母,Enter 跳转
f

# 按内容搜文件 → 按 G,输入关键词,右侧实时预览
G

# 找到后按 E 直接用 vim 编辑
E

知道文件名用 f,知道内容关键词用 G,这是 ranger 中最高效的文件定位方式。

场景三:fzf + ripgrep 命令行搜索

# 搜文件内容并用 fzf 交互选择,右侧预览
rg --line-number --no-heading "" | fzf --delimiter=: \
  --preview 'bat --color=always {1} 2>/dev/null || cat {1}' \
  --preview-window 'right:60%' | cut -d: -f1

# 选中后用 vim 打开
vim $(rg -l "关键词" | fzf)

# 搜索并替换(rg 找到 → sed 替换)
rg -l "old_name" | xargs sed -i 's/old_name/new_name/g'

场景四:vim + fzf + ripgrep 编辑器内搜索

" 在 vim 中(需安装 fzf.vim 插件):

:Files            " fzf 搜文件名,选中打开
:Rg 关键词        " rg 搜内容,选中跳转
:Buffers          " 切换已打开的 buffer
:Lines            " 搜索所有 buffer 中的行
:History          " 搜索文件打开历史
:GFiles           " 只搜 git 跟踪的文件
:Commits          " 搜索 git commit 历史

安装方式:git clone https://github.com/junegunn/fzf.vim ~/.vim/pack/vendor/start/fzf.vim

场景五:tmux + 全套工具远程开发

# SSH 到服务器,启动 tmux
ssh server
tmux new -s work

# 窗口 1:代码编辑
#   面板1: vim(写代码,:Rg 搜内容)
#   面板2: 运行测试

# 窗口 2:文件管理
#   ranger(f 搜文件名,G 搜内容)

# 窗口 3:Git 操作
#   git status / git log

# 断开 SSH,明天回来:
tmux a -t work
# 所有窗口、面板、vim 文件、ranger 状态全部恢复

7. 速查卡

tmux(前缀 Ctrl+b)

按键 功能
d 脱离会话
c 新建窗口
n / p 下/上个窗口
% 左右分割
" 上下分割
方向键 切面板
z 面板全屏
x 关面板
` 按键
------ ------
d 脱离会话
c 新建窗口
n / p 下/上个窗口
% 左右分割
" 上下分割
方向键 切面板
z 面板全屏
x 关面板
重命名会话
[ 滚动模式

vim(Normal 模式)

按键 功能
h j k l 移动
i a o 插入
dd yy p 删/复/粘
u Ctrl+r 撤销/重做
/ n N 搜索
. 重复操作
v V Ctrl+v 三种选择
:wq 保存退出
:%s/a/b/g 全文替换
gg G 首/尾行
* # 搜词下/上个
Esc 回 Normal

ranger

按键 功能
h j k l 导航
yy dd pp 复制/剪/粘
cw 重命名
dD 删除
Space V 选中
zh 隐藏文件
f fzf 搜文件名
G fzf 搜内容
E vim 编辑
:bulkrename 批量重命名
q 退出
? 帮助

fzf

按键 功能
Ctrl+r 搜历史命令
Ctrl+t 插入文件路径
Alt+c cd 到目录
Tab 多选
Enter 确认
Esc 取消
'abc 精确匹配
^abc 前缀匹配
`abc 按键
------ ------
Ctrl+r 搜历史命令
Ctrl+t 插入文件路径
Alt+c cd 到目录
Tab 多选
Enter 确认
Esc 取消
'abc 精确匹配
^abc 前缀匹配
后缀匹配
!abc 排除

ripgrep (rg)

按键 功能
rg "词" 基本搜索
rg -i "词" 忽略大小写
rg -w "词" 全词匹配
rg -t py "词" 只搜 Python
rg -l "词" 只显文件名
rg -c "词" 匹配数量
rg -C 3 "词" 上下文 3 行
rg --hidden 含隐藏文件
rg -F "str" 固定字符串
rg -r "新" 替换预览

每日最高频操作 Top 10

  1. Ctrl+r — 搜历史命令(fzf)
  2. Alt+c — 模糊跳目录(fzf)
  3. vim $(fzf) — 模糊打开文件
  4. rg "关键词" — 搜代码内容
  5. ranger 里按 f — 搜文件名
  6. ranger 里按 G — 搜文件内容
  7. vim 里 :wq — 保存退出
  8. vim 里 :%s/old/new/g — 批量替换
  9. tmux 里 Ctrl+b d — 脱离会话
  10. tmux 里 tmux a — 回到会话

WSL2 Ubuntu 终端工具链手册 · tmux · vim 8 · ranger · fzf · ripgrep

生成于 2026-08-06 · 在你的终端里,键盘就是一切

posted @ 2026-08-06 21:39  Vortex0928  阅读(7)  评论(0)    收藏  举报