编译需要 cargo 和 rustc 版本不低于 1.90;剪贴板功能需另装 xsel、xclip 或 wl-clipboard;fzf 与 zoxide 为可选依赖,不装则对应功能不可用。
joshuto
kamiyaaLGPL-3.0活跃维护用 Rust 写的终端文件管理器,操作方式类似 ranger,支持键盘操作、多标签和并发任务,适合习惯在终端里高效浏览和管理文件的人。
ranger-like terminal file manager written in Rust
cargo install --git https://github.com/kamiyaa/joshuto.git --forceREADME 未说明;这是终端程序,不涉及 GPU 或显存要求。
用 Rust 写的 ranger 风格终端文件管理器,带预览、标签页和模糊搜索
用 Rust 写的终端文件管理器,操作方式类似 ranger,支持键盘操作、多标签和并发任务,适合习惯在终端里高效浏览和管理文件的人。
核心能力
- 用 TOML 配置键位、主题、mimetype 和书签
- 支持标签页、批量重命名和文件预览
- 通过 fzf 做模糊搜索,可选 zoxide 跳转
- 异步执行剪切、复制、粘贴等文件 IO
- 支持退出后停留在当前目录,并接入回收站
容易踩的坑
- v0.9.9pre-release最新正式版2025-05-20 · 2025-05-20 16:00 UTC
Thank you everyone for all the contributions! :pray: :fire:
Changes
- add back
confirm_exitoption - add
--lastoption tonew_tab- thanks to @Akmadan23
- add support for %s and %p to subprocess commands
- thanks to @Akmadan23
- Zoxide improvements
- thanks to @chrjabs
- hide image preview in fzf and task view
- thanks to @Akmadan23
- autocompletion for each command
- thanks to @Akmadan23
- xdg-thumb for previews and thumbnails for non image files
- thanks to @DLFW
- gtrash support
- thanks to @SBhojani
- more linemode options
- thanks to @Lzzzzzt
- backspace or delete will exit textfield if empty
- mouse scrolling support for preview
- thanks to @krivahtoo
- configure preview image background via theme.toml
- thanks to @benjajaja
- thread optimizations
- migrate from libc to nix
- add suspend command support
- enable lto for release builds
- fix
parent_cursor_move_*commands not setting cwd properly - add minimal view mode
- thanks to @flipsi
- add command to set view mode
- thanks to @flipsi
- destruct tuples
- thanks to @Integral-Tech
- rework paste symlink to work like ranger
- use bat as fallback for html and json
- thanks to @j-lakeman
- replace manual sign detection with format spec
- thanks to @Integral-Tech
- documentation improvements
- update dependencies
- thanks to @benjajaja , @paretje
- add option to use current working drectory with %d keyword
- thanks to @as3ii
- add Ctrl+h as backspace in textfield
- thanks to @jackyhevey
Fixes
- fix crash when trying to
open_withinside an empty directory - fix ratatui dep
- fix crash when io operation doesn't start successfully
- remove ctime for musl env
- thanks to @usamoi
- fix autocomplete not working
- fix ci
- thanks to @Integral-Tech
- fix foreground color
- thanks to @j-lakeman
- fix not being able to copy filenames with single quotes
- add back
- v0.9.8pre-release2024-03-15 · 2024-03-15 23:54 UTC
查看更新说明
Fix version in Cargo.lock
- v0.9.7pre-release2024-03-15 · 2024-03-15 23:05 UTC
查看更新说明
Updates on the project
Work and life has been quite busy for me recently. Thus I haven't had the time to look over all the issues and pull requests. I apologize for all merge conflicts I've been causing for the outstanding pull requests :pray: I will get to them eventually!
As always, I appreciate all the contributions made by everyone!
Changes
- Improved documentation
- Thanks to @Integral-Tech , @11D-Beyonder , @b-m-f
- Update install script
- Thanks to @kennycallado
- Add large file support for exif
- Thanks to @Mroik
- Add more detailed version output via shadow-rs
- Thanks to @xrelkd
- Add command for printing embedded configs
- Thanks to @sushi-shi
- Add lscolor support
- Thanks to @luteran42
- Mouse support is now configurable
- Thanks to @Mroik
- Ratatui-image integration
- Thanks to @benjajaja
- Use less pager for output instead of joshuto's own confirm
- Thanks to @luteran42
- Add
captureandstdoutcommand- Thanks to @DLFW
- Add
case_insensitive_extoption (originallycase_sensitive_ext- Thanks to @Akmadan23
- Add reverse flag to sort
- Thanks @Akmadan23
Fixes
- Fix overflow bug with bookmarks
- Thanks to @pantosaur
- Fix trash command with filenames with apostrophes
- Thanks to @Akmadan23
- Fix clear numbered command buffer on cursor move
- Thanks to @Akmadan23
- Fix theme not using prefix
- Fix using real name instead of username
- Thanks to @Akmadan23
- Improved documentation
- v0.9.6pre-release2023-11-20 · 2023-11-20 21:55 UTC
查看更新说明
Changes
- Improved documentation
- Thanks to @cereum , @DLFW , @Lzzzzzt , @kennycallado , @radek-sprta , @Mroik
- Migrating to ratatui
- Scrollable Tab bar
- Thanks to @DLFW
- Add support for command aliasing
- Thanks to @Akmadan23
- Add custom commands
- Thanks to @Dzordzu
- Mtime displays localtime instead of UTC
- Thanks to @Lzzzzzt
- Add user and group in footer
- Thanks to @Lzzzzzt
- Add more options to linemode and make it more configurable
- Thanks to @Lzzzzzt
- Add current dir name to tab
- Thanks to @Lzzzzzt
- Add --all-selected option to CopyFilePath
- Thanks to @uros-5
- Trash feature uses command line tools instead of library
- This reduces dependencies and compilation errors
- Add optional description to keymaps
- Also show description in help menu
- Case sensitive option for searching, selecting and filtering
- Thanks to @ctj12461
- Regex support
- Thanks to @ctj12461
- Add a lot more select and filtering options
- Thanks to @ctj12461
- Add no confirm option to
delete_files- Thanks to @Akmadan23
- Cleanup warnings
- Thanks to @kjuulh
- Command chaining support
- Subcommand support
- Thanks to @xrelkd
- Shell completion for nix flake
- Thanks to @xrelkd
rename_file_append_extcommand- Thanks to @rqdmap
- Update flake
- Thanks to @Ruixi-rebirth
- Add mutex lock for preview threads
- Thanks to @luteran42
- Add wezterm compatibility
- Thanks to @kennycallado
- Add focus on create option
- Thanks to @Akmadan23
- Add %p keyword to file_path()
- Thanks to @luteran42
- Add more mimetypes
- Thanks to @MayoDuckPy , @xfzv
- Add more icons
- Thanks to @xrelkd
Fixes
- Make input thread more robust
- There are times when terminal input and joshuto are out of sync, causing keystrokes and view to be out of sync and unusable
- Remove temporary file after
bulk_rename - Recycle bin feature more isolated from conditional compilation
- Fix xdg_open for non-forking applications
- Fix macos build
- Thanks to @kennycallado
- Remove debug print
- Thanks to @awerty-noob
- Improved documentation
- v0.9.50.9.5pre-release2023-07-04 · 2023-07-04 20:36 UTC
查看更新说明
Thank you everyone who has contributed to and supported this project. It has been over a year since I made a new release. In that time, the amount of users using Joshuto has grown a lot and a lot of new features has been added. I hope to continue improving on this project and working together with everyone!
Changes
-
delete_filesnow has the ability to be queued up (just like cut/copy operations) -
--file-chooseroption for using joshuto as a file picker -
add
symlink_filescommand- works like cut/copy but instead of pasting the file, paste an absolute or relative symlink to the targets
-
File sorting now works per tab
- Thanks to @DLFW
-
Visual mode support
- Thanks to @DLFW
-
numbered_commandis now a proper command that can be invoked -
tab_switch_indexopen tabs to populate given index -
Show how many files are selected in the footer
-
Mimetype support! (require
filecommand installed to work) -
Add Ranger-like mouse controls
- Thanks to @DLFW
-
filtercommand to filter directory listing- Thanks to @krivahtoo
-
Add linemode
- Thanks to @DLFW
-
Support multiple zoxide arguments
- Thanks to @krivahtoo
-
rename_keep_ext: rename with the file name removed but keeps extension- Thanks to @fritzrehde
-
Bookmark support
-
--permanentlyoption for deleting files- Thanks to @krivahtoo
-
Screenshot compression
- Thanks to @indigolain
-
Remove deleted file entries from history
- Thanks to @sergey-suslov
-
New tab can now open in specific directories
- Thanks to @DLFW
-
Ability to quit to directory via command line argument on startup
- Thanks to @pantosaur
-
Migration to
ratatui- Thanks to @Ragnyll and @MathieuHerrmann
-
Nix flake support
- Thanks to @Ruixi-rebirth
-
Add support for customizing file icons
- Thanks to @krivahtoo
-
Migration to
termionv2- Thanks to @asim215
-
Migrate to shellexpand v3 and rustyline v12
-
Avoid changing constraints during preview loading
- Thanks to @Handfish
-
Documentation fixes and updates
- Thanks to @aouerf , @DLFW , @yanshay , @danielronalds , @a-kenji , @eltociear , @hezhizhen , @imbolc , @donovanglover
Fixes
- Configs are loaded at the right time now (on startup instead of when used)
- Fix preview width is 0
- Fix HSplit view crashing
- Thanks to @Vinegret43
- Fix
subdir_fzfstuck on large directories- Thanks to @Jacky-Lzx
- Fix incorrect
sort_methodin default config- Thanks to @rqdmap
-
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
joshuto
ranger-like terminal file manager written in Rust.

Dependencies
- cargo >= 1.90
- rustc >= 1.90
- xsel/xclip/wl-clipboard (optional, for clipboard support)
- fzf (optional)
- zoxide (optional)
Also see Cargo.toml
Building
~$ cargo build
Installation
For single user
~$ cargo install --path=. --force
For single user with cargo
~$ cargo install --git https://github.com/kamiyaa/joshuto.git --force
System wide
~# cargo install --path=. --force --root=/usr/local # /usr also works
From pre-compiled binary
Dependencies:
- curl
- openssl
Latest release
Installs the latest version using the default installation path ($HOME/.local/bin/).
~$ bash <(curl -s https://raw.githubusercontent.com/kamiyaa/joshuto/master/utils/install.sh)
Custom Installation path
Allows you to install Joshuto to a custom directory by setting the INSTALL_PREFIX variable.
~$ INSTALL_PREFIX="$HOME" bash <(curl -s https://raw.githubusercontent.com/kamiyaa/joshuto/master/utils/install.sh)
System wide
~# INSTALL_PREFIX="/usr/local/bin" bash <(curl -s https://raw.githubusercontent.com/kamiyaa/joshuto/master/utils/install.sh)
Specific release
Installs a specific release version of Joshuto by the desired version number.
~$ RELEASE_VER='v0.9.4' bash <(curl -s https://raw.githubusercontent.com/kamiyaa/joshuto/master/utils/install.sh)
Packaging status
Fedora (COPR)
sudo dnf copr enable atim/joshuto -y
sudo dnf install joshuto
Arch (AUR)
[yay/paru] -S joshuto
[yay/paru] -S joshuto-git
Arch (archlinuxcn)
[yay/paru] -S joshuto
[yay/paru] -S joshuto-git
Gentoo (gentoo-zh)
sudo eselect repository enable gentoo-zh
sudo emerge -av app-misc/joshuto
NixOS
Here's an example of using it in a nixos configuration
{
description = "My configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
joshuto.url = "github:kamiyaa/joshuto";
};
outputs = { nixpkgs, joshuto, ... }:
{
nixosConfigurations = {
hostname = nixpkgs.lib.nixosSystem
{
system = "x86_64-linux";
modules = [
{
nixpkgs.overlays = [ joshuto.overlays.default ];
environment.systemPackages = with pkgs;[
joshuto
];
}
];
};
};
};
}
Temporary run, not installed on the system
nix run github:kamiyaa/joshuto
MacOS (MacPorts)
sudo port install joshuto
MacOS/Linux Homebrew
brew install joshuto
Usage
~ $ joshuto
Navigation
- Move up:
arrow_upork - Move down:
arrow_downorj - Move to parent directory:
arrow_leftorh - Open file or directory:
arrow_rightorl - Go to the top:
homeorg g - Go to the bottom:
endorG - Page up:
page_uporctrl+u - Page down:
page_downorctrl+d
Tab Management
- Open a new tab:
ctrl+t - Open a new tab with current directory:
T - Close the current tab:
Worctrl+w - Switch to next tab:
\t - Switch to previous tab:
backtab
File Operations
- Rename file:
ato append orAto prepend - Delete file:
deleteord d - Cut file:
d d - Copy file:
y y - Paste file:
p p - Paste file with overwrite:
p o - Symlink files:
p lfor absolute path,p Lfor relative path
Miscellaneous
- Toggle hidden files:
z h - Reload directory list:
R - Change directory:
c d - Show tasks:
w - Set mode:
= - Enter command mode:
:
See docs#quit for exiting into current directory and other usages
Configuration
Check out docs for details and config for examples
joshuto.toml
- general configurations
keymap.toml
- for keybindings
mimetype.toml
- for opening files with applications
theme.toml
- color customizations
bookmarks.toml
- bookmarks
Contributing
See docs
Bugs/Feature Request
Please create an issue :)
Features
- Tabs
- Devicons
- Fuzzy search via fzf
- Ctrl/Shift/Alt support
- Bulk rename
- File previews
- See Image previews for more details
- Exit to current directory
- Asynch File IO (cut/copy/paste)
- Custom colors/theme
- Line numbers
- Jump to number
- File chooser
- Trash support
TODOs
- Built-in command line
- Mostly working
- Currently implementation is kind of janky
- Tab autocomplete (in progress)