22

Я использую Ranger Terminal Explorer изнутри терминала Linux.
Скажем, я запускаю из командной строки в домашнем каталоге и запускаю рейнджер

user@/home/user $ ranger

Рейнджер открывается ..... и в рамках программы Рейнджер я исследую:

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Если я затем нажму q, чтобы выйти из режима проверки, я попаду обратно в ту же папку, из которой запустил программу проверки. т.е.

user@/home/user $

Можно ли выйти из рейнджера и остаться в каталоге, в котором я был с рейнджером, т.е.

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  

7 ответов7

20

В соответствии с его руководством

--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 вашей любимой оболочки.

17

S

Если вы нажмете S , откроется новая оболочка в текущем каталоге.

Затем, если вы нажмете Ctrl + D на оболочке, она вернется к ranger .

Этот обходной путь часто достаточно хорош.

6

Я нашел более простое решение. Когда вы устанавливаете Ranger, он помещает скрипт в папку bin, который, если он будет выполнен, запустит программу. Но если вы получите его, с

$ source ranger

он запустит средство проверки и поместит вас в последнюю посещенную папку при выходе.

так что если вы хотите это поведение по умолчанию, просто сделайте

$ alias ranger = 'источник рейнджер'

или даже лучше поместите это в свой файл .bashrc.

Чтобы увидеть документацию и реализацию этой функции, прочитайте скрипт рейнджера в папке bin.

4

В дополнение к ответу Гомбая Шандора, я предлагаю немного изменить псевдоним:

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

Изменив «$ Home/rangerdir» на «$ Home/.rangerdir», вы сделаете файл, созданный псевдонимом, скрытым. просто делает так, чтобы не раздражать домашнюю папку. это не имеет никакого функционального значения к тому, как это работает.

1

Спасибо за Gombai за вдохновение, но на Ubuntu 14.04 LTS я обнаружил, что решение не совсем работает. Слегка изменив его и сохранив в качестве псевдонима в моем .bashrc, следующее прекрасно работало (после создания файла rangerdir ):

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

Следующая статья на askubuntu помогла мне, когда я пытался выяснить, почему разные решения, которые я пробовал, не работали: https://askubuntu.com/questions/404141/why-cant-i-pipe-into-cd

1

Я наткнулся на похожий вопрос в другом месте с лучшим ответом по сравнению с Gambai и его другими предложенными вариантами. Так лучше.

  1. он позаботится о созданном файле, поместив его в папку tmp, чтобы он мог быть удален системой
  2. это более чистый код (хотя ответ Gambai можно преобразовать в функцию)

В файле оболочки уже есть функция в git-репозитории рейнджера:

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

Вы можете поместить эту функцию в файл rc оболочки вашего любимого (например, ~/.zshrc) и либо создать псевдоним и / или связать его с комбинацией клавиш (опять же, оба могут войти в файл 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, и вы должны изменить его в зависимости от предпочитаемой вами оболочки

0

Сейчас это немного устарело, но я оказался здесь с той же проблемой. Сиро Сантилли сказал выше, что если вы нажмете "S" в рейнджере, он откроется в новой оболочке. В моей системе, нажав "S" в каталоге, откроется каталог в текущей оболочке, именно то, что я хотел. Надеюсь, что это помогает другим людям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .