Ranger cd 进入文件夹(并调用 shell)?

Ranger cd 进入文件夹(并调用 shell)?

我在用着游骑兵浏览我的文件系统。

有没有一个快捷方式可以让我在cd不离开 Ranger 的情况下进入文件夹(如在打开的 bash 中,其中包含通过在 Ranger 中导航找到的文件夹位置)

答案1

我在中找到了这个问题的答案手册页

S 在当前目录中打开 shell

是的,在此处询问之前可能应该先阅读该内容。

答案2

另一种方法是让底层 shell“跟随”ranger(1)围绕文件系统,以便在导航到新目录并ranger(1)退出(或挂起;通常为ctrl+ z)后,底层 shell 将已经位于ranger(1)退出的同一目录中。

为此,请ranger(1)通过在命令前添加前缀来获得 shell“源”单词 .(即点或句点字符)或单词 source在一些贝壳上。

. ranger

现在你的 shell 将“跟随”ranger(1)文件系统。

这是有效的,因为ranger命令(这是 python 脚本)有一个嵌入的bash(1)获取文件时读取的脚本。请注意,它仅适用于bash(1)兼容的外壳。

来自一个脚本中的注释块

可以通过获取此文件来执行此嵌入式 bash 脚本。退出后它将cd到游侠的最后位置。第一个参数指定运行 ranger 的命令,默认值只是“ranger”。 (不是这个文件本身!)其他参数传递给 ranger。

如果这成为您首选的使用模式ranger(1),请将其添加到alias您的 shell 初始化脚本中。

alias ranger='. ranger'

答案3

:cd /path/to/folder如果您已经在 Ranger 中,也可以使用。

更新:自给出此答案以来,该问题已被编辑,使其无效。

答案4

我的解决方案不那么花哨,并且比这里的其他解决方案涉及更多的移动部件。

这个想法是,当用户按下S(“shell”的典型绑定)时,将其映射到将当前目录写入临时文件的 Ranger 命令。

然后,将 ranger 包装在一个(在我的例子中,但也zsh应该可以工作)shell 函数中,该函数检查该临时文件是否存在。bash如果存在,则cd转到该目录,然后删除该文件。

由于 shell 函数在当前 shell 中执行,因此它们更改当前目录。

虽然它比这里的其他答案有点复杂,但它不会留下挂起的ranger实例,而且效果很好。

因此,在 中rc.conf添加以下行:

map S quit_and_cd

commands.py(您可以在其中创建自定义 Ranger 命令的文件)文件中,创建该命令:

import os
from ranger.api.commands import Command

class quit_and_cd(Command):
    def execute(self):
        with open("/tmp/cd_ranger", "w") as f:
            f.write(os.path.abspath(self.fm.thisdir.path))
        # same as quitall_bang (:quitall!)
        self.fm.exit()

然后,在 shell 启动(.zshrc.bashrc)中,创建一个名为 ranger 的函数:

ranger () {
        local LOGFILE='/tmp/cd_ranger'
        # `command ranger` to launch ranger itself,
        # instead of causing an infinite loop with
        # this function calling itself
        command ranger "$@" || exit $?
        if [[ -f "${LOGFILE}" ]]
        then
                cd "$(cat "${LOGFILE}")"
                rm -f "${LOGFILE}"
        fi
}

我已将这些同步到我的点文件中,请参阅这里这里

相关内容