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 在 命令行工具 中
295KB
4K SLoC
tere - cd + ls 的更快速替代方案
tere
是一个终端文件浏览器。它是使用 cd
和 ls
在终端浏览文件夹的更快速替代方案。 tere
真正只做一件事:它提供了一个 TUI,用于高效地导航到文件夹,并在退出时打印该文件夹的路径。通过配置您的 shell 以将 cd
配置为打印的文件夹,您可以在文件系统中快速移动。
请注意,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
默认具有以下键盘快捷键
描述 | 默认快捷键 | 动作名称 |
---|---|---|
进入光标下的目录 | Enter或→或Alt-↓或Alt-l,如果未搜索,则Space | ChangeDir |
转到父目录 | ←或Alt-↑或Alt-h,如果未搜索,则Backspace或- | ChangeDirParent |
转到主目录 | ~或Ctrl-Home或Ctrl-Alt-h | ChangeDirHome |
转到根目录 | /或Alt-r | ChangeDirRoot |
向上移动光标 | ↑或Alt-k | CursorUp |
向下移动光标 | ↓或Alt-j | CursorDown |
向上移动光标一屏 | Page Up或Ctrl-u或Alt-u | CursorUpScreen |
向下移动光标一屏 | Page Down或Ctrl-d或Alt-d | CursorDownScreen |
移动光标到顶部 | Home或Alt-g | CursorTop |
移动光标到底部 | End或Alt-Shift-g | CursorBottom |
从搜索中删除字符 | 如果搜索,则按Backspace | EraseSearchChar |
清除搜索 | 如果搜索,则按Esc | ClearSearch |
切换过滤器搜索 | Alt-f | ChangeFilterSearchMode |
切换大小写敏感模式 | Alt-c | ChangeCaseSensitiveMode |
切换间隙搜索模式 | Ctrl-f | ChangeGapSearchMode |
切换排序模式 | Alt-s | ChangeSortMode |
刷新当前目录 | Ctrl-r | RefreshListing |
显示帮助屏幕 | ? | 帮助 |
退出tere |
Esc或Alt-q | 退出 |
进入目录并退出tere |
Alt-Enter或Ctrl-Space | ChangeDirAndExit |
不更改目录退出tere |
Ctrl-c | ExitWithoutCd |
以Alt开头的某些快捷键对Vim用户来说应该是熟悉的。
自定义键盘快捷键
上文中列出的所有键盘快捷键都可以使用--map
(或-m
)命令行选项进行自定义。键盘映射可以是--map key-combination:action
或--map key-combination:context:action
的形式,其中key-combination
是一个键组合,例如ctrl-x
,action
是一个有效的动作名称(例如Exit
或ChangeDir
,见上表或使用--help
查看动作列表的完整列表),可选的context
指定了映射生效的上下文(例如Searching
和NotSearching
,见--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
将匹配DeskTop
和DocumenTs
。使用--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
,请遵循标准程序
- 安装Rust工具链
git clone [email protected]:mgunyho/tere.git
cdtere
- 运行
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