कैसे कमांड प्रॉम्प्ट पर वापस रेंजर फ़ाइल एक्सप्लोरर से बाहर निकलें, लेकिन वर्तमान निर्देशिका रखें?


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"'

और इस उपनाम को अपने पसंदीदा शेल के आर सी में लिखने की सिफारिश की जाती है।


2
वाह, बहुत चालाक है, यह मेरे लिए कभी नहीं हुआ आप एक कार्यक्रम के लिए एक आदेश जारी कर सकते हैं, इसे समाप्त कर सकते हैं ;और फिर अर्ध-बृहदान्त्र के बाद अधिक कमांड निर्दिष्ट कर सकते हैं - जो मान रहे हैं कि आप जिस बिंदु पर बंद हैं ranger, धन्यवाद!
the_velour_fog

1
.rangerdirइसे छिपाने के बजाय उपयोग करने पर विचार करें । या, अंत में इसे हटा rm -d $HOME/rangerdir
मतीन उल्हाक

यह बहुत अच्छा है, लेकिन अगर मैं इसे सही तरीके से समझूं, तो इसका मतलब यह होगा कि आपके पास स्थायी रूप से वह व्यवहार है। यदि अच्छा होगा यदि वर्तमान रेंजर निर्देशिका या निर्देशिका में बाहर निकलने का विकल्प हो, तो आप रेंजर शुरू करते समय।
neverfox

कभी नहीं एक बार जब आप एक उपनाम बनाते हैं, तो यह आपके ऊपर है कि आप उस उपनाम के अंदर आने के लिए निर्देशिका के चयन की पेशकश करते हैं। बाइनरी कॉल करने से पहले या इसके खत्म होने के बाद चयन किया जा सकता है।
गोमबाई संडोर

इस भयानक समाधान के लिए धन्यवाद! मैं मछली के खोल का उपयोग कर रहा हूं, इसलिए अपना उपनाम सेट करने के लिए, मैंने उपयोग किया fish_configऔर इसके लिए एक संक्षिप्त नाम जोड़ा ranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
रॉकज़ोम्फ 2

24

एस

यदि आप हिट करते हैं S, तो यह वर्तमान निर्देशिका पर एक नया शेल खोलता है।

फिर यदि आप Ctrl + Dशेल पर हिट करते हैं, तो यह वापस चला जाता है ranger

यह समाधान अक्सर पर्याप्त होता है।


7

मुझे एक आसान उपाय मिला। जब आप रेंजर स्थापित करते हैं, तो यह आपके बिन फ़ोल्डर में एक स्क्रिप्ट डाल देगा, जिसे निष्पादित किया गया है, तो कार्यक्रम शुरू होगा। लेकिन अगर आप इसे स्रोत के साथ

$ स्रोत रेंजर

यह रेंजर को लॉन्च करेगा और आपके बाहर निकलने पर अंतिम विज़िट किए गए फ़ोल्डर में छोड़ देगा।

इसलिए यदि आप डिफ़ॉल्ट रूप से यह व्यवहार चाहते हैं, तो बस करें

$ उर्फ ​​रेंजर = 'स्रोत रेंजर'

या इससे भी बेहतर इसे अपने .bashrc फ़ाइल में डालें।

इस सुविधा के लिए प्रलेखन और कार्यान्वयन देखने के लिए, अपने बिन फ़ोल्डर में रेंजर स्क्रिप्ट पढ़ें।


जाहिरा तौर पर इस तकनीक (जिसे सिर्फ क्रियान्वित करने के लिए छोटा किया जा सकता है . ranger) का उल्लेख विकी
cjauvin

4

गोम्बाई संडोर के जवाब की गुल्लक को वापस करने के लिए, मैं आलिया को एक मामूली समायोजन करने का सुझाव देता हूं:

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

"$ Home / rangerdir" को "$ Home / .rangerdir" में बदलकर आप उर्फ ​​द्वारा बनाई गई फ़ाइल को छिपा देते हैं। बस इसे बनाता है इसलिए यह परेशान होकर होम फोल्डर को बंद नहीं करता है। यह कैसे काम करता है कोई कार्यात्मक अंतर नहीं बनाता है।


2

मैं गम्बई और इसके अन्य प्रस्तावित वेरिएंट की तुलना में बेहतर जवाब के साथ एक समान प्रश्न पर ठोकर खाई । यह कब से बेहतर है।

  1. यह tmp फ़ोल्डर में डालकर बनाई गई फ़ाइल का ध्यान रखेगा ताकि इसे सिस्टम द्वारा हटाया जा सके
  2. यह अधिक साफ कोड है (हालांकि गंबाई का जवाब एक फ़ंक्शन में परिवर्तित किया जा सकता है)

रेंजर के गिट रेपो में पहले से ही शेल फ़ाइल में एक फ़ंक्शन है:

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"
}

आप इस फ़ंक्शन को अपने पसंदीदा शेल आरसी (उदाहरण के लिए ~/.zshrc) फ़ाइल में रख सकते हैं और या तो उपनाम बना सकते हैं और / या इसे एक महत्वपूर्ण संयोजन से बाँध सकते हैं (फिर से दोनों आरसी फ़ाइल में जा सकते हैं):

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

प्रेरणा के लिए गोम्बाई के लिए धन्यवाद, लेकिन उबंटू 14.04 एलटीएस पर मैंने पाया कि समाधान काफी काम नहीं करता था। इसे थोड़ा संशोधित करना और मेरे .bashrc में एक उपनाम के रूप में सहेजना, निम्नलिखित ने पूरी तरह से काम किया ( rangerdirफ़ाइल बनाने के बाद ):

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

Askubuntu पर निम्नलिखित पोस्ट से मुझे यह पता लगाने में मदद मिली कि मैं यह जानने की कोशिश कर रहा था कि मैं जो अलग-अलग समाधान आज़मा रहा था, वह काम क्यों नहीं कर रहा था: /ubuntu/404141/why-cant-i-pipe-into-cd


1

क्या मैं एक-अप कर सकता हूँ? अन्य तर्कों से गुज़रना उपयोगी हो सकता है, इसलिए इसे अपने शेल्के में रखें

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

0

एक समारोह आवरण लिखकर इसे और अधिक सुंदर तरीका दिया गया है। बस कमांड का उपयोग करें ranger, और यदि आप सिंक निर्देशिका को वापस मुख्य शेल में बदलना चाहते हैं, तो रेंजर को पूंजी के साथ छोड़ दें Q

(नीचे दिए गए कोड बैश और 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


(१) ऐसा लगता है कि आपको उद्धृत करने में कुछ समस्याएँ हैं। (२) on ऑन डिमांड ’से आपका क्या अभिप्राय है?
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.