ranger 是一个基于文本的由 Python 编写的文件管理器。不同层级的目录分别在一个面板的三列中进行展示. 可以通过快捷键, 书签, 鼠标以及历史命令在它们之间移动. 当选中文件或目录时, 会自动显示文件或目录的内容.
主要特性有: vi 风格的快捷键, 书签, 选择, 标签, 选项卡, 命令历史, 创建符号链接的能力, 多种终端模式, 以及任务视图. ranger 可以定制命令和快捷键,包括绑定到外部脚本。最接近的竞争者是 Vifm, 它有 2 个面板以及 vi 风格的快捷键,但是总体特性相对较少1
一、ranger的基本安装
首先开始安装ranger及相关的预览插件:
$ sudo apt-get install ranger # ranger 的主程序
$ sudo apt-get install caca-utils # img2txt 图片
$ sudo apt-get install highlight # 代码高亮
$ sudo apt-get install atool # 存档预览
$ sudo apt-get install w3m # html页面预览
$ sudo apt-get install poppler # pdf预览
$ sudo apt-get install mediainfo # 多媒体文件预览
这个时候ranger的默认配置对于图片,存档,html和pdf以及多媒体已经有了相当多的预览功能了,但是对于doc等文件还是相当的不友好,需要进一步的配置。
二、基本使用方法
下面是几个快捷键:
快捷键命令?列出帮助1?列出所有快捷键2?列出所有命令l,enter使用文件关联方式打开文件
三、预览配置
首先需要下载能够将对应格式的文件转化为txt的程序:
$ sudo apt-get install catdoc # doc预览
$ sudo apt-get install docx2txt # docx预览
$ sudo apt-get install xlsx2csv # xlsx预览
当然了pandoc也是一个很不错的选择,也能够有效的将各种文件转化为文件格式。
ranger默认情况下不会生成配置文件,需要手动生成(拷贝):
ranger --copy-config=all
这个时候ranger就会生成配置文件目录~/.config/ranger,下面主要有这样几个文件:
rc.conf - 选项设置和快捷键
commands.py - 能通过 : 执行的命令
rifle.conf - 指定不同类型的文件的默认打开程序。
scope.sh - 用于指定预览程序的文件
首先得设置一下文件关联,系统自带的文件关联存在一些问题,其中最主要就是一些自定义文件类型不是很好识别,这个时候最好直接采用系统默认的程序打开,尤其是doc文件。
#找出含有docx的一行,然后将其注释起来:
#ext docx?, has catdoc, terminal = catdoc -- "$@" | "$PAGER"
has xdg-open, flag f = xdg-open "$1"
这样对于很多扩展文件即可使用系统默认的程序打开了。
然后再修改scope.sh文件,在合适的位置(就是代码相似的位置)添加如下代码:
# Doc documents
doc)
try catdoc "$path" && { dump | trim | fmt -s -w $width; exit 0; }|| exit 1;;
# Docx documents:
docx)
try docx2txt < "$path" && { dump | trim | fmt -s -w $width; exit 0; }|| exit 1;;
# Xlsx documents:
xlsx)
try xlsx2csv "$path" && { dump | trim | fmt -s -w $width; exit 0; }|| exit 1;;
不过很明显的,上述配置仅仅添加了doc、docx、xlsx三种文件预览方式,而对于ppt,pptx以及其它的文件,也可以通过转换成文本的来实现文件预览。
四、功能配置
4.1 删除配置
ranger并没有自带删除的快捷,所以需要手动配置一下.一般情况下,最好使用trash-cli作为删除的命令(相对rm来说要可靠安全得多).
在打开~/.config/ranger/rc.conf文件,然后在最后面添加
map D shell trash %s
即可实现用”D”将当前所选文件放到trash-bin中去.
4.2 解压缩配置
编辑~/.config/ranger/commands.py文件,添加下面行到文件尾,实现:extract解压选中文件.
class extract(Command):
""":extract <paths>
Extract archives
"""
def execute(self):
import os
fail=[]
for i in self.fm.thistab.get_selection():
ExtractProg='7z x'
if i.path.endswith('.zip'):
# zip encoding issue
ExtractProg='unzip -O gbk'
elif i.path.endswith('.tar.gz'):
ExtractProg='tar xvf'
elif i.path.endswith('.tar.xz'):
ExtractProg='tar xJvf'
elif i.path.endswith('.tar.bz2'):
ExtractProg='tar xjvf'
if os.system('{0} "{1}"'.format(ExtractProg, i.path)):
fail.append(i.path)
if len(fail) > 0:
self.fm.notify("Fail to extract: {0}".format(' '.join(fail)), duration=10, bad=True)
self.fm.redraw_window()
很明显,上面少了很多压缩包的解压方式,如rar之类的,但是可以按照格式,自行添加相应的解压命令.
4.3 压包设置
同样的,将下面内容复制到~/.config/ranger/command.py的末尾,即可实现:compress压缩选中的文件.
import os
from ranger.core.loader import CommandLoader
class compress(Command):
def execute(self):
""" Compress marked files to current directory """
cwd = self.fm.thisdir
marked_files = cwd.get_selection()
if not marked_files:
return
def refresh(_):
cwd = self.fm.get_directory(original_path)
cwd.load_content()
original_path = cwd.path
parts = self.line.split()
au_flags = parts[1:]
descr = "compressing files in: " + os.path.basename(parts[1])
obj = CommandLoader(args=['apack'] + au_flags +
[os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr)
obj.signal_bind('after', refresh)
self.fm.loader.add(obj)
def tab(self):
""" Complete with current folder name """
extension = ['.zip', '.tar.gz', '.rar', '.7z']
return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]
同样的,上面也只支持上面四种压缩方式,对于其它的压缩方式,需要自行添加.
四、结语
当然ranger可定制能力还是非常强,更多的情况可以参考archwiki1,里面有着更多的定制说明。