Làm thế nào để thoát trình thám hiểm tệp Ranger trở lại dấu nhắc lệnh nhưng vẫn giữ thư mục hiện tại?


28

Tôi đang sử dụng trình thám hiểm tập tin thiết bị đầu cuối Ranger từ bên trong một thiết bị đầu cuối linux.
Nói rằng tôi bắt đầu từ dấu nhắc lệnh trong thư mục nhà và khởi chạy ranger

user@/home/user $ ranger

kiểm lâm mở ..... và trong chương trình kiểm lâm tôi khám phá:

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Nếu sau đó tôi nhấn q để thoát khỏi kiểm lâm, tôi bị rơi trở lại cùng thư mục mà tôi đã khởi chạy kiểm lâm. I E

user@/home/user $

Có thể thoát khỏi kiểm lâm, và vẫn còn trong thư mục tôi đã ở với kiểm lâm, tôi.

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  

Câu trả lời:


29

Theo hướng dẫn của nó

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

Vì vậy, tất cả những gì bạn cần làm là tạo một bí danh như thế này:

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

Và viết bí danh này vào RC của vỏ yêu thích của bạn được khuyến khích.


2
wow điều đó khá thông minh, Tôi chưa bao giờ có thể ra lệnh cho một chương trình, chấm dứt nó bằng một ;và sau đó chỉ định thêm các lệnh sau dấu chấm phẩy - Tôi giả sử đang chạy tại điểm bạn đóng ranger, cảm ơn!
the_velour_fog

1
Xem xét sử dụng .rangerdirthay vì để làm cho nó ẩn. Hoặc xóa nó ở cuối , rm -d $HOME/rangerdir.
Mateen Ulhaq

Điều này thật tuyệt nhưng nếu tôi hiểu đúng, điều này có nghĩa là bạn có hành vi đó vĩnh viễn. Nếu có cách tốt thì có một tùy chọn để thoát vào thư mục kiểm lâm hiện tại HOẶC thư mục bạn đang ở khi bạn bắt đầu kiểm lâm.
neverfox

neverfox Một khi bạn tạo một bí danh, tùy thuộc vào bạn nếu bạn cung cấp lựa chọn thư mục để vào bên trong bí danh đó. Việc lựa chọn có thể được thực hiện trước khi nhị phân được gọi hoặc sau khi kết thúc.
Gombai Sándor

Cảm ơn bạn cho giải pháp tuyệt vời này! Tôi fish_configranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
tình cờ

24

S

Nếu bạn nhấn S, nó sẽ mở một shell mới trên thư mục hiện tại.

Sau đó, nếu bạn nhấn Ctrl + Dvào vỏ, nó sẽ quay trở lại ranger.

Cách giải quyết này thường đủ tốt.


7

Tôi tìm thấy một giải pháp dễ dàng hơn. Khi bạn cài đặt ranger, nó sẽ đặt một tập lệnh vào thư mục bin của bạn, nếu được thực thi, sẽ khởi động chương trình. Nhưng nếu bạn nguồn nó, với

kiểm lâm nguồn $

nó sẽ khởi chạy kiểm lâm và thả bạn vào thư mục đã truy cập cuối cùng khi bạn thoát.

Vì vậy, nếu bạn muốn hành vi này theo mặc định, chỉ cần làm

$ alias ranger = 'kiểm lâm nguồn'

hoặc thậm chí tốt hơn là đặt nó vào tệp .bashrc của bạn.

Để xem tài liệu và triển khai cho tính năng này, hãy đọc tập lệnh kiểm lâm trong thư mục bin của bạn.


Rõ ràng kỹ thuật này (có thể rút ngắn thành chỉ thực hiện . ranger) được đề cập trong wiki
cjauvin

4

Để đáp lại câu trả lời của Gombai Sándor, tôi đề nghị thực hiện một điều chỉnh nhỏ cho bí danh:

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

Bằng cách thay đổi "$ Home / rangerdir" thành "$ Home / .rangerdir", bạn tạo tập tin được tạo bởi bí danh. chỉ làm cho nó không gây khó chịu cho thư mục nhà. nó làm cho không có sự khác biệt chức năng để làm thế nào nó hoạt động.


2

Tôi tình cờ gặp một câu hỏi tương tự ở nơi khác với câu trả lời tốt hơn so với Gambai và các biến thể được đề xuất khác của nó. Nó là tốt hơn kể từ đó.

  1. nó sẽ chăm sóc tập tin đã tạo bằng cách đặt nó vào thư mục tmp để hệ thống có thể bị xóa
  2. đó là mã sạch hơn (mặc dù câu trả lời của Gambai có thể được chuyển đổi thành hàm)

Có một chức năng trong một tệp shell đã có trong repit git của 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"
}

Bạn có thể đặt chức năng này trong ~/.zshrctệp shell RC (ví dụ ) yêu thích của mình và tạo bí danh và / hoặc liên kết nó với tổ hợp phím (một lần nữa cả hai có thể đi vào tệp RC):

alias nav=ranger-cd

và / hoặc

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

Tuyên bố từ chối trách nhiệm: các bindkeyhoạt động trên trong ZSH và bạn nên thay đổi nó dựa trên vỏ ưa thích của bạn


1

Cảm ơn Gombai đã truyền cảm hứng, nhưng trên Ubuntu 14.04 LTS tôi thấy giải pháp không hiệu quả lắm. Sửa đổi nó một chút và lưu dưới dạng bí danh trong .bashrc của tôi, phần sau hoạt động hoàn hảo (sau khi tạo rangerdirtệp):

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

Bài đăng sau đây trên Askubfox đã giúp tôi tìm hiểu khi tôi đang cố gắng tìm hiểu lý do tại sao các giải pháp khác nhau mà tôi đang cố gắng không hoạt động: https://askubfox.com/questions/404141/why-cant-i-pipe-into-cd


1

tôi có thể lên một lần được không? chuyển qua các đối số khác có thể hữu ích, vì vậy hãy đặt nó trong shellrc của bạn

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

0

Đây là một cách thanh lịch hơn bằng cách viết một hàm bao. Chỉ cần sử dụng lệnh rangervà nếu bạn muốn đồng bộ hóa thư mục thay đổi trở lại vỏ chính, hãy thoát khỏi kiểm lâm với vốn Q.

(Các mã dưới đây được thử nghiệm với Bash và 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
}

Điều này sẽ cho phép bạn đồng bộ trở lại thay đổi thư mục theo yêu cầu . Sử dụng :qđể thoát bình thường, Qđể thoát và thay đổi thư mục của bạn.


(1) Có vẻ như bạn có một số vấn đề với việc trích dẫn. (2) Ý của bạn là '' theo yêu cầu '' là gì?
Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.