ranger的配置与使用

ranger 是一个基于文本的由 Python 编写的文件管理器。不同层级的目录分别在一个面板的三列中进行展示. 可以通过快捷键, 书签, 鼠标以及历史命令在它们之间移动. 当选中文件或目录时, 会自动显示文件或目录的内容.

主要特性有: vi 风格的快捷键, 书签, 选择, 标签, 选项卡, 命令历史, 创建符号链接的能力, 多种终端模式, 以及任务视图. ranger 可以定制命令和快捷键,包括绑定到外部脚本。最接近的竞争者是 Vifm, 它有 2 个面板以及 vi 风格的快捷键,但是总体特性相对较少1

一、ranger的基本安装

首先开始安装ranger及相关的预览插件:

[code lang=bash]
$ 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 # 多媒体文件预览
[/code]

这个时候ranger的默认配置对于图片,存档,html和pdf以及多媒体已经有了相当多的预览功能了,但是对于doc等文件还是相当的不友好,需要进一步的配置。

二、基本使用方法

下面是几个快捷键:

快捷键 命令
? 列出帮助
1? 列出所有快捷键
2? 列出所有命令
l,enter 使用文件关联方式打开文件

三、预览配置

首先需要下载能够将对应格式的文件转化为txt的程序:

[code lang=bash]
$ sudo apt-get install catdoc # doc预览
$ sudo apt-get install docx2txt # docx预览
$ sudo apt-get install xlsx2csv # xlsx预览
[/code]

当然了pandoc也是一个很不错的选择,也能够有效的将各种文件转化为文件格式。

ranger默认情况下不会生成配置文件,需要手动生成(拷贝):

[code lang=bash]
ranger –copy-config=all
[/code]

这个时候ranger就会生成配置文件目录~/.config/ranger,下面主要有这样几个文件:

rc.conf     - 选项设置和快捷键
commands.py - 能通过 : 执行的命令
rifle.conf  - 指定不同类型的文件的默认打开程序。
scope.sh    - 用于指定预览程序的文件

首先得设置一下文件关联,系统自带的文件关联存在一些问题,其中最主要就是一些自定义文件类型不是很好识别,这个时候最好直接采用系统默认的程序打开,尤其是doc文件。

[code lang=bash]
#找出含有docx的一行,然后将其注释起来:
#ext docx?, has catdoc, terminal = catdoc — "$@" | "$PAGER"

has xdg-open, flag f = xdg-open "$1"
[/code]

这样对于很多扩展文件即可使用系统默认的程序打开了。
然后再修改scope.sh文件,在合适的位置(就是代码相似的位置)添加如下代码:

[code lang=bash]
# 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;;
[/code]

不过很明显的,上述配置仅仅添加了doc、docx、xlsx三种文件预览方式,而对于ppt,pptx以及其它的文件,也可以通过转换成文本的来实现文件预览。

四、功能配置

4.1 删除配置

ranger并没有自带删除的快捷,所以需要手动配置一下.一般情况下,最好使用trash-cli作为删除的命令(相对rm来说要可靠安全得多).
在打开~/.config/ranger/rc.conf文件,然后在最后面添加

[code lang=text]
map D shell trash %s
[/code]

即可实现用”D”将当前所选文件放到trash-bin中去.

4.2 解压缩配置

编辑~/.config/ranger/commands.py文件,添加下面行到文件尾,实现:extract解压选中文件.

[code lang=python]
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()
[/code]

很明显,上面少了很多压缩包的解压方式,如rar之类的,但是可以按照格式,自行添加相应的解压命令.

4.3 压包设置

同样的,将下面内容复制到~/.config/ranger/command.py的末尾,即可实现:compress压缩选中的文件.

[code lang=python]
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]
[/code]

同样的,上面也只支持上面四种压缩方式,对于其它的压缩方式,需要自行添加.

四、结语

当然ranger可定制能力还是非常强,更多的情况可以参考archwiki1,里面有着更多的定制说明。

Reference


  1. archlinux.Ranger.wiki。 
此条目发表在LINUX, 软件安装分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据