当先锋百科网

首页 1 2 3 4 5 6 7

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" &&amp; { dump | trim | fmt -s -w $width; exit 0; }|| exit 1;;
    # Xlsx documents:
    xlsx)
        try xlsx2csv "$path" &&amp; { 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,里面有着更多的定制说明。