レンジャーCDをフォルダに入れてシェルを呼び出しますか?

レンジャーCDをフォルダに入れてシェルを呼び出しますか?

私はそれを使用していますレンジャーズ私のファイルシステムを見つけてください。

cdRangerを離れずにフォルダに入ることができるショートカットはありますか?(Rangerでナビゲートして見つけたフォルダの場所を含む開いたbashのように)

答え1

私はこの質問に対する答えをで見つけた。マニュアルページ:

Sは現在のディレクトリでシェルを開きます。

はい、ここに質問する前に最初にお読みください。

答え2

別の方法は、基本シェルを「フォロー」することです。ranger(1)新しいディレクトリに移動してranger(1)終了した後(または停止、通常はctrl+ z)、デフォルトのシェルがすでにranger(1)終了していたのと同じディレクトリにあるようにファイルシステムを囲みます。

これを行うには、ranger(1)コマンドの前に次を追加してシェル「ソース」を取得します。言葉 .(例:ドットまたはピリオド)または言葉 sourceいくつかの殻に。

. ranger

ranger(1)これで、シェルはファイルシステムに従います。

rangerこれはコマンド(Pythonスクリプト)に組み込まれていますbash(1)ファイルのインポート時に読み込むスクリプトです。以下でのみ機能することに注意してください。bash(1)互換性のあるケースです。

からスクリプトのコメントブロック:

この組み込みのbashスクリプトは、このファイルを取得して実行できます。出るとレンジャーの最後の位置に移動します。最初のパラメータは ranger を実行するコマンドを指定し、デフォルトは「ranger」です。 (ファイル自体ではありません!)他のパラメータはレンジャーに渡されます。

これが好ましい使用パターンになったら、それをシェル初期化スクリプトranger(1)に追加します。alias

alias ranger='. ranger'

答え3

:cd /path/to/folderすでに Ranger にいる場合でも使用できます。

更新:この回答が提供されてから質問が編集され、無効になりました。

答え4

私の解決策は、ここの他の解決策よりも派手で動きやすい部分が多いです。

アイデアは、ユーザーがS(「シェル」への一般的なバインディング)キーを押すと、それを現在のディレクトリを一時ファイルに書き込むRangerコマンドにマップすることです。

次に、一時ファイルが存在することを確認するシェル関数(私の場合は機能しzshますが)でレンジャーをラップします。bash存在する場合は、cdそのディレクトリに移動してファイルを削除します。

シェル関数は現在シェルで実行されるためする現在のディレクトリを変更します。

ここの他の答えよりも少し複雑ですが、静止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()

次に、シェルの開始(.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
}

私はこれを私のドットファイルに同期しました。ここそしてここ

関連情報