我在用着游骑兵浏览我的文件系统。
有没有一个快捷方式可以让我在cd
不离开 Ranger 的情况下进入文件夹(如在打开的 bash 中,其中包含通过在 Ranger 中导航找到的文件夹位置)?
答案1
答案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
}