Linux 神级文件管理器ranger
ranger是linux的一个终端文件管理器
,它的feature有
- vi按键绑定
- 与shell环境完美结合,可以使用各种shell工具
- 在tty上也能工作
- 像vim一样的可扩展性
本文是为了帮助我记忆一些ranger常用的功能而写的
文件树中导航
h
,j
,k
,l
同vi按键绑定
删除
dD
删除
dT
移动到回收站
重命名
a
或A
重命名,自动移动光标到扩展名前,默认行为是不修改扩展名
cw
也可以重命名,这个按键在vim中代表改变单词(change word),与a
的区别是,a
修改文件名是在原文件名的基础上修改的,而cw
要输入完整的文件名
历史导航
一般的文件管理器往往有一个左右的箭头,代表回到之前的目录/回到之前离开的目录,或者更简单点,类似于浏览器的历史导航功能
H
或L
在历史中导航,同vi按键绑定
复制
y
,按键绑定同vi,表示yank 复制,接下一个按键才能表示一个具体操作
yy
复制文件,如同vim的yy
表示复制一行yn
复制文件名,即yank namey.
复制不带扩展名的文件名,即 yank name before .yp
复制文件路径 即yank path
另外, dd
代表剪贴,也有复制的功能
与其他文件管理器不同的是,ranger维护一个复制缓冲区,当已经复制一些文件后,可以向复制缓冲区中添加或删除文件
ya
向缓冲区中添加文件yr
将文件从缓冲区中删除
粘贴
pp
粘贴一个已经复制的文件到当前目录,同vim按键绑定
po
粘贴并覆盖,即paste and overwrite
当出现重名文件时,会自动修改文件名
使用shell复制时,往往会遇到这种情况:复制大文件时,会阻塞终端,花费时间很长,而且没有进度条
而ranger可以在后台复制大文件,不阻塞当前操作,并且会在底栏显示任务进度
可以输入w
查看ranger在后台进行的任务
pP
和pO
对应pp
和po
,但是会在后台完成
多tab
众所周知有一个操作系统的默认文件管理系统在过去一直没有tab栏的功能,跨目录复制文件时,常常需要打开两个窗口alt+$i
表示打开第$i
个tab,$i
可以是数字1-9,还有两个特殊的按键
alt+l
表示移动到上一个tab 即 left tab
alt+r
表示移动到下一个tab 即 right tab
查看文件元数据
一般的文件管理器常常有查看文件创建日期,大小的功能,但是往往还有所不足,例如
- 目录的大小往往不显示(需要花费时间统计)
- 文件的权限,所有者往往隐藏在属性一栏里
- 文件的种类往往要通过扩展名判断
ranger作为一个神级文件管理器,这些功能自然都是有的
- 对于文件,会在文件名的右侧显示出大小,对于文件,默认显示4K(因为linux的目录是一个抽象的文件,它占用一个block,一个block大小是4K,用来存储目录的元数据)
可以用
du
命令统计文件大小,等效于执行du --max-depth=1
,也可以用dU
,会将du
的输出按照大小排序 - ranger的底栏会显示当前文件的权限(rwx),所有者/组,大小,上次的修改日期,当前目录的所有文件大小总和,当前文件所在的磁盘的剩余空间,当前屏幕占所有内容的进度(类似于vim显示光标在文本中的百分比位置)
- 类似于shell,文件会被高亮显示,可以根据颜色快速区分目录,图片,压缩包,适配,可执行,软链接等等
快速导航
一般的文件管理器往往在左侧有一些常用的位置,可以快速到达,ranger也可以快速到达一些常用的位置g
即go,可以用来快速到达一个位置
gh
即go home 相当于执行cd ~
,这应该是linux用户最常用的功能gp
即go /tmp,快速到达/tmp目录gi
相当于执行fm.cd('/run/media/' + os.getenv('USER'))
,这个目录是用来mount用户的外接存储设备的,U盘,机械硬盘都会被mount到这里gg
和G
类似与vim的按键绑定,快速到达当前目录的开头和结尾- 还有
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的文件,就会用记事本打开它,但是一般的文件管理器提供的这种功能往往有所不足,比如
- 文件无法预览
- 文件类型未知
- 要用其他方式打开文件,往往需要打开一个二级菜单
而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等信息
- 即使没有扩展名,也最好能够识别出它是纯文本并预览
另外,还有很多各种各样的文件类型需要使用不同的预览方式,例如
- office的doc/docx, ppt/pptx, xls/xlsx文件快速预览
- 图片jpg, png, svg等等的预览
- html,md文件的预览
最特殊的,二进制文件,类型非常多,常见的有
- 各种平台上的可执行
- 各种平台上的动态库,静态库
- 数据文件(数据格式有约定)
- 压缩文件,存档文件 …
可见种类实在是太多了,很多文件管理器往往只能做到预览一部分的文件
ranger通过简单的配置就能做到识别文件并预览大部分的文件,可以通过修改%rangerdir/data/scope.sh
来启用纯文本文件以外的预览(预览二进制)
scope.sh
会自动寻找已经安装的其他软件并使用它,比如说
file
用于检测文件类型chardet
一个python的模块,用于检测文件编码方式python-bidi
用于显示从右到左书写的文字,例如阿拉伯语img2txt
用于显示图片的ASCII字符画w3mimgdisplay
/ueberzug
/mpv
/iTerm2
/kitty
/Terminology
等等,用于图片预览convert
是imagemagick
工具的一部分,用来自动旋转图片并预览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
搜索的结果有很多,跳转起来也是相当麻烦的,而且有些情况下,需要查看一类文件,例如
- 找到同一扩展名的文件
- 找到命名具有同一规律的文件
这种时候可以输入
zz
,开启模糊查找模式,它跟f
的区别就是,会过滤掉不匹配的结果,而且不会自动进入目录
有了zz
和f
这两个命令,就能快速在一个十分复杂的文件系统中导航
此外,shell还可以在任何一个地方使用cd命令快速到达另一个地方,而不管这两个地方相隔多远,ranger也可以直接输入cd,然后输入路径,就能到达指定的路径,这个功能就像g
这个按键一样,可以迅速离开当前位置而不经过它的上级目录