21 个版本
0.1.26 | 2024 年 3 月 6 日 |
---|---|
0.1.24 | 2023 年 12 月 12 日 |
0.1.23 | 2023 年 11 月 11 日 |
0.1.21 | 2023 年 5 月 18 日 |
0.1.7 | 2022 年 12 月 31 日 |
#118 in Unix API
524 每月下载量
670KB
14K SLoC
FM:受 dired 和 ranger 启发的 Rust 编写的文件管理器
A TUI file manager inspired by dired and ranger
Usage: fm [OPTIONS]
Options:
-p, --path <PATH> Starting path. directory or file [default: .]
-s, --server <SERVER> Nvim server [default: ]
-A, --all Display all files (hidden)
-l, --log Enable logging
--neovim Started inside neovim terminal emulator
-h, --help Print help
-V, --version Print version [3,8s]
平台
Linux 是唯一支持的平台。可能在 MacOS 上可用,但我无法保证。
视频
安装
cargo install fm-tui
使用方法
无参数从命令行启动
fm
或指定路径
fm -p ~/Downloads
如果您已将 推荐功能 添加到 bashrc/zshrc,只需使用 f
,退出时会切换到最后访问过的目录。
功能
一些功能依赖于外部程序,以防止 fm 过于臃肿。我尽量实现了我所能想到的每个功能。
会话
显示设置(使用两个窗格,显示元数据,使用第二个窗格作为预览)在重启应用程序时保存和恢复。
导航
- 使用箭头或鼠标(左键选择,右键打开,滚轮)导航。默认支持基本 vim 键:hjkl,gG,Ctrl+U Ctrl+D,JK
- 使用 o、enter 或右键单击打开文件
- 使用 e 执行具有自定义命令的文件
移动
多种跳转方法
- Alt+g:输入完整地址(启用自动完成),
- Ctrl+g:预定义快捷方式(默认为根目录、家目录和挂载点、gitroot、配置文件夹),
- Alt+j:跳转到标记文件,
- ': 创建自己的标记并跳转到它们
文件操作
- 使用
space
标记文件(*: 标记所有,v: 反转,u: 取消标记) - 使用 c、p、s、x、X 复制/移动/符号链接/删除/删除标记文件
- 使用 n、d、r 创建文件、目录、重命名
- 标记一批文件,使用 Tab 切换面板并移动/复制它们!
- 使用 Alt+o 打开回收站。x 永久删除,enter 恢复。使用 Alt+x 清理回收站。
- 使用 alt-b 重命名或创建一批文件。标记文件,alt-b,编辑名称并保存文件。重命名完成。您可以使用
a/b/c
创建嵌套文件,这将根据需要创建所有中间文件夹。
Shell
- 使用 s 在此目录中打开新 shell
- 使用 alt-s 启动配置好的 TUI 应用程序(如 htop、ncdu 等)
- 使用 alt-i 启动配置好的 CLI 应用程序(如 diff、dragon-drop 等)
- 使用叹号 (!) 执行 shell 命令。支持展开 (%e 扩展名,%n 文件名,%s 路径,%f 标记的文件,%d 当前目录)。不支持管道和重定向。
显示
- 使用 E 切换显示,删除详细信息,或使用 Alt+d 显示单个面板
- 使用 P 预览大多数文件(文本、高亮代码、二进制、PDF、EXIF 详细信息、图片/视频、音频详细信息、归档、MS-Office & OpenOffice 文档)
- 使用 t 切换树形视图。使用 z 折叠所选文件夹。使用 Z 展开所有文件夹,使用 Alt+z 折叠所有文件夹
- 使用 Alt+P 进入预览模式。每个文件都在第二个面板中预览
- 使用 F 过滤视图(按扩展名、名称、仅目录、所有文件)
- 使用 / 查找文件(使用补全:Tab,回车搜索)
- 使用 w 标记与正则表达式匹配的文件
模糊查找器
- Ctrl-f:在文件名中搜索并移动到那里
- Ctrl-s:在文件内容中搜索行并移动到那里
- H:显示可搜索的帮助,搜索快捷键并执行操作
我们使用一个 skim 的分支,这是一个用 rust 编写的 fzf 克隆
Neovim 文件选择器
当你用 i 打开文件时,它将向 Neovim 发送事件并在新缓冲区中打开它
只要 Neovim 在运行,它就应始终正常工作,即使在 neovim 之外也是如此
通过在 /proc 中查找 neovim 来找到 RPC 服务器地址。如果失败,我们仍然可以查找由 neovim 本身设置的环境变量。最后,也可以通过 fm -s address
传递 RPC 服务器地址。
退出时 cd
退出 fm 时,它将打印最后访问的路径。如果您将此功能添加到您的 zshrc
/ bashrc
,它将监听 stdout 并切换到最后一个目录
function f() {
# start the fm filemanager, enabling cd on quit.
dest=$(fm $@)
if [[ ! -z $dest ]]
then
cd $dest
fi
}
对于 fish 用户,这是您要添加到您的 config.fish
的功能
function f
# start the fm filemanager, enabling cd on quit.
set dest (fm $argv)
if not test -z $dest
cd $dest
end
end
归档
- 通过打开它(o、回车、右键点击)解压缩归档
- 使用 C 压缩标记的文件。从菜单中选择所需的算法
自定义绑定
您可以将任何 未绑定 的键绑定到 shell 命令。
- 管道和重定向(| > >> < <)不支持 !
- 您输入的第一个词是可执行文件。不要以环境变量开始您的命令,它将不起作用。
展开
- %e:扩展名
- %s:所选文件(完整路径)
- %f:标记的文件(完整路径)
- %n:所选文件名
- %d:当前目录
日志记录
使用 -l
或 --log
启用日志记录。默认情况下禁用。
关键操作将记录到 ~/.config/fm/log/fm.log
,而影响文件树的操作将记录到 ~/.config/fm/log/action_logger.log
。
最后操作显示在屏幕底部,可以使用 Alt+l
作为一个预览来读取。即使禁用日志记录,也可以看到这些日志,只是它们可能不会是最新的。
更多
- 使用 Ctrl+n、Ctrl+p 将文件名/文件路径复制到剪贴板
- 自动检测可移动磁盘,并使用几个按键跳转到它们(Ctrl+g,上,回车)
- 使用 D 拖放文件(需要已安装 dragon-drop)
- 打开和挂载加密设备。使用 Shift+e 打开菜单,使用 m 挂载,使用 u 卸载。
- 使用 Ctrl+箭头控制 MOCP。Ctrl+左箭头,Ctrl+右箭头:上一首或下一首歌曲。Ctrl+下箭头:切换暂停。Ctrl+上箭头:将当前文件夹添加到播放列表
- 使用 W 键将选定的图像设置为壁纸
- 使用 ":" 进入 "命令模式"。输入命令名称,它将被执行。
- 使用 Alt-r 通过 ssfhs 挂载远程文件系统
- 使用 Alt-R 挂载 MTP 设备
大部分功能都受到了 ranger 及其替代品(Midnight commander, nnn, lf 等)的启发,外观和感觉则来自 dired。
默认快捷键
按 Ctrl-h 显示帮助。显示当前快捷键。以下是默认快捷键。
Char('q') : quit
Ctrl('h') : help
- Navigation -
Left : cd to parent directory
Char('l') : cd to child directory
Up : one line up
Char('j') : one line down
Home : go to first line
Char('G') : go to last line
PageUp : 10 lines up
Char('J') : 10 lines down
Tab : cycle tab
- Actions -
Alt('d') : toggle dual pane - if the width is sufficiant
Alt('p') : toggle a preview on the second pane
Char('E') : toggle metadata on files
Char('a') : toggle hidden
Char('s') : shell in current directory
Char('o') : open the selected file with :
- default xdg-open
- audio mocp
- images viewnior
- office libreoffice
- pdf, ebooks zathura
- text nvim
- video mpv
- vectorials
- compressed files are decompressed
- iso images are mounted
Char('i') : open in current nvim session
Char('I') : setup the nvim rpc address
Char('P') : preview this file
Char('-') : move back to previous dir
Char('~') : move to $HOME
Char('`') : move to root (/)
Char('@') : move to starting point
Char('M') : mark current path
Char('\''): jump to a mark
Char('f') : search next matching element
Ctrl('f') : fuzzy finder for file
Ctrl('s') : fuzzy finder for line
Char('H') : fuzzy finder from help
Ctrl('r') : refresh view
Ctrl('c') : copy filename to clipboard
Ctrl('p') : copy filepath to clipboard
Alt('c') : open the config file
- Action on flagged files -
Char(' ') : toggle flag on a file
Char('*') : flag all
Char('u') : clear flags
Char('v') : reverse flags
Char('L') : symlink to current dir
Char('c') : copy to current dir
Char('m') : move to current dir
Char('x') : delete files permanently
Char('X') : move to trash
Char('C') : compress into an archive
- Trash -
Alt('o') : Open the trash (enter to restore, del clear)
Alt('x') : Empty the trash
- Tree -
Navigate as usual. Most actions works as in 'normal' view.
Char('t') : Toggle tree mode
Char('z') : Fold a node
Ctrl('z') : Fold every node
Char('Z') : Unfold every node
- DISPLAY MODES -
Different modes for the main window
Ctrl('q') : NORMAL
Char('t') : TREE
Char('F') : FLAGGED
Char('P') : PREVIEW
- EDIT MODES -
Different modes for the bottom window
Alt('m') : CHMOD
Char('e') : OPEN WITH
Char('d') : NEWDIR
Char('n') : NEWFILE
Char('r') : RENAME
Alt('g') : CD
Char('w') : REGEXMATCH
Alt('j') : JUMP
Char('O') : SORT
Alt('h') : HISTORY
Ctrl('g') : SHORTCUT
Alt('e') : ENCRYPTED DRIVE
(m: open & mount, u: unmount & close, g: go there)
Alt('R') : REMOVABLE MTP DEVICES
(m: mount, u: unmount, g: go there)
Char('/') : SEARCH
Char(':') : ACTION
Alt('b') : BULK
Alt('s') : TUI APPS
Alt('i') : CLI APPS
Alt('r') : MOUNT REMOTE PATH
Alt('f') : FILTER
(by name "n name", by ext "e ext", "d only directories" or "a all" for reset)
Enter : Execute mode then NORMAL
- MOC -
Control MOC from your TUI
CtrlUp : MOCP: Add selected file or folder to the playlist
CtrlLeft : MOCP: Previous song
CtrlDown : MOCP: Toggle play/pause.
CtrlRight : MOCP: Next song
AltEnter : MOCP: Go to currently playing song
Ctrl('x') : MOCP: Clear the playlist
- CUSTOM ACTIONS -
%s: the selected file,
%f: the flagged files,
%e: the extension of the file,
%n: the filename only,
%p: the full path of the current directory.
Alt('u'): /usr/bin/google-chrome-stable %s
Char('D'): /usr/bin/dragon-drop %s
配置
每个配置文件都保存在 ~/.config/fm/
你可以配置
- 快捷键。一些应该保持原样,但所有快捷键都可以配置。使用提供的配置文件作为默认设置。多个键可以绑定到同一动作。
- 自定义动作。你可以将任何键绑定到 shell 命令。
- 不要使用管道或重定向,它们不会被正确解析
- 使用未设置绑定
- %s 被扩展为选定的路径,%f 被扩展为标记的文件(完整路径)。
- 请参阅 配置 或示例。
- 打开器。fm 尝试使用标准程序打开某些文件。你可以更改此设置并使用任何已安装的程序。指定是否需要运行 shell(如 neovim)或不需要(如 subl)。
- 标记。用户可以保存约 100 个不同的标记以跳转,它们保存在 marks.config 文件中。让 fm 管理你的标记会更简单,但如果你弄乱了或者想要从头开始,只需删除文件或单行即可。
- TUI 应用程序。一些经典的 TUI 应用程序,如 htop、glances、btop、lazygit 已存在。使用
S
打开菜单并选择所需的一个。它只能与 TUI 应用程序(如 HTOP)一起工作,而不是 CLI 应用程序(如 bat)。 - 文件颜色。非标准文件(目录、字符设备、块设备、符号链接、套接字、FIFO)有自己的可配置颜色。你可以使用 ansi 颜色或 rgb 值。标准文件根据扩展名着色,你可以使用 3 个不同的调色板(红色-绿色、红色-蓝色或绿色-蓝色)。每个扩展名都有自己的随机颜色。
外部依赖
大部分打开器和 TUI 应用程序都可以通过配置文件进行配置。如果它们的命令非常特定或者我没有找到解决方案,一些则是硬编码的。
- lsblk:列出加密设备
- faillock:重置失败的 sudo 尝试
- Cryptsetup:解密和挂载加密设备
- Nitrogen:设置壁纸
- MOC Music On Console 允许你在终端播放音乐
- Dragon-Drop 从终端拖放文件到 GUI 应用程序。
- Ueberzug 在终端显示图像。用于预览图像。由于原始维护者 nuked 他的项目,从源代码安装可能有点棘手。它仍可在许多包管理器中找到。
- isoinfo 允许预览 iso 文件的内容
- jupyter 通过转换为 markdown 来预览 jupyter 笔记本
- pandoc 通过 pandoc 转换为 markdown 来预览 epub
- 通过创建缩略图预览字体 fontimage
- 通过创建缩略图预览 SVG rsvg-convert
- 预览开放格式和 MS-office 文档 libreoffice
贡献
任何帮助都受欢迎。
我在 dev.md 中对所做的一切都进行了注释。
这是我的第一个“公开发布”的程序,所以请不要因为代码质量而沮丧。
依赖关系
33–47MB
~768K SLoC