keymap.toml
你可以在 keymap.toml 文件中修改 Yazi 的快捷键绑定。它由以下 8 个层(layer)组成:
- [mgr] - 文件列表
- [tasks] - 任务管理器
- [spot] - 文件信息 spotter
- [pick] - 选择组件,例如文件的 “open with”
- [input] - 输入组件,例如 create、rename 等
- [confirm] - 确认对话框,例如 remove、overwrite 等
- [cmp] - 补全组件,例如 “cd” 的 URL 补全
- [help] - 帮助菜单
在每一层中,都有两个属性:prepend_keymap 和 append_keymap。
prepend 会插入到默认快捷键之前,而 append 会插入到默认快捷键之后。
由于 Yazi 会执行第一个匹配到的按键,因此 prepend 的优先级总是高于默认配置,而 append 的优先级总是低于默认配置:
[mgr]prepend_keymap = [{ on = "<C-a>", run = "act1", desc = "Single action with `Ctrl + a`" },]append_keymap = [{ on = [ "g", "b" ], run = "act2", desc = "Single action with `g ⇒ b`" },{ on = "c", run = [ "act1", "act2" ], desc = "Multiple actions with `c`" }]
或者你也可以用另一种写法:
[[mgr.prepend_keymap]]on = "<C-a>"run = "act1"desc = "Single action with `Ctrl + a`"[[mgr.append_keymap]]on = [ "g", "b" ]run = "act2"desc = "Single action with `g ⇒ b`"[[mgr.append_keymap]]on = "c"run = [ "act1", "act2" ]desc = "Multiple actions with `c`"
但要注意,你只能选择其中一种写法,不能把两种混用,因为 TOML 语言不允许这样做:
[mgr]prepend_keymap = [{ on = "<C-a>", run = "act1" },][[mgr.append_keymap]]on = [ "g", "b" ]run = "act2"
当你不需要任何默认快捷键,并想完全自定义自己的键位时,可以使用 keymap,例如:
[mgr]keymap = [# 这会覆盖所有默认快捷键,只保留下面两个。{ on = "<C-a>", run = "act1" },{ on = [ "g", "b" ], run = "act2" },]
按键表示法
你可以在每条快捷键规则的 on 中指定一个或多个按键。每个按键都可以用以下表示法之一来表示:
| 表示法 | 说明 | 表示法 | 说明 |
|---|---|---|---|
a - z |
小写字母 | A - Z |
大写字母 |
<Space> |
空格键 | <Backspace> |
退格键 |
<Enter> |
回车键 | - | - |
<Left> |
左方向键 | <Right> |
右方向键 |
<Up> |
上方向键 | <Down> |
下方向键 |
<Home> |
Home 键 | <End> |
End 键 |
<PageUp> |
PageUp 键 | <PageDown> |
PageDown 键 |
<Tab> |
Tab 键 | <BackTab> |
Shift + Tab |
<Delete> |
Delete 键 | <Insert> |
Insert 键 |
<F1> - <F19> |
功能键 | <Esc> |
Esc 键 |
你还可以为上述按键组合以下修饰键:
| 修饰键 | 说明 |
|---|---|
<S-…> |
Shift 键 |
<C-…> |
Ctrl 键 |
<A-…> |
Alt/Meta 键 |
<D-…> |
Command/Windows/Super 键 |
例如:
<C-a>表示 Ctrl + a<C-S-b>或<C-B>表示 Ctrl + Shift + b
注意:
- 并不是所有终端都支持
<D-...>。如果你想使用它,请确保你的终端支持并启用了 CSI u。 - macOS 没有 Alt 键,因此
<A-...>无法直接工作。有些终端提供将 Option 映射为 Alt 的设置,请确保已启用。 - 传统终端键盘协议 会将
<Tab>和<C-i>、<Enter>和<C-m>等视为同一个按键。如果你想区分它们,请确保你的终端支持并启用了 CSI u。
[mgr]
escape
取消查找、退出可视模式、清除选中项、取消过滤,或取消搜索。
| 参数/选项 | 说明 |
|---|---|
--all |
执行以下所有操作 |
--find |
取消查找 |
--visual |
退出可视模式 |
--select |
清除选中项 |
--filter |
取消过滤 |
--search |
取消搜索 |
默认会自动判断要执行的操作;指定选项后,只会执行被选中的操作;多个选项可以叠加使用。
quit
退出进程。
| 参数/选项 | 说明 |
|---|---|
--code=[n] |
退出码 |
--no-cwd-file |
不将当前目录输出到 yazi --cwd-file 指定的文件中 |
close
关闭当前标签页;如果这是最后一个标签页,则改为退出进程。
| 参数/选项 | 说明 |
|---|---|
--code=[n] |
退出时使用的退出码 |
--no-cwd-file |
退出时不将当前目录输出到 yazi --cwd-file 指定的文件中 |
suspend
暂停 Yazi,并返回父 shell 继续执行其他任务。
完成后,可在 shell 中使用 fg 命令发送恢复信号并返回 Yazi。
arrow
leave
返回到当前悬停文件的父目录;如果当前没有悬停文件,则返回当前工作目录的父目录。
enter
进入子目录。
back
返回上一个目录。
forward
前进到下一个目录。
seek
滚动预览面板中的内容。
| 参数/选项 | 说明 |
|---|---|
[n] |
负值表示向上滚动,正值表示向下滚动 |
spot
使用预设或用户自定义的 spotter 显示文件信息。
cd
切换当前目录。
| 参数/选项 | 说明 |
|---|---|
[url] |
要切换到的 URL |
--interactive |
使用交互式 UI 输入 URL |
你可以添加自己的 g 系列按键,来实现简单的书签功能:
[[mgr.prepend_keymap]]on = [ "g", "d" ]run = "cd ~/Downloads"desc = "Cd to ~/Downloads"[[mgr.prepend_keymap]]on = [ "g", "p" ]run = "cd ~/Pictures"desc = "Cd to ~/Pictures"
对于 Windows 用户,也可以通过 cd 动作切换盘符:
[[mgr.prepend_keymap]]on = [ "g", "d" ]run = "cd D:"desc = "Switch to D drive"[[mgr.prepend_keymap]]on = [ "g", "p" ]run = 'cd "E:\\Pictures"' # 需要转义反斜杠desc = 'Cd to E:\Pictures'
更完整的书签 plugin 可参见 resources page。
follow
如果当前悬停文件是符号链接,则跟随它。
reveal
将光标悬停到指定文件上。
如果该文件不在当前目录中,会先切换当前目录到该文件的父目录。
| 参数/选项 | 说明 |
|---|---|
[url] |
要 reveal 的 URL |
toggle
切换当前悬停文件的选中状态。
| 参数/选项 | 说明 |
|---|---|
| N/A | 反转选中状态 |
--state=on |
选中文件 |
--state=off |
取消选中文件 |
toggle_all
切换当前工作目录中所有文件的选中状态。
| 参数/选项 | 说明 |
|---|---|
| N/A | 反转所有选中状态 |
--state=on |
选中文件 |
--state=off |
取消选中文件 |
注意,toggle_all --state=off 只会取消当前工作目录(CWD)中的选中项;如果你在多个目录中选中了文件,并想全部取消,请使用 escape --select。
visual_mode
进入可视模式。
| 参数/选项 | 说明 |
|---|---|
| N/A | 选择模式 |
--unset |
取消选择模式 |
open
使用 [open] 中定义的规则 打开所选文件。
| 参数/选项 | 说明 |
|---|---|
--interactive |
用交互式 UI 打开当前悬停/已选中的文件,并选择打开方式 |
--hovered |
无论当前是否有选中项,都始终打开当前悬停文件 |
yank
Yank 选中的文件。
| 参数/选项 | 说明 |
|---|---|
| N/A | 复制模式 |
--cut |
剪切模式 |
unyank
取消文件的 yank 状态。
paste
粘贴已 yank 的文件。
| 参数/选项 | 说明 |
|---|---|
--force |
如果目标文件已存在,则直接覆盖 |
--follow |
复制符号链接所指向的文件,而不是复制符号链接本身。仅在复制时可用 |
link
为已 yank 的文件创建符号链接。(在 Windows 上这是特权操作,必须以管理员身份运行。)
| 参数/选项 | 说明 |
|---|---|
--relative |
对符号链接使用相对路径 |
--force |
如果目标文件已存在,则直接覆盖 |
hardlink
为已 yank 的文件创建硬链接。
| 参数/选项 | 说明 |
|---|---|
--force |
如果目标文件已存在,则直接覆盖 |
--follow |
为符号链接指向的文件创建硬链接,而不是为符号链接本身创建硬链接 |
remove
在 macOS / Windows 上将文件移动到废纸篓 / 回收站。对于 Linux,则遵循 FreeDesktop.org Trash Specification。
在 Android 平台上,由于不存在回收站概念,因此只能结合 --permanently 选项使用。
| 参数/选项 | 说明 |
|---|---|
--force |
不显示确认对话框,直接移动到回收站或删除 |
--permanently |
永久删除文件 |
--hovered |
无论当前是否有选中项,都始终删除当前悬停文件 |
create
创建文件或目录。以 /(Unix)或 \(Windows)结尾时表示创建目录。
| 参数/选项 | 说明 |
|---|---|
--dir |
始终创建目录,不受是否以 / 或 \ 结尾影响 |
--force |
如果目标文件已存在,则直接覆盖,不显示确认对话框 |
rename
重命名文件或目录;如果选中了多个文件,则执行批量重命名(默认使用 $EDITOR 编辑文件名,详见 Specify a different editor for bulk renaming)。
--hovered:无论当前是否有选中项,都始终重命名当前悬停文件--force:如果目标文件已存在,则直接覆盖,不显示确认对话框--empty:清空文件名的一部分"stem":清空主文件名,例如"foo.jpg"->".jpg""ext":清空扩展名,例如"foo.jpg"->"foo.""dot_ext":清空点号和扩展名,例如"foo.jpg"->"foo""all":清空整个文件名,例如"foo.jpg"->""
--cursor:指定重命名输入框中的光标位置"end":文件名末尾"start":文件名开头"before_ext":扩展名前
你也可以将 --cursor 与 --empty 结合使用。例如,rename --empty=stem --cursor=start 会清空文件主名,并把光标移动到开头。
这会让文件名 foo.jpg 在输入框中显示为 |.jpg,其中 | 表示光标位置。
copy
复制已选中或当前悬停的文件/目录的 URL。
| 参数/选项 | 说明 |
|---|---|
[what] |
要复制的内容,见下表 |
--separator |
路径分隔符,见下表 |
--hovered |
无论当前是否有选中项,都始终复制当前悬停文件 |
[what] 可取以下值之一:
| 值 | 说明 |
|---|---|
"path" |
文件的 URL |
"dirname" |
父目录的 URL |
"filename" |
文件名 |
"name_without_ext" |
不带扩展名的文件名 |
--separator 可取以下值之一:
| 值 | 说明 |
|---|---|
| N/A | 平台相关分隔符,例如 Windows 使用 \,Unix 使用 / |
"unix" |
在所有平台上一律使用 / |
shell
运行 shell 命令。
| 参数/选项 | 说明 |
|---|---|
[template] |
可选,要运行的命令模板 |
--block |
以阻塞方式打开。设置后,Yazi 会隐藏到 secondary screen,并在 main screen 显示该程序,直到程序退出。在此期间它可以接收 I/O 信号,这对交互式程序很有用。 |
--orphan |
即使 Yazi 已退出,也保持进程继续运行。指定后,进程会从任务调度系统中分离。 |
--interactive |
通过交互方式让用户输入要执行的命令 |
--cursor |
设置交互式命令输入框中光标的初始位置。例如,shell 'zip -r .zip %h' --cursor=7 --interactive 会把光标放在 .zip 之前。 |
你可以在 [template] 中使用以下格式化参数:
%h:当前悬停文件的路径;如果当前目录为空且没有悬停文件,则为空%s:所有已选文件的路径%sN:第 N 个已选文件的路径,例如%s1、%s2%d:所有已选文件所在目录的路径%dN:第 N 个已选文件所在目录的路径,例如%d1、%d2%%:转义后的%字符本身
以及它们的 URL 版本:
%H:当前悬停文件的 URL;如果当前目录为空且没有悬停文件,则为空%S:所有已选文件的 URL%SN:第 N 个已选文件的 URL,例如%S1、%S2%D:所有已选文件所在目录的 URL%DN:第 N 个已选文件所在目录的 URL,例如%D1、%D2
你可以使用 end-of-options marker(--)来避免转义问题——-- 之后的所有内容都会被当作原始字符串处理:
[[mgr.prepend_keymap]]on = "d"- run = "shell \"trash-put %s\""+ run = "shell -- trash-put %s"desc = "Trash selected files"
对于复杂的 shell 脚本,你可以使用 TOML 的基础字符串(''' 或 """)将其写成多行,示例见 this tip。
hidden
设置隐藏文件的可见性。
| 参数/选项 | 说明 |
|---|---|
"show" |
显示隐藏文件 |
"hide" |
隐藏隐藏文件 |
"toggle" |
切换隐藏状态 |
linemode
设置 line mode。
| 参数/选项 | 说明 |
|---|---|
"none" |
不启用 line mode |
"size" |
显示文件的字节大小。注意,目前目录大小仅会在 sort_by = "size" 时被计算,未来可能会改变。 |
"btime" |
显示文件创建时间 |
"mtime" |
显示文件最后修改时间 |
"permissions" |
显示文件权限,仅在 Unix-like 系统可用 |
"owner" |
显示文件所有者,仅在 Unix-like 系统可用 |
search
| 参数/选项 | 说明 |
|---|---|
--via |
搜索引擎,可用值:fd、rg、rga |
--args |
传递给指定引擎的额外参数,例如 search --via=fd --args='-e -H' |
你可以通过 fd 配合空关键字("")来实现平铺视图(flat view)。
或者把一个按键绑定到 search_do 动作上,以便快速切换到平铺视图:
[[mgr.prepend_keymap]]on = [ "g", "f" ]run = 'search_do --via=fd --args="-d 3"'desc = "Switch to the flat view with a max depth of 3"
find
在当前工作目录中以交互、增量的方式查找文件。
| 参数/选项 | 说明 |
|---|---|
--previous |
查找上一个匹配项 |
--smart |
使用 smart-case 查找:如果查询中包含大写字母则区分大小写,否则不区分大小写 |
--insensitive |
使用不区分大小写的查找 |
find_arrow
将光标移动到下一个或上一个匹配项。
| 参数/选项 | 说明 |
|---|---|
--previous |
移动到上一个匹配项 |
filter
| 参数/选项 | 说明 |
|---|---|
--smart |
使用 smart-case 过滤:如果关键字中包含大写字母则区分大小写,否则不区分大小写 |
--insensitive |
使用不区分大小写的过滤 |
sort
[by]:可选;如果不提供,则保持当前排序方式不变"none":不排序"mtime":按最后修改时间排序"btime":按创建时间排序"extension":按文件扩展名排序"alphabetical":按字母顺序排序,例如1.md<10.md<2.md"natural":按自然顺序排序,例如1.md<2.md<10.md"size":按文件大小排序"random":随机排序
--reverse:倒序显示文件。--reverse或--reverse=yes为启用,--reverse=no为禁用。--dir-first:目录优先显示。--dir-first或--dir-first=yes为启用,--dir-first=no为禁用。--translit:对文件名进行音译转换排序,详见 sort_translit。--translit或--translit=yes为启用,--translit=no为禁用。
tab_create
| 参数/选项 | 说明 |
|---|---|
[url] |
可选,使用指定 URL 创建新标签页 |
--current |
可选,使用当前 URL 创建新标签页 |
如果既没有指定 [url],也没有指定 --current,则会使用启动目录创建标签页。
tab_close
| 参数/选项 | 说明 |
|---|---|
[n] |
关闭位置为 n 的标签页,从 0 开始 |
如果你想关闭当前标签页,请改用 close 动作。
tab_switch
| 参数/选项 | 说明 |
|---|---|
[n] |
切换到位置为 n 的标签页,从 0 开始 |
--relative |
切换到相对于当前标签页的位置。使用该参数时,n 可以是负数 |
tab_swap
| 参数/选项 | 说明 |
|---|---|
[n] |
将当前标签页与位置为 n 的标签页交换。负值表示向前移动标签页,正值表示向后移动标签页 |
help
打开帮助菜单。
plugin
noop
如果你想禁用某些预设快捷键,而不重写整个 keymap,可以使用虚拟动作 noop。
例如,要禁用默认的 g ⇒ c:
[[mgr.prepend_keymap]]on = [ "g", "c" ]run = "noop"
或者如果你更喜欢数组写法:
[[mgr.prepend_keymap]]on = [ "g", "c" ]run = [ "noop" ] # 数组只能有一个元素,且必须是 "noop"
被禁用的按键按下后不会触发任何动作,也不会显示在 which 组件中。
[tasks]
show
显示任务管理器。
close
隐藏任务管理器。
arrow
inspect
查看任务日志:
- 失败文件操作的 I/O error
- 失败异步 plugin 任务的 Lua error
- 后台运行或失败的 shell 任务的实时 stdout/stderr
按 q 退出 inspect 视图。
cancel
取消任务。
help
打开帮助菜单。
plugin
noop
参见 noop action。
[spot]
close
隐藏 spotter。
arrow
swipe
| 参数/选项 | 说明 |
|---|---|
[n] |
在文件列表中向上或向下滑动 n 个文件。负值表示向上,正值表示向下 |
copy
从 spotter 中复制内容。
| 参数/选项 | 说明 |
|---|---|
"cell" |
复制当前选中的表格单元格 |
plugin
noop
参见 noop action。
help
打开帮助菜单。
[pick]
close
取消 picker。
| 参数/选项 | 说明 |
|---|---|
--submit |
提交 picker |
arrow
help
打开帮助菜单。
plugin
noop
参见 noop action。
[input]
close
取消输入。
| 参数/选项 | 说明 |
|---|---|
--submit |
提交输入 |
escape
返回普通模式,或取消输入。
move
将光标向左或向右移动。
| 参数/选项 | 说明 |
|---|---|
[n] |
将光标向左或向右移动 n 个字符。负值表示向左,正值表示向右 |
--in-operating |
仅当当前正在等待一个操作时才移动光标 |
backward
向后移动到当前单词或上一个单词的开头。
forward
向前移动到下一个单词的开头。
| 参数/选项 | 说明 |
|---|---|
--end-of-word |
向前移动到当前单词或下一个单词的结尾 |
insert
进入插入模式。该动作仅在普通模式下可用。
| 参数/选项 | 说明 |
|---|---|
--append |
在光标后插入 |
visual
进入可视模式。该动作仅在普通模式下可用。
delete
删除选中的字符。该动作仅在普通模式下可用。
| 参数/选项 | 说明 |
|---|---|
--cut |
将选中的字符剪切到剪贴板,而不只是删除 |
--insert |
删除后进入插入模式 |
yank
复制选中的字符。该动作仅在普通模式下可用。
paste
在光标后粘贴已复制的字符。该动作仅在普通模式下可用。
| 参数/选项 | 说明 |
|---|---|
--before |
在光标前粘贴复制的字符 |
undo
撤销上一次操作。该动作仅在普通模式下可用。
redo
重做上一次操作。该动作仅在普通模式下可用。
help
打开帮助菜单。该动作仅在普通模式下可用。
backspace
删除光标前的字符。该动作仅在插入模式下可用。
| 参数/选项 | 说明 |
|---|---|
--under |
删除光标所在位置的字符 |
kill
删除指定范围内的字符。该动作仅在插入模式下可用。
| 参数/选项 | 说明 |
|---|---|
"bol" |
向后删除到行首(BOL) |
"eol" |
向前删除到行尾(EOL) |
"backward" |
向后删除到当前单词开头 |
"forward" |
向前删除到当前单词结尾 |
plugin
参见 Functional plugin。该动作仅在普通模式下可用。
noop
参见 noop action。
[confirm]
close
取消并关闭确认对话框。
| 参数/选项 | 说明 |
|---|---|
--submit |
提交确认 |
arrow
help
打开帮助菜单。
[cmp]
close
隐藏补全菜单。
| 参数/选项 | 说明 |
|---|---|
--submit |
提交补全结果 |
arrow
help
打开帮助菜单。
plugin
noop
参见 noop action。
[help]
close
隐藏帮助菜单。
escape
清除过滤条件,或隐藏帮助菜单。
arrow
filter
为帮助项应用过滤条件。
plugin
noop
参见 noop action。
