本文共 4113 字,大约阅读时间需要 13 分钟。
ranger 是一个基于文本的由 Python 编写的文件管理器。不同层级的目录分别在一个面板的三列中进行展示. 可以通过快捷键, 书签, 鼠标以及历史命令在它们之间移动. 当选中文件或目录时, 会自动显示文件或目录的内容.
主要特性有: vi 风格的快捷键, 书签, 选择, 标签, 选项卡, 命令历史, 创建符号链接的能力, 多种终端模式, 以及任务视图. ranger 可以定制命令和快捷键,包括绑定到外部脚本。最接近的竞争者是 Vifm, 它有 2 个面板以及 vi 风格的快捷键,但是总体特性相对较少1
首先开始安装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以及其它的文件,也可以通过转换成文本的来实现文件预览。
ranger并没有自带删除的快捷,所以需要手动配置一下.一般情况下,最好使用trash-cli作为删除的命令(相对rm来说要可靠安全得多).
在打开~/.config/ranger/rc.conf文件,然后在最后面添加map D shell trash %s
即可实现用”D”将当前所选文件放到trash-bin中去.
编辑~/.config/ranger/commands.py文件,添加下面行到文件尾,实现:extract解压选中文件.
class extract(Command): """:extractExtract 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之类的,但是可以按照格式,自行添加相应的解压命令.
同样的,将下面内容复制到~/.config/ranger/command.py的末尾,即可实现:compress压缩选中的文件.
import osfrom ranger.core.loader import CommandLoaderclass 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,里面有着更多的定制说明。
转载地址:http://dtspa.baihongyu.com/