8 个稳定版本

1.5.1 2023年8月24日
1.5.0 2023年7月24日
1.4.0 2023年1月8日
1.3.1 2022年12月6日
1.1.0 2022年7月15日

#807命令行工具

EUPL-1.2

295KB
4K SLoC

tere - cd + ls 的更快速替代方案

tere 是一个终端文件浏览器。它是使用 cdls 在终端浏览文件夹的更快速替代方案。 tere 真正只做一件事:它提供了一个 TUI,用于高效地导航到文件夹,并在退出时打印该文件夹的路径。通过配置您的 shell 以将 cd 配置为打印的文件夹,您可以在文件系统中快速移动。

A gif showing what using tere looks like

请注意,tere 不是一个文件 管理器,它只能用于浏览文件夹,而不能创建、重命名或删除它们。

tere 致力于最小化和简单化。它的使用应该很明显。文件系统的导航应该是高效的,并且需要尽可能少的按键。

"Tere" 在爱沙尼亚语中意为 "你好"。它也很容易输入。

配置

要使用 tere 来更改目录,您需要安装它,然后配置您的 shell 以在 tere 退出时将其 cd 配置为打印的文件夹。以下是操作步骤

步骤 1:获取 tere 的副本

可以通过多种方式完成此操作

  • 下载 最新版本
  • 通过运行 brew install tere 使用 Homebrew 安装 tere
  • 通过运行 nix-env - 使用 Nix 安装 tere
  • 通过运行 cargo install tere 使用 Cargo 安装 tere
  • 使用 Pacman 通过运行 pacman -S tere 安装 tere
  • 使用 Scoop 通过运行 scoop install tere 安装 tere
  • 从源码构建,见下文。

第二步:使用 tere 配置你的 shell 以使用 cd

tere 退出时只打印文件夹。为了使你的 shell 实际上使用 cd 到这个文件夹,你需要定义一个函数或别名,因为工作目录不能通过子进程来更改。请参阅以下关于你的 shell 的说明。

Bash/Zsh

将以下内容放入你的 .bashrc.zshrc

tere() {
    local result=$(command tere "$@")
    [ -n "$result" ] && cd -- "$result"
}
fish

将以下内容放入你的 config.fish

function tere
    set --local result (command tere $argv)
    [ -n "$result" ] && cd -- "$result"
end
Xonsh

将以下内容放入你的 .xonshrc(需要 Xonsh v0.10 或更高版本)

def _tere(args):
    result = $(tere @(args)).strip()
    if result:
        cd @(result)

aliases["tere"] = _tere
PowerShell

将以下内容放入你的 $PROFILE

function Invoke-Tere() {
    $result = . (Get-Command -CommandType Application tere) $args
    if ($result) {
        Set-Location $result
    }
}
Set-Alias tere Invoke-Tere
Windows 命令提示符(CMD)

将以下内容放入一个名为 tere.bat 的批处理脚本文件中,该文件位于你的 PATH 环境变量中包含的文件夹中,如 C:\Windows

@echo off

rem set the location/path of the tere executable here...
SET TereEXE=C:\path\to\tere.exe

FOR /F "tokens=*" %%a in ('%TereEXE% %*') do SET OUTPUT=%%a
IF ["%OUTPUT%"] == [""] goto :EOF
cd %OUTPUT%

请注意,如果你想使 tere 同时与 PowerShell 和 CMD 一起工作,你不应该将 tere.exe 放置在 PATH 中,因为这样会运行 .exe 而不是 .bat。将 tere.exe 放置在不在 PATH 中的位置,并在 .bat 文件和 PowerShell 的 $PROFILE

如果 tere 不在你的 PATH 中,请在你的 shell 配置文件中使用到 tere 二进制的绝对路径。例如,对于 Bash/Zsh,你需要将 local result=$(command tere "$@") 替换为 local result=$(/path/to/tere "$@"),或者对于 PowerShell,将 (Get-Command -CommandType Application tere) 替换为 C:\path\to\tere.exe

如果你的 shell 缺少说明,请随时发送包含它们的 pull request!

第三步:完成

下次你打开一个新的 shell 时,命令 tere 应该可以正常工作。你当然可以将 shell 函数/别名重命名为你喜欢的名称。shell 配置还充当 tere 的配置文件,只需添加你想要的选项(参见 tere --help)。

支持的平台

tere可在Linux、Windows和macOS上运行。对于Linux和Windows,提供了在发行版中的二进制文件。对于Mac,您可以使用Homebrew或Cargo安装,或者从源代码构建。

如果您在Linux上遇到libc错误,请尝试musl版本。

用户指南

基本导航

您可以通过移动光标并输入搜索来在tere中导航文件夹。默认情况下,可以使用箭头键上下移动光标,并按下Enter或右箭头来进入高亮的文件夹。您可以通过在父文件夹项..上按Enter或使用左箭头来移动到父文件夹。一旦您导航到想要进入的文件夹,可以通过按Esc退出tere。如果您正确配置了shell,您的shell当前工作目录现在应该设置为该文件夹。

键盘快捷键

tere默认具有以下键盘快捷键

描述 默认快捷键 动作名称
进入光标下的目录 EnterAlt-Alt-l,如果未搜索,则Space ChangeDir
转到父目录 Alt-Alt-h,如果未搜索,则Backspace- ChangeDirParent
转到主目录 ~Ctrl-HomeCtrl-Alt-h ChangeDirHome
转到根目录 /Alt-r ChangeDirRoot
向上移动光标 Alt-k CursorUp
向下移动光标 Alt-j CursorDown
向上移动光标一屏 Page UpCtrl-uAlt-u CursorUpScreen
向下移动光标一屏 Page DownCtrl-dAlt-d CursorDownScreen
移动光标到顶部 HomeAlt-g CursorTop
移动光标到底部 EndAlt-Shift-g CursorBottom
从搜索中删除字符 如果搜索,则按Backspace EraseSearchChar
清除搜索 如果搜索,则按Esc ClearSearch
切换过滤器搜索 Alt-f ChangeFilterSearchMode
切换大小写敏感模式 Alt-c ChangeCaseSensitiveMode
切换间隙搜索模式 Ctrl-f ChangeGapSearchMode
切换排序模式 Alt-s ChangeSortMode
刷新当前目录 Ctrl-r RefreshListing
显示帮助屏幕 ? 帮助
退出tere EscAlt-q 退出
进入目录并退出tere Alt-EnterCtrl-Space ChangeDirAndExit
不更改目录退出tere Ctrl-c ExitWithoutCd

Alt开头的某些快捷键对Vim用户来说应该是熟悉的。

自定义键盘快捷键

上文中列出的所有键盘快捷键都可以使用--map(或-m)命令行选项进行自定义。键盘映射可以是--map key-combination:action--map key-combination:context:action的形式,其中key-combination是一个键组合,例如ctrl-xaction是一个有效的动作名称(例如ExitChangeDir,见上表或使用--help查看动作列表的完整列表),可选的context指定了映射生效的上下文(例如SearchingNotSearching,见--help)。要删除映射,请使用--map key-combination:None。可以通过多次提供--map或使用逗号分隔的映射列表来创建多个映射:--map combination1:action1,combination2:action2

有关更多详细信息和使用示例,请参阅--help的输出。

搜索

要搜索当前文件夹中的项目,只需键入一些字母。tere将逐步突出显示所有匹配搜索查询的文件夹。

在搜索过程中,移动光标上下仅跳转到匹配搜索的项。搜索查询以及匹配项的数量将显示在屏幕底部。

如果只有一个文件夹与当前搜索匹配,tere将突出显示它,并将工作目录更改为该文件夹。这样您可以快速导航文件夹。

要停止搜索,请按Esc或通过按Backspace删除所有搜索字符。

请注意,默认情况下,tere仅搜索文件夹而不搜索文件,因为tere无法处理文件。这可以通过使用--files选项进行更改。有关更多详细信息,请参阅下文或检查--help的输出。

默认情况下,搜索使用“智能大小写”,这意味着如果查询仅包含小写字母,则忽略大小写,但如果包含大写字母,则搜索区分大小写。这可以通过使用--ignore-case--case-sensitive选项或使用默认的键盘快捷键Alt-c进行更改。

此外,在默认搜索模式下,启用“间隙搜索”(有时也称为模糊搜索)。这意味着搜索匹配任何文件夹名称,只要它以与搜索查询相同的字符开头,并且包含其余的查询字符,即使它们之间有其他字符。例如,搜索dt将匹配DeskTopDocumenTs。使用--gap-search-anywhere选项,查询的第一个字符不需要匹配文件夹/文件名的第一个字符。可以使用--normal-search--normal-search-anywhere选项禁用间隙搜索,这些选项仅允许匹配连续字符,分别是从起始位置还是在文件夹/文件名中的任何位置。默认情况下,也可以使用键盘快捷键Ctrl-f更改间隙搜索行为。有关详细信息,请参阅--help

鼠标导航

尽管 tere 主要以键盘操作为主,但也支持使用鼠标导航。为了提高兼容性,鼠标支持默认关闭,需要通过选项 --mouse=on 来启用。启用鼠标后,你可以通过单击来切换到文件夹,通过右键单击来移动到父文件夹。

命令行选项

你可以通过传递以下命令行选项来调整 tere 的行为:

  • --help-h:打印简短的帮助信息和所有命令行选项。请注意,输出将发送到标准错误,以避免干扰在设置期间定义的 shell 函数中的 cd 操作。
  • --version-V:打印 tere 的版本。这也会发送到标准错误。
  • --filter-search-f / --no-filter-search-F:如果设置了 --filter-search,则只显示与当前搜索查询匹配的项。否则,在搜索时将显示列表中的所有项(这是默认行为)。
  • --files-l ignore / hide / match(或 i / h / m):在搜索时如何处理文件。如果 ignore(默认),则只搜索/匹配文件夹。如果 hide,则隐藏文件并只显示和匹配文件夹,如果 match,则匹配文件和文件夹。请注意,当前 tere 对文件没有操作,因此使用 --files=match 搜索文件名主要用于检查当前文件夹中是否可以找到该文件。
  • --smart-case-S / --ignore-case-i / --case-sensitive-s:设置大小写敏感模式。默认模式是智能大小写,如果查询只包含小写字母则不区分大小写,否则区分大小写。
  • --gap-search-g / --gap-search-anywhere-G / --normal-search-n / --normal-search-anywhere-N:配置是否允许有间隙的匹配(见上文)。
  • --sort name / created / modified:更改列表的排序顺序。
  • --autocd-timeout - 如果当前搜索只匹配一个文件夹,则在此后的多少毫秒后自动切换到该文件夹。也可以设置为 off,这将禁用此行为。
  • --history-file:为了使浏览更方便,tere会将您访问过的文件夹的历史记录保存到此文件中,格式为JSON。它应该是一个绝对路径。默认为$CACHE_DIR/tere/history.json,其中$CACHE_DIR$XDG_CACHE_HOME~/.cache。设置为空字符串''将禁用保存历史记录。请注意,历史记录会泄露您的文件夹结构的一部分,如果其他人可以读取它。
  • --mouse=on--mouse=off:启用或禁用使用鼠标导航。如果启用,您可以左键单击进入文件夹,右键单击返回父文件夹。默认为关闭。

一些选项有两个或更多版本,可以相互覆盖(例如--filter-search--no-filter-search)。对于此类选项,最后传递的选项优先。这样,您可以将一个选项作为shell的rc文件中的默认选项,但在运行tere时有时可以手动覆盖该选项。

类似的项目

tere的想法绝对不是独一无二的。实际上,有很多命令行应用程序试图使文件夹导航更快。下面是一个非详尽的此类程序列表。本节的目的在于通过展示它在细微但重要的方式上与所有这些应用程序的不同,来证明tere的存在。

如果这里应该提到一个程序,请随时提交有关该程序的问题或拉取请求!

终端文件浏览器

这些程序基本上与tere具有相同的任务:在终端中导航到文件夹,然后执行cd进入。

  • Broot - Broot更专注于浏览大型目录,并且比tere具有更复杂的UI。
  • xplr - 具有很多功能,完全可自定义。不仅专注于导航,还具有文件管理功能。通过搜索进行导航需要在输入和按箭头键之间切换。
  • deer - 仅限zsh,搜索需要额外的按键。
  • cdir - 与tere基本相同,但用Python编写。没有Vim样式的键盘导航,也不是一个独立的二进制文件。
  • walk - 与tere非常相似,用Go编写。需要输入/以进入搜索模式。具有删除文件和打开编辑器中文件的选项。
  • sdn - 与tere非常相似,甚至在UI方面也是如此。默认不启用搜索,搜索需要一些额外的按键。

模糊匹配和历史导航

这些程序与tere的目标非常相似,即加快文件系统导航。然而,这类程序不适合探索,因为它们要求你在跳转到文件夹之前必须先访问它。它们在哲学上与tere也有所不同;tere旨在实现确定性,而模糊匹配或基于“频繁度”的查询结果会根据你的先前查询而变化。

终端文件管理器

存在许多终端文件管理器,它们通常可以像tere一样使用,例如使用ranger的--choosedir选项。然而,与tere相比,它们有大量其他功能,这通常会导致更复杂的UI和更高的学习曲线。文件管理器也不完全专注于导航,因此通常需要额外的按键来搜索和导航文件夹。文件管理不在tere的范围内,因此这些程序与它不可直接比较。

其他类似程序

  • noice - 与tere非常相似,但退出时没有打印当前目录的选项。过滤/搜索目录内容需要额外两个按键。
  • twilight commander - 主要目标是嵌入在其他应用程序中的文件夹树浏览器。没有搜索功能。没有选项可以跳转到初始工作目录以上。

黑客

要从源代码编译tere,请遵循标准程序

  1. 安装Rust工具链
  2. git clone [email protected]:mgunyho/tere.git
  3. cdtere
  4. 运行cargo build(使用--release编译发布版本)

这将把tere的二进制文件放在文件夹target中,或者如果你使用了--release,则放在target/release中。

新功能应在发布之前先放在develop分支上,并在CHANGELOG.md中进行说明。

为了设置其他平台的交叉编译(例如发布时),在Ubuntu上运行以下命令:

# Support for linux without dependence on glibc
rustup target add x86_64-unknown-linux-musl

# Windows support
sudo apt install gcc-mingw-w64
rustup target add x86_64-pc-windows-gnu

# ARM (raspberry pi) support
sudo apt install gcc-aarch64-linux-gnu
rustup target add aarch64-unknown-linux-gnu

# NOTE: macOS is not available

然后,应该可以运行(在Ubuntu上):

有关更详细的信息,请参阅rustup指南rustc平台支持页面,并咨询你最喜欢的搜索引擎以获取有关交叉编译的帮助。

发布新版本

以下是一份关于发布新版本需要完成的事项清单。发布二进制文件应在Linux上使用兼容旧版glibc的适当版本编译,以保持兼容性(例如,2023年7月的Ubuntu 20.04 LTS)。

  • 将更改合并到develop分支(所有更改都应该合并到其中)
  • 运行cargo test并确保所有测试都通过
  • 更新Cargo.toml中的版本号
  • 运行 cargo build 以更新 Cargo.lock,并提交更新版本。
  • 更新 CHANGELOG.md 中的发布日期并提交。
  • git checkout master && git merge --no-ff develop。提交标题应为 "版本 X.Y.Z",提交信息应包含变更日志。
  • git打标签 vX.Y.Z
  • git push && git push --tags。同时确保将最新版本的 develop 推送。
  • 运行 sh ./build-release.sh 来构建二进制文件。它们被压缩并放置在 release/ 文件夹中。
  • 将二进制文件上传到 GitHub 并从提交信息中复制粘贴变更日志。
  • 运行 cargo publish 以上传到 crates.io

许可证

版权所有 2023 András Márton Gunyhó。根据 EUPL 许可,请参阅 LICENSE 文件。

依赖关系

~8–19MB
~246K SLoC