#文件管理器 #文件 #终端文件 #tui #命令行 #管理器 #配置文件

bin+lib fm-tui

受 dired 和 ranger 启发的 TUI 文件管理器

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

Download history 4/week @ 2024-03-22 85/week @ 2024-03-29 24/week @ 2024-04-05

524 每月下载量

自定义许可证GPL-2.0 许可证

670KB
14K SLoC

FM:受 dired 和 ranger 启发的 Rust 编写的文件管理器

fm-tui on crates.io fm-tui on docs.rs

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 上可用,但我无法保证。

视频

fm

安装

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