วิธีออกจาก Ranger file explorer กลับไปที่พรอมต์คำสั่ง แต่เก็บไดเรกทอรีปัจจุบันไว้


28

ฉันกำลังใช้เครื่องมือสำรวจไฟล์เทอร์มินัลของ Rangerจากภายในลินุกซ์เทอร์มินัล
ว่าฉันเริ่มต้นจาก command prompt ในไดเรกทอรีบ้านและเปิดตัวแรนเจอร์

user@/home/user $ ranger

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 เมื่อคุณสร้างนามแฝงมันขึ้นอยู่กับคุณถ้าคุณเสนอตัวเลือกของไดเรกทอรีที่จะลงจอดในนามแฝงนั้น การเลือกสามารถทำได้ก่อนที่จะเรียกไบนารีหรือหลังจากเสร็จสิ้น
Gombai Sándor

ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมนี้! ฉันบังเอิญได้ใช้เปลือกปลาดังนั้นในการตั้งชื่อแทนฉันใช้fish_configและเพิ่มตัวย่อสำหรับ ranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
rockzombie2

24

S

หากคุณกดSมันมันจะเปิดเปลือกใหม่ในไดเรกทอรีปัจจุบัน

แล้วถ้าคุณตีบนเปลือกมันกลับไปCtrl + Dranger

วิธีแก้ปัญหานี้มักจะดีพอ


7

ฉันพบทางออกที่ง่ายขึ้น เมื่อคุณติดตั้งแรนเจอร์มันจะวางสคริปต์ไว้ในโฟลเดอร์ bin ของคุณซึ่งหากดำเนินการแล้วจะเริ่มต้นโปรแกรม แต่ถ้าคุณมากับมันด้วย

แหล่งที่มา $ แรนเจอร์

มันจะเปิดตัวเรนเจอร์และวางคุณลงในโฟลเดอร์ที่เข้าชมล่าสุดเมื่อคุณออก

ดังนั้นหากคุณต้องการให้พฤติกรรมนี้เป็นค่าเริ่มต้นให้ทำ

$ alias ranger = 'source ranger'

หรือดีกว่าวางไว้ในไฟล์. bashrc ของคุณ

หากต้องการดูเอกสารและการใช้งานสำหรับคุณสมบัตินี้ให้อ่านสคริปต์ ranger ในโฟลเดอร์ bin ของคุณ


เห็นได้ชัดว่าเทคนิคนี้ (ซึ่งสามารถย่อให้เหลือเพียงแค่เรียกใช้งาน. ranger) ได้กล่าวถึงในวิกิ
cjauvin

4

เพื่อลูกหมูหลังคำตอบของ Gombai Sándorฉันแนะนำให้ทำการปรับเล็กน้อยกับ alias:

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

ด้วยการเปลี่ยน "$ Home / rangerdir" เป็น "$ Home / .rangerdir" คุณจะสร้างไฟล์โดยนามแฝงที่ซ่อนอยู่ เพียงแค่สร้างมันขึ้นมาเพื่อไม่ให้รกโฟลเดอร์บ้านเกิดความรำคาญ มันไม่ทำให้การทำงานแตกต่างกับวิธีการทำงาน


2

ฉันสะดุดคำถามที่คล้ายกันที่อื่นพร้อมคำตอบที่ดีกว่าเมื่อเปรียบเทียบกับGambaiและตัวแปรที่เสนออื่น ๆ มันจะดีขึ้นตั้งแต่

  1. มันจะดูแลไฟล์ที่สร้างขึ้นโดยวางลงในโฟลเดอร์ tmp เพื่อให้ระบบสามารถลบได้
  2. มันเป็นโค้ดที่สะอาดกว่า (แม้ว่าคำตอบของ Gambaiสามารถแปลงเป็นฟังก์ชันได้)

มีฟังก์ชั่นในไฟล์เชลล์อยู่แล้วใน repo git ของ ranger:

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ไฟล์shell rc ที่คุณชื่นชอบและสร้างนามแฝงและ / หรือผูกมันเข้ากับคีย์ผสม (อีกครั้งทั้งสองสามารถเข้าไปในไฟล์ 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

ขอบคุณสำหรับ Gombai สำหรับแรงบันดาลใจ แต่บน 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

นี่เป็นวิธีที่ยอดเยี่ยมกว่าโดยการเขียนฟังก์ชั่น wrapper เพียงแค่ใช้คำสั่งและถ้าคุณอยากจะลองเปลี่ยนไดเรกทอรีซิงค์กลับไปยังเปลือกหลักออกจากเรนเจอร์ที่มีเงินทุนrangerQ

(รหัสด้านล่างคือการทดสอบกับ 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) คุณหมายถึงอะไร '' on demand ''?
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.