Ranger 파일 탐색기를 종료하여 명령 프롬프트로 돌아가고 현재 디렉토리를 유지하는 방법은 무엇입니까?


28

내가 사용하고 레인저 터미널 파일 탐색기를 리눅스 터미널 내에서.
홈 디렉토리의 명령 프롬프트에서 시작하고 레인저를 시작한다고 가정 해보십시오.

user@/home/user $ ranger

레인저가 열립니다 ..... 그리고 레인저 프로그램 내에서 탐색 :

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

그런 다음 q를 눌러 레인저를 종료하면 레인저를 시작한 폴더로 돌아갑니다. 즉

user@/home/user $

레인저를 종료하고 레인저와 함께 있던 디렉토리에 남아있을 수 있습니까?

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  

답변:


29

매뉴얼에 따르면

--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에 쓰는 것이 좋습니다.


2
와우 그 영리한, 그것은 결코 나에게 당신이 프로그램에 명령을 발행하고 a로 종료 ;한 다음 세미콜론 다음에 더 많은 명령을 지정할 수 있습니다.-닫는 지점에서 실행된다고 가정합니다 ranger. 감사합니다!
the_velour_fog

1
.rangerdir대신 숨겨서 사용하는 것이 좋습니다. 또는 끝에서 삭제하십시오 rm -d $HOME/rangerdir.
Mateen Ulhaq

이것은 훌륭하지만 올바르게 이해하면 영구적으로 해당 행동을 할 수 있습니다. 현재 레인저 디렉토리로 나가거나 레인저를 시작할 때 있던 디렉토리로 나가는 옵션이 있다면 좋을 것입니다.
neverfox

neverfox 별명을 작성하면 해당 별명 안에 들어갈 디렉토리 선택을 제공하는 것은 사용자에게 달려 있습니다. 바이너리가 호출되기 전이나 완료된 후에 선택할 수 있습니다.
곰 바이 산도르

이 멋진 솔루션에 감사드립니다! 나는 생선 껍질을 사용하고 있기 때문에, 내 별칭을 설정하기 위해, 나는 fish_config약자를 사용 하고 약어를 추가했다 ranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
rockzombie2


7

더 쉬운 해결책을 찾았습니다. 레인저를 설치하면 bin 폴더에 스크립트가 저장되어 실행되면 프로그램이 시작됩니다. 그러나 당신이 그것을 공급하면

$ 소스 레인저

당신이 나가면 레인저를 시작하고 마지막으로 방문한 폴더에 당신을 드롭합니다.

기본적으로이 동작을 원하면

$ alias ranger = '소스 레인저'

또는 .bashrc 파일에 넣는 것이 좋습니다.

이 기능에 대한 설명서 및 구현을 보려면 bin 폴더에서 레인저 스크립트를 읽으십시오.


분명히이 기법 (실행만으로 단축 될 수 있음 . ranger)은 위키
cjauvin

4

Gombai Sándor의 답변을 피하기 위해 별칭을 약간 조정하는 것이 좋습니다.

alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'

"$ Home / rangerdir"을 "$ Home / .rangerdir"로 변경하면 별명으로 작성된 파일이 숨겨집니다. 홈 폴더를 성가 시게 방해하지 않도록하십시오. 작동 방식과 기능상의 차이는 없습니다.


2

나는 Gambai 및 다른 제안 된 변형과 비교하여 더 나은 대답으로 다른 곳에서 비슷한 질문을 발견 했습니다. 그 이후로 더 좋습니다.

  1. 생성 된 파일을 tmp 폴더에 넣어 시스템에서 삭제할 수 있도록 처리합니다.
  2. 더 깨끗한 코드입니다 ( 감독의 답변을 함수로 변환 할 수는 있지만)

쉘 파일에는 이미 레인저의 git repo에있는 기능이 있습니다.

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을에서 위의 작품과 당신이 원하는 쉘에 따라 변경해야


1

영감을 얻은 곰 바이에게 감사하지만 Ubuntu 14.04 LTS에서 솔루션이 제대로 작동하지 않는다는 것을 알았습니다. 약간 수정하고 내 .bashrc에 별칭으로 저장하면 다음이 완벽하게 작동합니다 ( rangerdir파일 을 만든 후 ).

alias ranger='ranger --choosedir=$HOME/rangerdir;cd "$(cat $HOME/rangerdir)"'

내가하려고했던 다른 솔루션이 작동하지 않은 이유를 알아 내려고 할 때 askubuntu에 다음 포스트가 나를 도와 : /ubuntu/404141/why-cant-i-pipe-into-cd


1

일대 일까? 다른 인수를 전달하면 유용 할 수 있으므로 이것을 shellrc에 넣으십시오.

function ranger () {
    /usr/bin/ranger --choosedir=$HOME/.rangerdir $@
    LASTDIR=`cat $HOME/.rangerdir` 
    cd $LASTDIR
    echo -n > $HOME/.rangerdir
}

0

다음은 함수 래퍼를 작성하여 더 우아한 방법입니다. 명령을 사용하기 만하면 ranger디렉토리 변경 사항을 기본 셸로 다시 동기화하려면 range로 capital를 종료하십시오 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.


(1) 인용에 문제가있는 것 같습니다. (2)``주문형 ''이란 무엇입니까?
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.