J'utilise Ranger pour naviguer dans mon système de fichiers.
Y a-t-il un raccourci où je cd
dans un dossier sans quitter Ranger (comme dans bash ouvert avec un emplacement d'un dossier trouvé en naviguant dans Ranger) ?
J'ai trouvé la réponse à cela dans les pages de manuel :
S Ouvrez un shell dans le répertoire courant
Oui, vous auriez probablement dû lire cela avant de demander ici.
Vous pouvez également utiliser :cd /path/to/folder
si vous êtes déjà dans Ranger.
Mise à jour: la question a été modifiée depuis que cette réponse a été donnée, la rendant invalide.
Vous pouvez également le faire dans l'autre sens et utiliser ranger-cd
pour changer automatiquement le répertoire en bash après la fermeture de ranger avec ce script .
function ranger-cd {
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")" != "$(echo -n `pwd`)" ]]; then
cd -- "$(cat "$tempfile")" || return
fi
command rm -f -- "$tempfile" 2>/dev/null
}
Votre shell ne change le répertoire que lorsque vous quittez ranger avec le raccourci clavier Q (voir map Q
si vous voulez changer cela).
Je l'utilise avec
alias r=ranger-cd
Vous pouvez également adapter ce script pour faire d'autres choses, par exemple quittez ranger et passez à une session vim dans ce répertoire.
Une autre approche consiste à faire en sorte que le shell sous-jacent "suive" ranger(1)
autour du système de fichiers afin qu'après avoir navigué dans un nouveau répertoire et que ranger(1)
soit quitté (ou suspendu; d'habitude ctrl+z) le Shell sous-jacent sera déjà dans le même répertoire ranger(1)
a été quitté.
Pour ce faire, ayez le shell "source" ranger(1)
soit en préfixant la commande avec le mot .
( c'est-à-dire le point ou le point) ou le mot source
sur certains shells.
. ranger
Maintenant, votre Shell "suivra" ranger(1)
autour du système de fichiers.
Cela fonctionne parce que la commande ranger
(qui est python) a un script bash(1)
qui est lu lors de l'approvisionnement du Notez que cela ne fonctionne que sur les shells compatibles bash(1)
.
À partir d'un bloc de commentaires dans le script :
Ce script bash intégré peut être exécuté en recherchant ce fichier. Il sera enregistré sur le dernier emplacement du ranger après l'avoir quitté. Le premier argument spécifie la commande pour exécuter ranger, la valeur par défaut est simplement "ranger". (Pas ce fichier lui-même!) Les autres arguments sont passés à ranger.
Si cela devient votre mode préféré pour utiliser ranger(1)
dans, ajoutez-le en tant que alias
dans votre script d'initialisation des shells.
rangercd () {
tmp="$(mktemp)"
ranger --choosedir="$tmp" "$@"
if [ -f "$tmp" ]; then
dir="$(cat "$tmp")"
rm -f "$tmp"
if [ -d "$dir" ]; then
if [ "$dir" != "$(pwd)" ]; then
cd "$dir"
fi
fi
fi
}
bindkey -s '^o' 'rangercd\n'