web-dev-qa-db-ja.com

レンジャーはフォルダーにcdします(そしてシェルを呼び出します)?

Ranger を使用してファイルシステム内を移動しています。

レンジャーを離れずにcdをフォルダーに入れるショートカットはありますか(レンジャーをナビゲートして見つけたフォルダーの場所を含むオープンbashの場合)

29

man pages でこれに対する答えを見つけました:

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

はい、おそらくここで尋ねる前にそれを読んでおくべきでした。

32

既にレンジャーにいる場合は、:cd /path/to/folderを使用することもできます。

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

10
345422

他の方法で行うこともでき、ranger-cdを使用して、レンジャーを閉じた後に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
}

シェルは、キーバインディングキャピタルQでレンジャーを終了したときにのみディレクトリを変更します(これを変更する場合は、map Qを参照してください)。

私はそれを使っています

alias r=ranger-cd

このスクリプトを他のことにも適用できます。レンジャーを終了し、このディレクトリのvimセッションに切り替えます。

8
laktak

別のアプローチは、ファイルシステムの周りに基本的なシェルを「フォロー」する ranger(1) にすることです。これにより、新しいディレクトリに移動した後、ranger(1)が終了(または中断)します。 ctrl+z)基盤となるシェルはすでにranger(1)が終了したのと同じディレクトリにあります。

これを行うには、コマンドの前にWord_._を付けて、シェルの「ソース」ranger(1)を作成します(つまり、ドットまたはピリオド文字)またはWordsource一部のシェルでは。

_. ranger
_

これで、シェルがファイルシステムを「追跡」しますranger(1)

これは、rangerコマンド(python script))に埋め込まれた bash(1) スクリプトがファイルをソースするときに読み取られるため、機能します。 bash(1) 互換シェルでのみ機能することに注意してください。

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

この埋め込みbashスクリプトは、このファイルをソースとして実行できます。レンジャーの終了後、レンジャーの最後の場所に移動します。最初の引数は、レンジャーを実行するコマンドを指定します。デフォルトは単に「レンジャー」です。 (このファイル自体ではありません!)他の引数はレンジャーに渡されます。

これがranger(1)を使用する優先モードになる場合は、シェル初期化スクリプトでaliasとして追加してください。

1
Neurognostic
rangercd () {
    tmp="$(mktemp)"
    ranger --choosedir="$tmp" "$@"
    if [ -f "$tmp" ]; then
        dir="$(cat "$tmp")"
        rm -f "$tmp"
        if [ -d "$dir" ]; then
            if [ "$dir" != "$(pwd)" ]; then
                cd "$dir"
            fi
        fi
    fi
}

bindkey -s '^o' 'rangercd\n'
0
R0ckyY2