Ranger dosya gezgini komut istemine geri nasıl çıkılır, ancak geçerli dizini nasıl saklanır?


28

Bir linux terminal içinden Ranger terminal dosya gezgini kullanıyorum .
Ana dizindeki ve başlatma rangerındaki komut isteminden başladığımı söyle

user@/home/user $ ranger

ranger açılır ..... ve ranger programı içinde araştırıyorum:

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Eğer sonra ranger çıkmak için q isabet, ben ranger başlattığım aynı klasöre geri düştü. yani

user@/home/user $

Ranger çıkmak ve ranger ile içinde bulunduğum dizinde kalmak mümkün mü, i.

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  

Yanıtlar:


29

Kılavuzuna göre

--choosedir=targetfile    
    Allows you to pick a directory with ranger. When you exit ranger, it will write the last visited directory into targetfile.

Yani tek yapmanız gereken şöyle bir takma ad oluşturmak:

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

Ve bu takma adı tercih ettiğiniz kabuğun rc'ye yazmanız önerilir.


2
vay bu oldukça zeki, Bana hiç bir program için bir komut verebilir, bir ile sonlandırabilir ;ve daha sonra yarı kolondan sonra daha fazla komut belirtebilirsiniz - Ben yakın noktada çalışıyorum varsayalım ranger, teşekkürler!
the_velour_fog

1
Gizlemek için .rangerdirbunun yerine kullanmayı düşünün . Ya da sonunda silin rm -d $HOME/rangerdir.
Mateen Ulhaq

Bu harika ama doğru anlarsam bu davranışa kalıcı olarak sahip olduğunuz anlamına gelir. Geçerli ranger dizinine VEYA ranger'ı başlattığınızda bulunduğunuz dizine çıkma seçeneğine sahip olmanın bir yolu olsaydı iyi olurdu.
neverfox

neverfox Bir takma ad oluşturduktan sonra, bu takma adın içine yerleştirilecek dizinin seçimini yapmak size kalmıştır. Seçim ikili dosya çağrılmadan önce veya bittikten sonra yapılabilir.
Gombai Sándor

Bu harika çözüm için teşekkürler! Balık kabuğunu kullanıyorum, bu yüzden takma adımı ayarlamak için kullandım fish_configve kısaltma ekledim ranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
rockzombie2 16:18


7

Daha kolay bir çözüm buldum. Ranger'ı yüklediğinizde, bin klasörünüze yürütülürse programı başlatacak bir komut dosyası koyacaktır. Ama eğer kaynak yaparsan,

$ source ranger

ranger başlatacak ve çıktığınızda sizi son ziyaret ettiğiniz klasöre bırakacaktır.

varsayılan olarak bu davranışı istiyorsanız,

$ alias ranger = 'kaynak ranger'

veya daha iyi .bashrc dosyanıza koyun.

Bu özelliğin belgelerini ve uygulamasını görmek için bin klasörünüzdeki ranger komut dosyasını okuyun.


Görünüşe göre bu teknik (sadece yürütmek için kısaltılabilir . ranger) wiki
cjauvin

4

Gombai Sándor'un cevabının arkasına piggy olmak için, takma adda küçük bir ayar yapılmasını öneriyorum:

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

"$ Home / rangerdir" i "$ Home / .rangerdir" olarak değiştirerek takma ad tarafından oluşturulan dosyayı gizli yaparsınız. sadece rahatsız edici bir şekilde ana klasörü karıştırmayacak şekilde yapar. nasıl çalıştığı konusunda işlevsel bir fark yaratmaz.


2

Gambai ve diğer önerilen varyantlarına kıyasla daha iyi bir cevapla başka bir yerde benzer bir soru üzerine tökezledim . O zamandan beri daha iyi.

  1. oluşturulan dosyayı sistem tarafından silinebilmesi için tmp klasörüne koyarak ilgilenir.
  2. daha temiz bir koddur ( Gambai'nin cevabı bir fonksiyona dönüştürülebilir)

Bir kabuk dosyasında zaten ranger'ın git repo'sunda bir işlev vardır:

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

Bu işlevi sık kullanılanınızın shell rc (örneğin ~/.zshrc) dosyasına koyabilir ve takma ad oluşturabilir ve / veya bir tuş bileşimine bağlayabilirsiniz (yine her ikisi de rc dosyasına girebilir):

alias nav=ranger-cd

ve / veya

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

: Yasal Uyarıbindkey ZSH yukarıdaki çalışır ve tercih ettiğiniz kabuk dayalı değiştirmek gerekir


1

İlham için Gombai için teşekkürler, ama Ubuntu 14.04 LTS'de çözümün işe yaramadığını gördüm. Biraz değiştirerek ve .bashrc dosyamda takma ad olarak kaydederken, aşağıdakiler mükemmel bir şekilde çalıştı ( rangerdirdosyayı oluşturduktan sonra ):

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

Askubuntu ile ilgili aşağıdaki yazı, neden denediğim farklı çözümlerin işe yaramadığını anlamaya çalışırken bana yardımcı oldu: /ubuntu/404141/why-cant-i-pipe-into-cd


1

hepinizi birebir yapabilir miyim? diğer argümanlardan geçmek yararlı olabilir, bu yüzden bunu shellrc'nize koyun

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

0

İşte bir işlev sarıcı yazarak daha zarif bir yol. Sadece komutu kullanın ve rangerdizin değişimini ana kabuğa geri senkronize etmek istiyorsanız, ranger'ı capital ile kapatın Q.

(Aşağıdaki kodlar Bash ve ZSH ile test edilmiştir.)

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
}

Bu , istek üzerine dizin değişikliğini geri senkronize etmenizi sağlar . :qNormal olarak çıkmak, Qdizinden çıkmak ve değiştirmek için kullanın .


(1) Alıntıyla ilgili bazı sorunlarınız var gibi görünüyor. (2) 'Talep üzerine' ile ne demek istiyorsun?
Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.