尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

终端文件管理器实测推荐:ranger、nnn、lf与yazi怎么选?

终端文件管理器实测推荐:ranger、nnn、lf与yazi怎么选? 我不知道你第一次在纯黑的 SSH 窗口里找一个文件是什么感觉我反正是崩溃的。终端文件管理器就是那类让我从cd、ls、find、vim连环切换中彻底解放出来的工具。大家好我是常年在服务器和本地开发机之间来回切换的终端党今天想认认真真聊聊我实测过、并且现在还在用的 4 款终端文件管理器ranger、nnn、lf还有新一代的 yazi。它们能解决“文件管理”这件事里最烦人的几个问题频繁敲路径、切目录、预览文件内容、快速改名、批量操作。适合所有在 Linux/macOS/WSL 环境里工作、想摆脱鼠标和图形文件管理器拖拽的人。1. 为什么我放着图形界面不用偏要在终端里管文件1.1 三个让我彻底转向终端管理的真实场景很多人不理解桌面上不是有 Nautilus、Finder、Windows 资源管理器吗为什么要折磨自己去终端里折腾文件我最初也是这么想的直到遇到第一个场景——远程服务器。我自己的使用场景是白天写代码晚上偶尔要处理线上机器上的日志和备份文件。通过 SSH 登录到服务器后整个画面就是一块黑底白字的终端。这时候如果你说“打开文件管理器”那就等于回到了 1980 年代输入ls看文件名输入cd进目录输入cat看内容。一个目录下几十个文件你想知道哪个是最近修改的哪个文件内容里有关键报错不用终端工具就只能一遍遍敲命令。装了终端文件管理器之后光标在文件列表里上下移动右侧直接出现预览窗口按空格选中按回车打开效率完全是另一个量级。第二个场景是 WSL2 和本地开发环境。我用 WSL2 写代码但文件经常存放在 Windows 和 Linux 两边路径长得吓人/mnt/c/Users/xxx/projects/xxx/src/components/...。图形文件管理器虽然能看到目录树但要从终端里把文件拖进 Vim 或者其他命令行工具里还是绕不开路径问题。终端文件管理器内部的操作天然和 shell 处于同一套话语体系——移动完文件之后我可以直接打开当前目录的终端或者把当前目录路径发送给 shell。第三个场景是批量操作。图形文件管理器做多选重命名、批量移动、按扩展名筛选这些事虽然也能做但在服务器上没有图形界面就是空谈。终端文件管理器配合脚本可以实现“选中所有.log文件 → 一键移动到 archive 目录 → 批量压缩”这一套操作下来体感上比图形界面可靠得多。图形界面点错一个文件就麻烦了而终端工具配合预览和筛选操作对象永远是你心里想的那个精确集合。1.2 这类工具到底解决了什么核心问题本质上终端文件管理器Terminal File Manager简称 TFM解决的是“人在终端环境中的信息导航效率问题”。普通 shell 命令行是“以命令为中心”的你想知道有什么文件敲ls你想看文件大小敲ls -lh你想递归查看敲find。每一步都是“你主动提问系统被动回答”缺少一个持续在场、随时可见的上下文。而终端文件管理器提供了“以目录为中心”的持续视图当前目录下的文件列表始终在那里你的位置在哪里、有哪些文件、选中了哪些文件这些信息不需要你反复问询工具直接摆在你面前。我一度以为这样的工具会非常臃肿毕竟要渲染文件列表、要支持预览、还要响应快捷键。实际用了之后发现做得好的 TFM 都轻得惊人。有的单二进制文件不到 1MB内存占用比一个浏览器标签页低几个数量级启动速度可以做到瞬间完成。这也是我决定把这 4 款工具逐个实测一遍的原因它们各有定位有人偏好经典稳定有人追求极致速度有人喜欢现代外观总有一款能匹配你的使用节奏。2. ranger终端文件管理器的老牌标杆预览能力到今天还是天花板级2.1 我的 ranger 使用起点一条命令装好按键却像个新世界很多 Linux 用户接触终端文件管理器几乎都是从 ranger 开始的。它用 Python 编写依赖库很少Ubuntu/Debian 上直接sudo apt install rangermacOS 上brew install ranger装完执行ranger就进入界面。我第一次启动的时候第一反应是“这界面真朴素”第二反应是“为什么我要按j/k而不是方向键”——因为 ranger 的主要操作逻辑是基于 Vim 的h/j/k/l对应左移、下移、上移、右移。上手大约十分钟之后我意识到这个设计不是为了模仿 Vim而是为了效率。你的手不需要离开键盘中心区域光标移动、进入子目录、返回父目录、翻页、搜索全部可以在主键盘区完成。下面这份我自己整理的快速键位表基本覆盖了日常 90% 的操作场景键位功能说明h/l返回上级目录 / 进入子目录看一眼就知道层级关系j/k在文件列表内上下移动按住可连续滚动gg/G跳到列表顶部 / 底部类似 Vim 的全局跳转/在当前目录及子目录里搜索支持按文件名模糊匹配空格标记/取消标记当前文件可多选配合批量操作yy/dd/pp复制 / 剪切 / 粘贴不是改文件名而是文件操作dD删除当前文件需确认比直接 rm 多一层保护r用指定程序打开当前文件弹出可选择的打开方式Enter打开文件或进入目录文件会按扩展名匹配规则打开~跳转到 home 目录配合cd相关快捷键很顺手S在当前目录打开一个 shell退出 shell 后回到 ranger2.2 预览功能为什么强核心在 scope.sh 和 rifle.confranger 最吸引我的不是文件列表而是它的实时预览。右侧可以直接预览文本文件内容、图片需配置、PDF 首屏。很多新用户以为安装完就能万事俱备实际上apt装好后默认预览只对纯文本生效如果系统里缺w3m-img、pdftoppm之类的命令图片和 PDF 预览就是白屏。ranger 内部通过scope.sh脚本来决定不同类型的文件如何生成预览信息这个脚本存放在配置文件目录下第一次启动时如果检测不到配置会复制一份默认配置到~/.config/ranger/。调整图片预览方法是件很容易踩坑的事。ranger 的预览图片机制依赖终端对图像协议的支持。在 macOS 的 iTerm2 里设置set preview_images_method iterm2就能直接看到图片在支持 Kitty 图形协议的终端里设置为kitty普通 SSH 终端或者不支持图像协议的终端就只能靠chafa这类工具把图片转成字符画展示。我试过在 Windows Terminal WSL2 环境里开图片预览折腾了半天最终发现 Windows Terminal 不支持 Kitty 协议也没有 w3m 支持索性用chafa转字符画预览效果虽然不如原图但已经能让我判断图片的大致内容了。rifle.conf 则是 ranger 的“文件打开方式”配置。文件类型最终用什么程序打开全部由这个文件里的规则决定。默认规则已经能覆盖大部分场景但总有定制需求比如我希望.md文件在终端里用 Vim 打开而不是弹出图形编辑器我就在 rifle.conf 里加一行ext md $EDITOR -- $改完保存立即生效不用重启 ranger。这种“默认配置 简单覆盖”的设计非常符合 Linux 哲学也是 ranger 十几年发展下来仍然让人用得舒服的原因。2.3 ranger 的痛大目录和缩略图预览会卡没有完美的工具。ranger 在预览大量图片或进入巨型目录时能够明显感觉到卡顿。它的预览是同步生成的也就是说一个文件一个文件地读取内容生成预览目录里有几百个文件时会一卡一卡的。我自己处理项目里一个包含上千张素材图片的目录时ranger 每次移动光标都有肉眼可见的延迟。解决思路一般是两个一是降低自动预览的文件大小上限二是调整scope.sh的超时参数给预览命令加上超时时间。除此以外ranger 依赖 Python安装体积相对大一些在极小内存的服务器上算不上最优解。但如果你是第一次接触终端文件管理器ranger 依然是最值得先试的那一个它的文档最全、社区用户最多、遇到问题随便一搜就能找到答案。我把 ranger 定位为“实战入门首选”它能帮你建立对终端文件管理器的完整认知框架。3. nnn常驻型轻量工具文件管理器之外还是不折不扣的启动器3.1 为什么 nnn 能在一众终端工具里脱颖而出如果说 ranger 是功能全面的“重型机枪”那 nnn 就是一把几乎不占资源的“战术匕首”。nnn 由印度开发者 jarun 维护名字来自 “Nerdy Nav” 的缩写整个软件本体是一个很小的 C 程序没有任何运行时依赖可以在任何 Linux/macOS/BSD 系统上直接拷贝二进制运行。我用time nnn测过启动耗时基本在 0.05 秒级别体感就是“瞬间出现”。第一次用 nnn 的时候我对它的报价界面其实是怀疑的因为它默认只是一个纯色底的文件列表没有预览窗口没有彩色图标看起来比 ranger 更朴素。但实际上nnn 的强项不在“看得见”的界面而在“看不见”的集成能力。它的定位不是“取代文件管理”而是“成为终端里持续的上下文工具”。很多资深用户把 nnn 绑定到 shell 里通过nnn启动后浏览目录退出时自动 cd 到当前所在目录实现“用 nnn 导航用 shell 干活”的无缝衔接。3.2 nnn 的插件体系批量改名、磁盘分析、文件监控一站式搞定nnn 自带的插件库是我用过最实用的插件集合没有之一。每个插件都是独立的 shell 脚本保存在/usr/share/nnn/plugins或自定义插件目录里通过在 nnn 内按;或p激活。我日常用到最多的三个是dups找出当前目录树下的重复文件配合选中操作直接清理。bulknew/bulkrename批量新建文件或批量重命名。nnn 的重命名流程是先把当前选中的文件名写入一个临时文本你用 Vim 编辑后保存脚本按新名字重命名。这比手动一个一个改名和图形工具的逐条改名都高效。fzcd调用 fzf 模糊搜索子目录选中后跳转过去。此外nnn 内置的磁盘使用查看功能也值得一提。在文件列表上按d可以切换到 du 模式显示当前目录和子目录的磁盘占用右边还会用条形图直观对比。这对服务器上排查“哪个目录占了大量空间”是刚需能力。nnn 的快捷键风格兼顾了 Vim 和普通方向键习惯。默认进入后h/j/k/l可以移动方向键也可以移动Enter打开文件或目录q退出Q退出并 cd 到当前目录C则是把当前目录路径复制到系统剪贴板。如果你习惯用一个终端管理器作为“长期驻留”的工具我强烈建议把下面这几个键位背下来键位功能备注Q退出并自动cd到当前目录这是 nnn 的灵魂C复制当前目录路径配合 shell 使用很顺手空格选中/取消选中文件多选^A全选当前目录所有文件CtrlAE解压归档文件支持 zip/tar 等常见格式d查看磁盘占用分析目录空间一目了然f按文件名在当前目录树内检索fuzzy find 模式?打开快速帮助忘记键位时按一下3.3 nnn 的适用人群常驻终端、轻度文件操作、服务器场景我把 nnn 列为“服务器必备”的首要理由不是功能多而是“稳”。一个拷贝过去就能运行的二进制文件没有 Python 环境要求、没有动态依赖库缺失问题、不管系统多干净都能跑起来。之前我在一台最小化安装的 Debian 服务器上部署服务系统里连vim都没有我把 nnn 的二进制 scp 上去之后解压、浏览日志、查看配置、批量改权限全部搞定。当然 nnn 也有它的短板没有像 ranger 那样的实时内容预览窗口文本文件不会自动显示右侧预览想看文件内容必须按p或直接调用编辑器。这个设计是有意为之目的是保持极低的资源占用和极快的启动速度。所以如果你是“没有预览就觉得少了点什么”的人nnn 可能不是第一选择如果你追求“轻、快、稳定、打辅助”nnn 会非常称手。4. lf一个 Go 二进制带来的简洁与克制4.1 lf 和 ranger 的相似与不同之处lf 的全称是 “list files”听名字就知道做派极简。它用 Go 语言编写发布时只有一个编译好的二进制文件配置文件和 ranger 一样支持在启动时自动加载。我用 lf 的第一感觉是“这真的不是 ranger 的克隆版吗”因为默认键位基本一致j/k上下、h/l进出目录、空格选中、yy复制、pp粘贴、/搜索。但仔细用下去就会发现lf 在底层设计上和 ranger 有明显差异。ranger 的逻辑是“框架自带一套完整状态管理”lf 的逻辑是“只做文件列表这件事其他全交给 shell”。lf 的配置文件中大量出现 shell 命令map绑定按键时可以直接嵌入bash -c ...语法甚至可以用lf -remote机制把命令发送给正在运行的另一个 lf 实例。这意味着你可以用 shell 脚本对 lf 做深度定制实现很多其他终端文件管理器做不到的骚操作。4.2 lfrc 配置文件实战从默认键位到个性化定制我的 lf 配置文件位于~/.config/lf/lfrc。一个最基础的配置大概长这样set hidden true set ignorecase true set preview true set ifs map enter open map c-f :$SHELLenter map delete :!rm -rf %fenter map c-p :!zip -r %f.zip %fenter解释一下这几项set hidden true让 lf 默认显示隐藏文件这对服务器管理很重要因为很多配置文件都以.开头set preview true开启右侧预览预览依赖 shell 脚本~/.config/lf/preview你可以用任意脚本语言来生成预览内容map c-p这一行把CtrlP绑定为压缩当前文件/目录为 zip非常实用。lf 的预览脚本逻辑是“给定一个文件路径输出预览文本”。我自己的 preview 脚本用file命令判断文件类型再分门别类调用bat带语法高亮的 cat、pdftotext、chafa等。文本文件的预览体验完全可以和 ranger 持平关键在于脚本写得好不好。这也是 lf 和 ranger 最大的不同ranger 把“预览分发”做成了内置的 scope.shlf 把它完全开放给用户。对喜欢掌控一切的人来说这反而是一种乐趣。4.3 lf 的定位思考追求最小依赖和完全可控的进阶之选lf 最适合什么人我的答案是已经从 ranger 毕业、开始追求“自己掌控一切细节”的人。它没有花哨的插件体系没有预设的主题商店有的只是一个干净的文件列表框架和极其开放的 shell 扩展接口。你用 lf 写出来的配置比如自定义的批量重命名脚本、远程服务器操作套件、备份流程放之四海而皆准换台机器只要拷贝同一个二进制和配置目录立刻就是熟悉的操作环境。但 lf 的“极简”也不意味着没有缺点。它的界面观感明显偏“程序员审美”没有图标支持默认配色朴素到了近乎简陋的程度。如果你特别在意“看起来现代”的体验lf 可能会让你觉得不够惊艳。论综合平衡度我曾和几个朋友探讨过大家一致觉得 lf 是“ranger 的下一个形态”保留了 ranger 的键位逻辑和操作模型但去掉了笨重的 Python 运行时彻底拥抱 shell。它不是给新手的第一款工具但很可能是你的最后一款工具。5. yazi新一代 Rust 异步文件管理器预览体验接近图形界面5.1 为什么我会对一款还很新的工具产生兴趣yazi 这个名字取自中文“鸭子”的拼音它是一个非常年轻的项目用 Rust 编写主打异步 IO 和极致的预览体验。我第一次在 GitHub 上看到它的演示动图时第一反应是“终端里居然能做到这种程度”——图片预览是真实渲染而不是字符画视频文件能自动提取封面帧PDF 能直接渲染第一页连文件复制进度条都很精致。安装 yazi 的方式有很多cargo install yazi-fm源码编译、从 GitHub Releases 下载预编译二进制、brew install yazi也可以。因为 Rust 编译比较耗时我建议直接下载二进制或者用包管理器而不是现场编译。yazi 的所有配置文件集中在~/.config/yazi/核心有三个yazi.toml控制整体行为keymap.toml定义快捷键theme.toml设置主题配色。这种按职责拆分的配置方式非常现代比 ranger 的单一大配置文件清晰得多。5.2 yazi 的异步 IO 和原生命令带来怎样的实际体验我在一台普通的笔记本上对比过 ranger 和 yazi 进入含 5000 个文件的目录时的表现yazi 几乎瞬间完成渲染ranger 则有一小段明显的加载过程。这背后的原因在于 yazi 的 IO 全部使用异步模型文件列表的加载、图标和元数据的获取以非阻塞方式进行界面始终流畅响应不会因为某个子目录读取缓慢而卡住整个界面。yazi 的另一个让我印象深刻的是它的原生文件操作逻辑。复制文件时ranger 调用系统cp命令大文件复制过程中界面会卡住yazi 内置了异步复制/移动/删除实现你可以在文件复制的过程中继续浏览目录、执行其他操作复制进度条在状态栏单独显示。状态栏还会展示当前目录文件数、选中文件数、磁盘空间等实时信息。这些细节在图形文件管理器中司空见惯但在终端工具里很少见。5.3 yazi 的预览能力与生态对旧工具形成了代差优势yazi 的预览支持依赖一组外部命令但它对每种外部工具的调用方式都做了合理封装只要装好依赖就能开箱即用。图片预览依赖chafa字符画或 Kitty 图像协议、sixel 协议PDF 依赖pdftoppm视频封面提取依赖ffmpeg。我的 Ubuntu 上装了 chafa、ffmpeg 和 pdftoppm 之后yazi 的预览体验基本能覆盖我日常遇到的绝大多数文件类型。yazi 还有一个很有诚意的功能内置插件系统。你可以用 Lua 编写自定义预览规则、排序规则、文件过滤逻辑。当前生态还比较年轻已经有不少现成插件可以下载比如 git 状态显示、归档解压等。对于一个 2022 年才开始起步的项目来说这个扩展步伐相当快。使用 yazi 时我唯一要适应的是它的配置语法。它不走 Vim 风格而是用 TOML 来描述键位映射初次修改keymap.toml会有一点学习成本。但我认为这个方向是对的——用现代配置语言让新用户不用先学一门古老的脚本语言就能完成定制。综合体验下来yazi 已经取代 ranger 成为我本机的主力文件管理器尤其是打开包含大量文件的源码目录时那种“指哪打哪”的顺滑感是旧工具给不了的。6. 横向对比与选型四款工具的核心参数与适用人群6.1 一张表看懂四款工具的定位差异很多刚接触终端文件管理器的人会在 ranger、nnn、lf、yazi 之间纠结。事实上这四款工具的目标并不完全相同与其争谁更优不如看谁更适合自己的使用习惯。我根据实际体验总结了下面这张表对比维度rangernnnlfyazi开发语言PythonCGoRust安装包形态脚本依赖库单二进制单二进制单二进制启动速度中极快极快快资源占用中极低低低文件预览优秀支持图片/PDF弱无持续预览可配置取决脚本极强异步渲染键位风格Vim 风格Vim/方向键双支持Vim 风格自定义 TOML插件扩展丰富社区大内置插件库实用Shell 自由定制Lua 插件系统学习曲线中低中高中最适配场景初次体验、完整预览服务器、常驻轻量导航最小化环境、深度定制现代终端、高颜值体验6.2 基于使用场景的选型建议如果你是纯新手第一次想在终端里管理文件我的建议是直接装 ranger。原因很简单资料多、键位逻辑全面、遇到问题时搜索解决方案最快。先花半小时学会j/k/h/l、空格选中、复制粘贴删除之后不管换到哪款工具这套心智模式都能迁移。如果你需要一款“待在后台的长期伙伴”比如你是一个 SSH 重度用户需要在服务器上快速浏览目录、偶尔解压、偶尔排查磁盘占用nnn 是最佳选择。它的轻量决定了你不会因为多开几个标签页就担心内存上涨退出自动 cd 的功能更是让“浏览”和“执行”之间零阻力。如果你是一个喜欢“手里握着完全控制权”的终端玩家lf 会让你很舒服。它把几乎所有东西都变成了 shell 脚本你写配置的过程其实就是锤炼自己 shell 能力的过程。它是四款工具里最“程序员”的一个也正因为如此它的可能性边界完全由你的脚本水平决定。如果你追求现代体验、屏幕前长时间工作、希望终端文件管理器拥有和图形界面一样顺滑的交互yazi 是当下最值得投入时间学习的那一个。它的异步架构和预览能力属于代差优势这个项目还处于快速迭代期假以时日大概率会成为终端文件管理器领域的主流选择。7. 实际组合使用与踩坑记录关于终端文件管理器我后悔没早点知道的事7.1 把 TFM 和 shell 绑成一套完整工作流用了多年终端文件管理器后我越来越觉得它不该是一个孤立存在的程序而应该是整个终端工作流里的一个枢纽。我自己在 zsh 里配置了一个简化版的fm函数绑定到CtrlO不管当前在哪个目录按下快捷键就会启动 nnnfm() { nnn $ if [ -f $HOME/.config/nnn/.lastd ]; then . $HOME/.config/nnn/.lastd fi }因为 nnn 退出时会把当前目录写入.lastd文件source 这个文件就能实现在 shell 里自动 cd 到退出前的目录。这样我可以在终端文件管理器里把目录翻到位退出后 shell 已经站在了目标目录马上就能执行git status、vim之类的操作。与此同时我在 lf 的配置里绑定了CtrlO打开 fzf 模糊搜索目录并切换过去。终端文件管理器的意义从来不在于“替代 shell”而在于“让 shell 更好用”。7.2 教训一图片预览不是装上就有的图片预览是终端文件管理器最吸引人但也最容易劝退人的功能。ranger 里我配置了 w3m-img发现 Windows Terminal 不支持后来换到 yazi装了 chafa 之后才勉强看到字符画版预览。如果你在远程服务器上通过 SSH 使用这些工具请先确认你的终端客户端支持什么样的图像协议。iTerm2 用户可以直接体验比较完美的预览效果Kitty 终端用户同样非常舒服但使用普通 SSH、Windows Terminal 或 macOS 自带的 Terminal.app图片预览请直接放弃或降低期待。我的建议是先把文本预览调好图片预览当作锦上添花不要让它成为你选择工具的首要标准。7.3 教训二中文文件名排序和显示问题终端文件管理器在显示中文文件名时往往不会遇到乱码但在排序上可能和系统文件管理器不一致。这是因为不同的工具对字节序和 locale 的排序规则处理不同。yazi 支持按拼音排序的插件ranger 可以通过set sort相关配置调整。如果你的目录里中文文件名很多建议设置系统 LANG 为zh_CN.UTF-8并且优先选择 yazi 这类现代工具因为它对 Unicode 的处理更细腻。7.4 教训三预览脚本的超时设置必须重视ranger 和 lf 的预览都是“调用外部命令”的机制如果外部命令卡住了比如在超大 PDF 上执行 pdftoppm整个界面就会被卡住。ranger 的 scope.sh 中有一个timeout命令包裹预览逻辑但超时时间默认可能偏长。我把预览超时调整成 1 到 2 秒之后体验提升非常明显即使某些文件无法预览也不会拖累整体操作。yazi 因为异步 IO 的特性天然规避了这个问题这也是我越来越依赖它的原因之一。7.5 最后一点真心话工具始终是手段效率来自手上的肌肉记忆回看我这几年的终端使用经历最深的感悟是没有一步到位的神器只有不断打磨的工作流。ranger 让我学会了 Vim 式导航nnn 让我明白轻量的价值lf 让我把 shell 脚本写得更得心应手yazi 则让我看到了终端工具的前沿形态。每个人都可以从这 4 款里找到自己的切入点但真正带来效率提升的是你愿意花一两天时间把键位变成肌肉记忆、把配置改成自己习惯的那份投入。如果你看完文章不知道从哪里开始我的建议很直接先在本机装好 ranger随便打开一个目录把j/k/h/l这 4 个键按熟然后你自然会知道下一个该试哪一款。
返回列表