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

Phi*_*ide 42 terminal file-manager ranger

我正在使用Ranger浏览我的文件系统。

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

Phi*_*ide 44

我在手册页中找到了答案:

S 在当前目录打开一个shell

是的,在问这里之前可能应该通读一遍。

  • @Hi-Angel,当您浏览目录时,点击“S”,它应该离开 Ranger 并转到新终端。但如果你运行“exit”,你就会回到 Ranger。您需要使用大写的“S”,小写的“s”不起作用。 (5认同)
  • 并在终端中输入“exit”以返回游侠 (4认同)

Neu*_*tic 17

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

要做到这一点,ranger(1)通过在命令前面加上单词 .(即点或句点字符)或某些 shell 上的单词 source来让 shell“源” 。

. ranger
Run Code Online (Sandbox Code Playgroud)

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

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

脚本中注释块

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

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

  • 这个太好了,谢谢分享! (3认同)

345*_*422 12

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

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


lak*_*tak 10

您也可以用另一种方式进行操作,并使用此脚本ranger-cd在关闭 Ranger 后自动更改 bash 中的目录。

function ranger-cd {
    local IFS=$'\t\n'
    local tempfile="$(mktemp -t tmp.XXXXXX)"
    local ranger_cmd=(
        command
        ranger
        --cmd="map Q chain shell echo %d > "$tempfile"; quitall"
    )

    ${ranger_cmd[@]} "$@"
    if [[ -f "$tempfile" ]] && [[ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]]; then
        cd -- "$(cat "$tempfile")" || return
    fi
    command rm -f -- "$tempfile" 2>/dev/null
}
Run Code Online (Sandbox Code Playgroud)

只有当您使用键绑定大写 Q 退出 Ranger 时,您的 shell 才会更改目录(查看map Q您是否要更改此设置)。

我用它

alias r=ranger-cd
Run Code Online (Sandbox Code Playgroud)

您也可以修改此脚本以执行其他操作,例如退出 ranger 并切换到此目录中的 vim 会话。

  • 对于那些正在考虑这个技巧的人,也请看看下面@Neurognostic 的回答。基本上,您可以通过采购 Ranger 来实现相同的目的。因此,以这种方式运行 ranger 也有效:`. 游侠` (2认同)