Linuxターミナル内から Rangerターミナルファイルエクスプローラー を使用しています。
ホームディレクトリのコマンドプロンプトから起動してレンジャーを起動するとします
user@/home/user $ ranger
レンジャーが開く.....そして私が探求するレンジャープログラムの中で:
/media/ubuntu/sdf675d7sf5sdfs7/some_directory
次にqを押してレンジャーを終了すると、レンジャーを起動したときと同じフォルダーに戻ります。つまり.
user@/home/user $
レンジャーを終了して、レンジャーと一緒にいたディレクトリに残ることは可能ですか?.
user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $
そのマニュアルによると
--choosedir=targetfile
Allows you to pick a directory with ranger. When you exit ranger, it will write the last visited directory into targetfile.
したがって、必要なのは次のようなエイリアスを作成することだけです。
alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'
また、このエイリアスをお気に入りのシェルのrcに書き込むことをお勧めします。
[〜#〜] s [〜#〜]
S
を押すと、現在のディレクトリに新しいシェルが開きます。
次に、Ctrl + D
シェルでは、ranger
に戻ります。
この回避策は、多くの場合十分です。
私はもっと簡単な解決策を見つけました。レンジャーをインストールすると、binフォルダーにスクリプトが配置され、実行するとプログラムが起動します。しかし、あなたがそれを調達した場合、
$ソースレンジャー
レンジャーを起動し、終了時に最後にアクセスしたフォルダーにドロップします。
したがって、デフォルトでこの動作が必要な場合は、
$エイリアスranger = 'source ranger'
または、それを.bashrcファイルに追加します。
この機能のドキュメントと実装を確認するには、binフォルダーにあるレンジャースクリプトをお読みください。
GombaiSándorの回答を元に戻すために、エイリアスを少し調整することをお勧めします。
alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'
「$ Home/rangerdir」を「$ Home/.rangerdir」に変更すると、エイリアスによって作成されたファイルが非表示になります。ホームフォルダが煩雑に散らからないように、それを作成するだけです。それが機能する方法に機能的な違いはありません。
Gambai およびその他の提案されたバリアントと比較して、 より良い答え を使用して他の場所で同様の質問に遭遇しました。それ以来良いです。
レンジャーのgitリポジトリにあるShellファイルに関数があります:
https://github.com/ranger/ranger/blob/master/examples/bash_automatic_cd.sh
function ranger-cd {
# create a temp file and store the name
tempfile="$(mktemp -t tmp.XXXXXX)"
# run ranger and ask it to output the last path into the
# temp file
ranger --choosedir="$tempfile" "${@:-$(pwd)}"
# if the temp file exists read and the content of the temp
# file was not equal to the current path
test -f "$tempfile" &&
if [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
# change directory to the path in the temp file
cd -- "$(cat "$tempfile")"
fi
# its not super necessary to have this line for deleting
# the temp file since Linux should handle it on the next
# boot
rm -f -- "$tempfile"
}
この関数をお気に入りのシェルrc(たとえば、~/.zshrc
)ファイルを作成し、エイリアスを作成するか、キーの組み合わせにバインドします(どちらもrcファイルに入れることができます)。
alias nav=ranger-cd
および/または
# This will run the function by Ctrl+O through returning
# the string "ranger-cd" in addition to a new-line character
# to act as Enter key-press
bindkey -s "^o" "ranger-cd\n"
免責事項:上記のbindkey
はZSHで機能し、優先シェルに基づいて変更する必要があります
インスピレーションを与えてくれたGombaiに感謝しますが、Ubuntu 14.04 LTSでは、ソリューションがうまく機能しないことがわかりました。これを少し変更して、エイリアスとして.bashrcに保存すると、以下が完全に機能しました(rangerdir
ファイルを作成した後)。
alias ranger='ranger --choosedir=$HOME/rangerdir;cd "$(cat $HOME/rangerdir)"'
Askubuntuに関する次の投稿は、私が試したさまざまなソリューションが機能しない理由を理解しようとしたときに助けになりました: https://askubuntu.com/questions/404141/why-cant-i-pipe- into-cd
ワンアップしてもいい?他の引数を渡すと便利な場合があるので、これをshellrcに入れてください
function ranger () {
/usr/bin/ranger --choosedir=$HOME/.rangerdir $@
LASTDIR=`cat $HOME/.rangerdir`
cd $LASTDIR
echo -n > $HOME/.rangerdir
}
これは、関数ラッパーを作成することによる、よりエレガントな方法です。コマンドranger
を使用し、ディレクトリをメインシェルに変更して同期する場合は、大文字のQ
でレンジャーを終了します。
(以下のコードはBashとZSHでテストされています。)
function ranger {
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")" != "$PWD" ]]; then
cd -- "$(cat -- "$tempfile")" || return
fi
command rm -f -- "$tempfile" 2>/dev/null
}
これにより、ディレクトリの変更オンデマンドを同期できます。使用する :q
は通常どおり終了し、Q
は終了してディレクトリを変更します。
これは少し古いですが、同じ問題でここに行きました。 Ciro Santilliは、レンジャーにいるときに「S」を押すと新しいシェルで開くと述べました。私のシステムでは、ディレクトリで "S"を押すと、現在のシェルでそのディレクトリが開きます。まさに、私がやりたいことです。これが他の人の役に立つことを願っています。