Linux 神级文件管理器ranger

ranger是linux的一个终端文件管理器

,它的feature有

  • vi按键绑定
  • 与shell环境完美结合,可以使用各种shell工具
  • 在tty上也能工作
  • 像vim一样的可扩展性

ranger预览图 本文是为了帮助我记忆一些ranger常用的功能而写的

文件树中导航

h,j,k,l同vi按键绑定

删除

dD 删除 dT 移动到回收站

重命名

aA重命名,自动移动光标到扩展名前,默认行为是不修改扩展名 cw也可以重命名,这个按键在vim中代表改变单词(change word),与a的区别是,a修改文件名是在原文件名的基础上修改的,而cw要输入完整的文件名

历史导航

一般的文件管理器往往有一个左右的箭头,代表回到之前的目录/回到之前离开的目录,或者更简单点,类似于浏览器的历史导航功能 HL在历史中导航,同vi按键绑定

复制

y,按键绑定同vi,表示yank 复制,接下一个按键才能表示一个具体操作

  • yy 复制文件,如同vim的yy表示复制一行
  • yn 复制文件名,即yank name
  • y. 复制不带扩展名的文件名,即 yank name before .
  • yp 复制文件路径 即yank path

另外, dd代表剪贴,也有复制的功能 与其他文件管理器不同的是,ranger维护一个复制缓冲区,当已经复制一些文件后,可以向复制缓冲区中添加或删除文件

  • ya 向缓冲区中添加文件
  • yr 将文件从缓冲区中删除

粘贴

pp 粘贴一个已经复制的文件到当前目录,同vim按键绑定 po 粘贴并覆盖,即paste and overwrite 当出现重名文件时,会自动修改文件名
使用shell复制时,往往会遇到这种情况:复制大文件时,会阻塞终端,花费时间很长,而且没有进度条
而ranger可以在后台复制大文件,不阻塞当前操作,并且会在底栏显示任务进度 可以输入w查看ranger在后台进行的任务 pPpO对应pppo,但是会在后台完成

多tab

众所周知有一个操作系统的默认文件管理系统在过去一直没有tab栏的功能,跨目录复制文件时,常常需要打开两个窗口
alt+$i 表示打开第$i个tab,$i可以是数字1-9,还有两个特殊的按键 alt+l 表示移动到上一个tab 即 left tab alt+r 表示移动到下一个tab 即 right tab

查看文件元数据

一般的文件管理器常常有查看文件创建日期,大小的功能,但是往往还有所不足,例如

  1. 目录的大小往往不显示(需要花费时间统计)
  2. 文件的权限,所有者往往隐藏在属性一栏里
  3. 文件的种类往往要通过扩展名判断

ranger作为一个神级文件管理器,这些功能自然都是有的

  1. 对于文件,会在文件名的右侧显示出大小,对于文件,默认显示4K(因为linux的目录是一个抽象的文件,它占用一个block,一个block大小是4K,用来存储目录的元数据) 可以用du命令统计文件大小,等效于执行du --max-depth=1,也可以用dU,会将du的输出按照大小排序
  2. ranger的底栏会显示当前文件的权限(rwx),所有者/组,大小,上次的修改日期,当前目录的所有文件大小总和,当前文件所在的磁盘的剩余空间,当前屏幕占所有内容的进度(类似于vim显示光标在文本中的百分比位置)
  3. 类似于shell,文件会被高亮显示,可以根据颜色快速区分目录,图片,压缩包,适配,可执行,软链接等等

快速导航

一般的文件管理器往往在左侧有一些常用的位置,可以快速到达,ranger也可以快速到达一些常用的位置
ggo,可以用来快速到达一个位置

  1. ghgo home 相当于执行cd ~,这应该是linux用户最常用的功能
  2. gpgo /tmp,快速到达/tmp目录
  3. gi 相当于执行 fm.cd('/run/media/' + os.getenv('USER')),这个目录是用来mount用户的外接存储设备的,U盘,机械硬盘都会被mount到这里
  4. ggG 类似与vim的按键绑定,快速到达当前目录的开头和结尾
  5. 还有g/,ge,go等等,但是使用次数比较少,没有必要记忆

打开shell

在图形化的文件管理器中寻找文件时,往往需要打开shell输入命令,一般的文件管理器都有打开shell的功能,例如Windows的Explore可以Shift+右键可以在右键菜单中看到Open in Terminal,而KDE的dolphin甚至可以在下方打开一个pannel,随时使用shell 要快速执行一个shell命令,可以输入!s在底栏输入shell命令,但是这种方式不会返回任何输出(实际上,当退出ranger后就能看到之前shell命令的输出) 为了获得输出,可以输入S,会打开一个shell,要退出这个shell只需要像一般的终端一样输入exit或按下Ctrl+D,会返回到ranger

打开文件

很多文件管理器都有一个功能,就是打开文件,比如在Windows上双击一个扩展名为txt的文件,就会用记事本打开它,但是一般的文件管理器提供的这种功能往往有所不足,比如

  1. 文件无法预览
  2. 文件类型未知
  3. 要用其他方式打开文件,往往需要打开一个二级菜单

而ranger利用linux的生态巧妙地解决了这三个问题

预览就是在不打开文件的情况下(不使用默认软件打开它)快速查看文件内容
在windows上实现文件预览,可以打开Explore的预览功能,但是这种功能实际使用中比较鸡肋,因为它只能预览极少类型的文件(例如txt),而且还会占用窗口很大的空间 实际上,日常使用中遇到的文件类型是非常复杂的,比如说纯文本的文件

  • txt
  • 各种语言的源文件,例如c,cpp,h,py,java,js,html,css,cs…
  • 数据交换文件,例如json, xml, scv…
  • 配置文件,例如conf, ini, cfg, yaml…
  • 日志文件,例如log,out等
  • 没有扩展名的纯文本
  • 各种各样编码方式的纯文本

可见纯文本文件的类型就有非常多种,而不同纯文本文件的用途不同,期望的显示方式也不同,比如说

  • 大部分文件都只需要开头十几行,不需要读取完整的文件造成过多的磁盘访问浪费性能
  • 各种语言的源文件、配置文件、数据交换文件最好能有语法高亮,并使用等宽字体显示
  • 日志文件,最好高亮显示Warning等信息
  • 即使没有扩展名,也最好能够识别出它是纯文本并预览

另外,还有很多各种各样的文件类型需要使用不同的预览方式,例如

  1. office的doc/docx, ppt/pptx, xls/xlsx文件快速预览
  2. 图片jpg, png, svg等等的预览
  3. html,md文件的预览

最特殊的,二进制文件,类型非常多,常见的有

  1. 各种平台上的可执行
  2. 各种平台上的动态库,静态库
  3. 数据文件(数据格式有约定)
  4. 压缩文件,存档文件 …

可见种类实在是太多了,很多文件管理器往往只能做到预览一部分的文件
ranger通过简单的配置就能做到识别文件并预览大部分的文件,可以通过修改%rangerdir/data/scope.sh来启用纯文本文件以外的预览(预览二进制) scope.sh会自动寻找已经安装的其他软件并使用它,比如说

  • file 用于检测文件类型
  • chardet 一个python的模块,用于检测文件编码方式
  • python-bidi 用于显示从右到左书写的文字,例如阿拉伯语
  • img2txt 用于显示图片的ASCII字符画
  • w3mimgdisplay / ueberzug / mpv / iTerm2 / kitty / Terminology等等,用于图片预览
  • convertimagemagick工具的一部分,用来自动旋转图片并预览svg图片
  • ffmpegthumbnailer 用于显示视频的封面(缩略图)
  • highlight / bat / pygmentize 用于代码的语法高亮
  • atoll / bsdtar / unrar / unzip / zipinfo / sed / tar / 7z 用来预览存档和压缩文件
  • lynx / w3m / elinks 用来预览html文件(渲染html)
  • pdftotext / mutool预览pdf的文本,pdftoppm把pdf转成图片预览
  • djvutxt 预览文本类型的DjVu文件, ddjvu把DjVu文件转成图片预览
  • calibre / epub-thumbnailer 预览epub文件(电子书文件格式)的图片
  • transmission-show 预览BitTorrent文件(种子文件)的信息
  • mediainfo / exiftool 预览媒体文件
  • odt2txt 预览Open Document(开放文档格式,是文档格式的标准,office的word, ppt, excel也支持这些格式所以能预览)
  • python / jq 预览json文件
  • fontimage 预览字体文件

这种机制的优点就是,只要有可以用的工具,ranger就会使用它来预览,而不需要任何额外配置,如果没有,ranger也能正常工作,只是少一个功能

当光标在一个文件时,可以输入l使用默认的方式打开一个文件,这个操作很符合vim的操作的直觉 也可以输入r,它会弹出一个打开方式的列表,可以输入数字选择打开的方式,也可以直接回车代表默认方式 此外,当光标处于目录时,输入l会进入这个目录,而输入r可以选择一个方式打开这个目录此时可以选择用dolphin打开这个目录

高级功能

linux的shell在文件系统中导航时,使用tab进行补全是很方便的,比如说一个文件特别长,我不想完整输入,只需要输入前面几个字符,再按tab,就能自动补全了,这也是shell好用的一个重要原因
类似地,ranger也有根据文件名的前几个字符快速确定文件的功能 输入f,开始查找文件,只需要输入文件的一部分字符,ranger会自动把光标移动到搜索到的文件上,如果能够唯一确定文件,ranger会直接打开它(打开文件或目录),熟练使用这个功能,可以快速在文件树中导航!
如果f查找的结果不唯一,可以用n到达下一个搜索结果,用N到达上一个搜索结果
如果f搜索的结果有很多,跳转起来也是相当麻烦的,而且有些情况下,需要查看一类文件,例如

  1. 找到同一扩展名的文件
  2. 找到命名具有同一规律的文件 这种时候可以输入zz,开启模糊查找模式,它跟f的区别就是,会过滤掉不匹配的结果,而且不会自动进入目录
    有了zzf这两个命令,就能快速在一个十分复杂的文件系统中导航
    此外,shell还可以在任何一个地方使用cd命令快速到达另一个地方,而不管这两个地方相隔多远,ranger也可以直接输入cd,然后输入路径,就能到达指定的路径,这个功能就像g这个按键一样,可以迅速离开当前位置而不经过它的上级目录