发布于
2490 字 · 13 分钟

Ranger 完全指南:终端里的 Vim 式文件管理器

AI 摘要

作者
  • avatar
    姓名
    Corner430
    社交账号
题图

1 前言

Ranger 是一个终端文件管理器(TUI),用 Python 编写,GitHub 17k+ stars,GPL-3.0 协议。它用 Miller Columns(三列布局)展示目录结构,用 Vim 式键位完成所有文件操作,并通过 scope.sh 支持几乎所有文件类型的终端内预览。它还自带 Rifle——一个智能文件启动器,能自动选择合适的程序打开文件。

前置条件:已安装 Python(>= 3.x)。

2 Miller Columns 与命令行对照

Miller Columns 三列布局

Ranger 的核心就是这张图:三列同时显示父目录、当前目录、文件预览,用 h/l 左右穿梭,j/k 上下移动。一个界面替代了命令行中的多个命令:

命令行Ranger 操作
ls打开即可看到(中列)
cd <dir>l 进入目录 / h 返回上级
cat <file>选中文件自动预览(右列)
cp src dstyy(复制)→ 导航到目标 → pp
mv src dstdd(剪切)→ 导航到目标 → pp
rm <file>dD(删除)
find / grep/(搜索)
file <file>自动识别(Rifle)

3 安装与配置

3.1 各平台安装

pip / pipx(推荐 pipx 隔离环境):

pip install ranger-fm
# 或
pipx run --spec ranger-fm ranger

Homebrew(macOS / Linux):

brew install ranger

Ubuntu / Debian

sudo apt install ranger

Arch Linux

sudo pacman -S ranger

源码直接运行(无需安装):

git clone https://github.com/ranger/ranger.git
cd ranger
python ranger.py

验证

ranger --version

3.2 生成配置文件

ranger --copy-config=all

这会将默认配置复制到 ~/.config/ranger/

文件用途
rc.conf启动命令、键位绑定、界面设置
commands.py自定义 : 命令
rifle.conf文件关联规则(用什么程序打开文件)
scope.sh文件预览脚本(右列显示什么)

设置 RANGER_LOAD_DEFAULT_RC=false 可避免加载全局默认配置,只用你自己的 rc.conf

3.3 基础配置

~/.config/ranger/rc.conf 中添加常用设置:

set viewmode miller           # 默认三列布局
set column_ratios 1,3,4       # 三列宽度比
set show_hidden true          # 显示隐藏文件
set preview_files true        # 启用文件预览
set preview_images true       # 启用图片预览
set preview_images_method kitty  # 图片预览方式(kitty/ueberzug/sixel)
set vcs_aware true            # 显示 Git 状态标记
set draw_borders both         # 面板边框
配置项说明默认值
show_hidden显示隐藏文件false
preview_files文件预览true
preview_images图片预览false
preview_images_method图片预览方式w3m
vcs_aware显示版本控制状态false
column_ratios三列宽度比1,3,4
sort排序方式natural

3.4 Shell 别名与自动 cd

alias ra='ranger'

退出 Ranger 后自动 cd 到浏览的目录(推荐加到 ~/.bashrc~/.zshrc):

ranger_cd() {
    local tmp="$(mktemp -t ranger_cd.XXXXXX)"
    ranger --choosedir="$tmp" -- "${@:-$(pwd)}"
    if chosen_dir="$(cat -- "$tmp")" && [ -n "$chosen_dir" ] && [ "$chosen_dir" != "$(pwd)" ]; then
        cd -- "$chosen_dir"
    fi
    rm -f -- "$tmp"
}
alias ra='ranger_cd'

防止嵌套 Ranger(在 Ranger 内按 S 打开 shell 后再次启动 Ranger):

ranger() {
    if [ -z "$RANGER_LEVEL" ]; then
        /usr/bin/ranger "$@"
    else
        exit
    fi
}

4 导航

导航操作

4.1 基本移动

操作快捷键
上下移动j / k 或方向键
进入目录lEnter
返回上级h
跳到第一个gg
跳到最后一个G
上/下翻页Ctrl+f / Ctrl+b
屏幕顶/中/底H / M / L

4.2 目录跳转

操作快捷键
回到主目录gh
前往 /etcge
前往 /tmpgtgT
前往 /usrgu
前往 /mediagm
前往 /run/mediagi
设置书签m + 字母
跳到书签' + 字母
删除书签um + 字母

4.3 搜索与过滤

操作快捷键
搜索文件名/
快速定位f
下一个匹配n
上一个匹配N
过滤当前目录zf
清除过滤zf 留空

4.4 标签页

操作快捷键
新建标签页gnCtrl+n
关闭标签页gcCtrl+w
下一个标签页Tabgt
上一个标签页Shift+TabgT
切换到第 N 个Alt+N(N=1-9)

5 文件操作

文件操作流程

5.1 选择文件

操作快捷键
标记/取消标记space
反选v
可视选择模式V
取消所有标记uv

5.2 复制、移动、删除

操作快捷键对应命令
复制(yank)yycp
剪切(cut)ddmv(移动)
粘贴pp
覆盖粘贴pocp -f / mv -f
删除(确认)dDrm
复制文件名yn
复制完整路径yp
复制所在目录路径yd

5.3 创建与重命名

操作快捷键/命令
重命名cw
追加重命名A
插入重命名I
新建目录:mkdir <name>
新建文件:touch <name>
修改权限:chmod <mode>

5.4 批量重命名

选中多个文件后执行 :bulkrename,Ranger 会用 $EDITOR 打开文件名列表。修改后保存退出,Ranger 自动执行重命名。这在批量修改文件名时极为高效。

6 预览系统

预览生态

Ranger 的 scope.sh 是它的杀手级功能——根据文件类型调用不同的预览工具,在终端右列直接显示内容。

6.1 预览工具对照

文件类型预览工具安装命令(示例)
源代码bat / highlight / pygmentizepip install pygments
图片ueberzug / kitty / sixelpip install ueberzug
PDFpdftoppm(图)/ pdftotext(文)apt install poppler-utils
视频ffmpegthumbnailerapt install ffmpegthumbnailer
压缩包atool / bsdtar / 7zapt install atool
JSONjq / python -m json.toolapt install jq
HTMLlynx / w3m / elinksapt install w3m
媒体信息mediainfo / exiftoolapt install mediainfo
SQLitesqlite3apt install sqlite3
SVGrsvg-convertapt install librsvg2-bin
字体fontimageapt install fontforge

6.2 图片预览配置

rc.conf 中设置预览方式:

set preview_images true
set preview_images_method kitty    # kitty 终端用户
# set preview_images_method ueberzug  # 其他终端
# set preview_images_method sixel     # 支持 Sixel 的终端

kitty 终端原生支持图片预览,效果最好。其他终端推荐 ueberzug(X11)或 ueberzugpp(Wayland)。

7 Rifle 文件关联

Ranger 自带的 Rifle 是一个独立的文件启动器,通过 rifle.conf 中的规则决定用什么程序打开文件。

规则格式:条件 = 命令。Rifle 从上往下匹配,第一个命中的规则生效。

常用规则示例:

# 文本文件用 $EDITOR 打开
mime ^text, label editor = nvim -- "$@"

# PDF 用 zathura
ext pdf = zathura -- "$@"

# 图片用 feh
mime ^image, has feh = feh -- "$@"

# 视频用 mpv
mime ^video, has mpv = mpv -- "$@"

# 兜底:用 xdg-open
else = xdg-open "$1"
条件关键字说明
ext匹配文件扩展名
mime匹配 MIME 类型
has检查程序是否存在
label给规则命名(用于 :open_with
terminal需要在终端中运行

在 Ranger 中按 r 可以手动选择用哪个程序打开当前文件。

8 自定义命令

~/.config/ranger/commands.py 中定义自定义命令。确保文件开头有:

from ranger.api.commands import *

8.1 解压文件

import os
from ranger.core.loader import CommandLoader

class extract_here(Command):
    """:extract_here
    用 atool 解压选中的文件到当前目录。
    """
    def execute(self):
        cwd = self.fm.thisdir
        marked = tuple(cwd.get_selection())
        if not marked:
            return
        original = cwd.path
        au_flags = ['-x', cwd.path, '-e']
        obj = CommandLoader(
            args=['aunpack'] + au_flags + [f.path for f in marked],
            descr="解压文件",
            read=True,
        )
        obj.signal_bind('after', lambda _: cwd.load_content())
        self.fm.loader.add(obj)

8.2 fzf 集成

import os
import subprocess

class fzf_select(Command):
    """:fzf_select
    用 fzf 模糊搜索并跳转到选中的文件或目录。
    """
    def execute(self):
        command = "find -L . \\( -path '*/\\.*' -o -fstype 'dev' -o -fstype 'proc' \\) " \
                  "-prune -o -print 2>/dev/null | sed 1d | cut -b3- | fzf +m"
        fzf = self.fm.execute_command(command, stdout=subprocess.PIPE)
        stdout, _ = fzf.communicate()
        if fzf.returncode == 0:
            selected = os.path.abspath(stdout.decode('utf-8').strip())
            if os.path.isdir(selected):
                self.fm.cd(selected)
            else:
                self.fm.select_file(selected)

rc.conf 中绑定快捷键:

map <C-f> fzf_select

9 LazyVim 集成

Lazydocker 相同,利用 LazyVim 自带的 snacks.nvim 即可零插件集成。在 ~/.config/nvim/lua/config/keymaps.lua 中添加:

if vim.fn.executable("ranger") == 1 then
  vim.keymap.set("n", "<leader>R", function()
    Snacks.terminal("ranger", { cwd = LazyVim.root() })
  end, { desc = "Ranger" })
end

<leader>R 在浮动窗口中打开 Ranger,q 退出回到编辑器。与 <leader>ggLazygit)、<leader>DLazydocker)体验一致。

如果需要 Ranger 退出时将选中的文件传回 Neovim,可以使用 ranger.nvim 插件替代上述方案。

10 快速参考

10.1 导航

按键作用
h / l上级 / 进入
j / k上下移动
gg / G跳到首 / 末
H / M / L屏幕顶/中/底
Ctrl+f / Ctrl+b翻页
gh回主目录
/搜索
f快速定位
m + 字母设置书签
' + 字母跳到书签

10.2 文件操作

按键作用
space标记/取消
v反选
yy复制
dd剪切
pp粘贴
dD删除
cw重命名
A / I追加/插入重命名
yn / yp复制文件名/路径

10.3 标签与书签

按键作用
gn / Ctrl+n新建标签页
gc / Ctrl+w关闭标签页
Tab / gt下一个标签页
Shift+Tab / gT上一个标签页
m + 字母设置书签
' + 字母跳到书签
um + 字母删除书签

10.4 预览与显示

按键作用
i全屏预览
zh切换隐藏文件
zp切换预览
zi切换图片预览
zv切换 VCS 状态
S在当前目录开 shell

10.5 排序

按键排序方式
on按名称
os按大小
ot按类型
om按修改时间
oc按创建时间
or反转排序

10.6 系统

按键作用
?帮助
:命令行模式
!执行 shell 命令
r选择打开方式
R刷新
q退出
ZZ退出

11 参考链接

版权声明

除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。