it-swarm.com.de

Wie kann ich den Ranger-Datei-Explorer verlassen, um zur Eingabeaufforderung zurückzukehren, aber das aktuelle Verzeichnis beizubehalten?

Ich verwende den Ranger-Terminal-Datei-Explorer innerhalb eines Linux-Terminals.
Sagen wir, ich beginne mit der Eingabeaufforderung im Home-Verzeichnis und starte Ranger

[email protected]/home/user $ ranger

ranger öffnet ..... und innerhalb des Ranger-Programms erkunde ich:

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Wenn ich dann q drücke, um Ranger zu beenden, werde ich wieder in denselben Ordner verschoben, aus dem ich Ranger gestartet habe. d.h.

[email protected]/home/user $

Ist es möglich, Ranger zu beenden und in dem Verzeichnis zu bleiben, in dem ich mich mit Ranger befand?.

[email protected]/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  
25
the_velour_fog

Nach seinem Handbuch

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

Sie müssen also nur einen Alias ​​wie diesen erstellen:

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

Es wird empfohlen, diesen Alias ​​in das RC Ihrer bevorzugten Shell zu schreiben.

22
Gombai Sándor

S

Wenn Sie S drücken, wird im aktuellen Verzeichnis eine neue Shell geöffnet.

Wenn Sie dann in der Shell Ctrl + D drücken, kehrt die Shell zu ranger zurück.

Diese Problemumgehung ist häufig ausreichend.

Ich habe eine einfachere Lösung gefunden. Wenn Sie Ranger installieren, legt es ein Skript in Ihrem Bin-Ordner ab, das das Programm startet, wenn es ausgeführt wird. Aber wenn Sie es beschaffen, mit

$ source ranger

beim Beenden wird Ranger gestartet und Sie werden im zuletzt besuchten Ordner abgelegt.

wenn Sie dieses Verhalten standardmäßig möchten, tun Sie dies einfach

$ alias ranger = 'source ranger'

oder noch besser in Ihre .bashrc-Datei einfügen.

Lesen Sie das Ranger-Skript in Ihrem bin-Ordner, um die Dokumentation und Implementierung für diese Funktion anzuzeigen.

6
Ogino Knaus

Als Ausgleich zu Gombai Sándors Antwort schlage ich vor, den Alias ​​geringfügig anzupassen:

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

Indem Sie "$ Home/rangerdir" in "$ Home/.rangerdir" ändern, wird die vom Alias ​​erstellte Datei ausgeblendet. macht es nur so, dass es den Home-Ordner nicht nervt. Es macht keinen funktionalen Unterschied, wie es funktioniert.

4
dduxx

Vielen Dank für Gombai für die Inspiration, aber auf Ubuntu 14.04 LTS fand ich, dass die Lösung nicht ganz funktioniert hat. Wenn Sie es leicht modifizieren und als Alias ​​in meiner .bashrc-Datei speichern, hat Folgendes einwandfrei funktioniert (nachdem Sie die Datei rangerdir erstellt haben):

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

Der folgende Beitrag auf askubuntu hat mir geholfen, als ich herauszufinden versuchte, warum verschiedene Lösungen, die ich versuchte, nicht funktionierten: https://askubuntu.com/questions/404141/why-cant -i-pipe-into-cd

1
garzai

Ich bin auf eine ähnliche Frage mit besserer Antwort gestoßen im Vergleich zu Gambai und seine anderen vorgeschlagenen Varianten. Es ist besser da.

  1. es kümmert sich um die erstellte Datei, indem es sie in den Ordner tmp legt, damit sie vom System gelöscht werden kann
  2. es ist sauberer Code (obwohl die Gambais Antwort in eine Funktion umgewandelt werden kann)

Es gibt eine Funktion in einer Shell-Datei, die sich bereits im Git-Repo von Ranger befindet:

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

Sie können diese Funktion in die Shell rc (zum Beispiel ~/.zshrc) -Datei Ihres Favoriten einfügen und entweder einen Alias ​​erstellen und/oder sie an eine Tastenkombination binden (wieder können beide in die rc-Datei aufgenommen werden):

alias nav=ranger-cd

und/oder

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

Haftungsausschluss: Die oben genannte bindkey funktioniert in ZSH und Sie sollten sie basierend auf Ihrer bevorzugten Shell ändern

1

darf ich Sie alle allein lassen? Das Durchgehen der anderen Argumente kann nützlich sein. Geben Sie dies in Ihre Shell ein

function ranger () {
    /usr/bin/ranger --choosedir=$HOME/.rangerdir [email protected]
    LASTDIR=`cat $HOME/.rangerdir` 
    cd $LASTDIR
    echo -n > $HOME/.rangerdir
}
1
Michael Kraume

Hier ist eine elegantere Möglichkeit, indem Sie einen Funktionswrapper schreiben. Verwenden Sie einfach den Befehl ranger, und wenn Sie das Verzeichnis synchronisieren möchten, kehren Sie zur Haupt-Shell zurück, und beenden Sie Ranger mit dem Großbuchstaben Q.

(Die folgenden Codes sind Tests mit Bash und 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[@]} "[email protected]"
  if [[ -f "$tempfile" ]] && [[ "$(cat -- "$tempfile")" != "$PWD" ]]; then
    cd -- "$(cat -- "$tempfile")" || return
  fi
  command rm -f -- "$tempfile" 2>/dev/null
}

Auf diese Weise können Sie die Verzeichnisänderung bei Bedarf zurücksynchronisieren . Verwenden Sie :q zum normalen Beenden, Q zum Beenden und Ändern Ihres Verzeichnisses.

0
Simba

Das ist jetzt ein bisschen alt, aber ich bin mit dem gleichen Problem hier gelandet. Ciro Santilli sagte oben, dass, wenn Sie "S" drücken, wenn Sie in Ranger sind, es in einer neuen Shell geöffnet wird. Wenn ich auf meinem System "S" in einem Verzeichnis drücke, wird das Verzeichnis in der aktuellen Shell genau so geöffnet, wie ich es wollte. Hoffe das hilft anderen Leuten.

0
girvain