레인저 CD를 폴더에 넣고 쉘을 호출하시겠습니까?

레인저 CD를 폴더에 넣고 쉘을 호출하시겠습니까?

나는 그것을 사용하고 있다레인저스내 파일 시스템을 찾아보세요.

cdRanger를 떠나지 않고도 폴더에 들어갈 수 있는 바로가기가 있나요 ?(Ranger에서 탐색하여 찾은 폴더 위치가 포함된 열린 bash에서와 같이)?

답변1

나는 이 질문에 대한 답을 에서 찾았다.매뉴얼 페이지:

S는 현재 디렉토리에서 쉘을 엽니다.

네, 여기에 질문하기 전에 먼저 읽어보셔야 할 것 같아요.

답변2

또 다른 방법은 기본 쉘을 "따르게"하는 것입니다.ranger(1)새 디렉토리로 이동하고 ranger(1)종료한 후(또는 정지, 일반적으로 ctrl+ z) 기본 쉘이 이미 ranger(1)종료했던 동일한 디렉토리에 있도록 파일 시스템을 둘러쌉니다.

이렇게 하려면 ranger(1)명령 앞에 다음을 추가하여 셸 "소스"를 가져옵니다.단어 .(예: 점 또는 마침표) 또는단어 source일부 껍질에.

. ranger

ranger(1)이제 쉘은 파일 시스템을 "따릅니다" .

ranger이는 명령(파이썬 스크립트)에 내장 된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
}

나는 이것을 내 도트 파일에 동기화했습니다.여기그리고여기.

관련 정보