Phi*_*ide 42 terminal file-manager ranger
我正在使用Ranger浏览我的文件系统。
是否有一个快捷方式,我可以cd在不离开 Ranger 的情况下进入文件夹(如在打开的 bash 中,通过在 Ranger 中导航找到文件夹的位置)?
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 初始化脚本。
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 会话。