kitty 可映射动作与按键映射完全指南:从动作分组到默认快捷键速查
【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty
本篇指南围绕 kitty 的"可映射动作"(Mappable actions)体系展开:说明所有动作如何绑定到按键与鼠标事件、11 个动作分组各自包含哪些能力、以及仓库内置的全部默认键盘/鼠标快捷键。读完本文,你可以直接查到自己想要的动作与默认键位,并在kitty.conf中定制映射、组合宏、甚至用命令行面板(command palette)交互式触发任意动作。
一、什么是"可映射动作"
kitty 文档docs/actions.rst开篇即定义了本页的定位:所有列出的动作都可以通过kitty.conf中的map和mouse_map指令绑定到任意按键或鼠标事件上;每个动作旁标注的"默认快捷键"就是配置示例,键盘映射的进阶语法(组合、多键、模态映射等)在docs/mapping.rst中详述。
除了静态阅读,文档还指出了一条交互式路径:按下command_palette对应的快捷键(默认Ctrl+Shift+F3)可打开 command palette,在其中搜索并直接触发所有动作。
这一页并非手写,而是由源码在文档构建时自动生成:docs/conf.py在write_conf_docs中调用kitty.actions.as_rst(),将结果写入generated/actions.rst,再由docs/actions.rst通过 include 引入。因此本文的清单与仓库源码始终保持一致。
二、动作清单是如何从源码生成的
理解生成机制后,你就能在源码中精确定位任何一个动作的实现。
1. 用@ac装饰器登记动作。kitty/types.py 定义了动作分组类型与登记装饰器:
ActionGroup = Literal['cp', 'sc', 'win', 'tab', 'fs', 'mouse', 'mk', 'lay', 'misc', 'debug', 'session'] class ActionSpec(NamedTuple): group: str doc: str def ac_T -> Callable[[_T], _T]: def w(f: _T) -> _T: setattr(f, 'action_spec', ActionSpec(group, doc)) return f return w装饰器的第二个参数doc就是文档中该动作的说明文字:首行作为短帮助,其余行作为长帮助。
2. 反射收集 Window / Tab / Boss 三类对象上的所有动作。kitty/actions.py 的get_all_actions()遍历Window、Tab、Boss三个类,凡是带有action_spec属性的方法都会进入清单;文档中动作名(如copy_to_clipboard)就是方法名。此外源码还手工补入了一个特殊动作no_op——把某个快捷键映射到no_op后,kitty 将不再拦截该按键,而是原样传给终端内的程序:
ans['misc'].append(Action( 'no_op', 'misc', 'Unbind a shortcut', 'Mapping a shortcut to no_op causes kitty to not intercept the key stroke anymore, ' 'instead passing it to the program running inside it.'))3. 关联默认快捷键。kitty/actions.py 的as_rst()会遍历definition.iter_all_maps()——即 kitty/options/definition.py 中全部默认map()条目,把每个动作与其默认快捷键配对输出,形如 "Default shortcuts using this action: ..."。kitten动作还会自动链接到对应 kitten 的文档页。
4. 动作分组。kitty/actions.py 中的groups字典定义了 11 个分组及其标题:
| 分组代码 | 标题 | 典型动作所在类 |
|---|---|---|
cp | Copy/paste | Window / Boss |
sc | Scrolling | Window |
win | Window management | Window / Tab / Boss |
tab | Tab management | Boss |
fs | Font sizes | Boss |
mouse | Mouse actions | Window |
mk | Marks | Window / Boss |
lay | Layouts | Tab |
misc | Miscellaneous | Boss(含no_op) |
debug | Debugging | Boss / Window |
session | Sessions | Boss |
从源码结构看,当前仓库中标注@ac的方法约有 140 处,分布在 kitty/window.py(42 处)、kitty/boss.py(71 处)、kitty/tabs.py(28 处)三个文件。
三、各分组的核心动作速览
以下按分组摘录高频动作,均取自源码@ac装饰器的文档字符串,实现位置见文件链接。
Copy/paste(cp)—— kitty/window.py、kitty/boss.py:
| 动作 | 说明 |
|---|---|
copy_to_clipboard | 将当前窗口选中文本复制到剪贴板 |
copy_ansi_to_clipboard | 带 ANSI 格式码复制 |
copy_or_interrupt | 有选中则复制,否则发送 SIGINT(Ctrl+C) |
copy_and_clear_or_interrupt | 复制并清除选区,否则发送 SIGINT |
pass_selection_to_program | 把选中文本作为命令行参数传给指定程序 |
clear_selection | 清除当前选区 |
paste_from_clipboard/paste_from_selection | 从剪贴板 / 主选区粘贴 |
Scrolling(sc)—— kitty/window.py:scroll_line_up、scroll_line_down(支持smooth平滑滚动参数)、scroll_page_up/scroll_page_down(整页滚动)、scroll_home(回到回卷缓冲顶部)、scroll_end(回到底部)、show_scrollback(用 less 式分页器浏览回卷缓冲)、show_last_command_output、scroll_prompt_to_bottom(把 shell 提示行滚动到屏幕底部)。
Window management(win)—— 分布在 kitty/boss.py、kitty/tabs.py:new_window、new_os_window、close_window、next_window/previous_window、first_window~tenth_window(直接聚焦第 1~10 个窗口)、move_window_forward/move_window_backward/move_window_to_top、neighboring_window/move_window(按方向键导航/移动)、start_resizing_window、reset_window_sizes(撤销动态调窗)、focus_visible_window(可视化选窗,字符集由visual_window_select_characters配置)、swap_with_window、toggle_fullscreen、toggle_maximized、close_os_window、quit。
Tab management(tab)—— kitty/boss.py:new_tab、next_tab/previous_tab、close_tab、close_other_tabs_in_os_window、goto_tab(按序号跳转)、move_tab_forward/move_tab_backward、set_tab_title、select_tab(交互式选择标签页)。
Font sizes(fs)—— 通过change_font_size动作参数化:all +2.0(全体字号加 2 磅)、all *2.0(放大一倍)、all 0(复位)。默认快捷键见下文速查表。
Mouse actions(mouse)—— kitty/window.py:mouse_handle_click(处理点击,可作用于selection、link、prompt)、mouse_click_url、mouse_selection(普通/矩形/按词/按行选取)、paste_selection(中键粘贴主选区)等,均可作为mouse_map右侧的动作。
Marks(mk)——toggle_marker(开关当前标记)、create_marker、remove_marker、scroll_to_mark(跳到上/下一个标记)。
Layouts(lay)—— kitty/tabs.py:next_layout(切换下一个启用布局,可带步长)、last_used_layout、goto_layout(切到指定布局)、toggle_layout、layout_action(执行布局专属动作,详见 layouts 文档)。
Miscellaneous(misc)—— 杂项,包含:edit_config_file(在编辑器中打开 kitty.conf)、kitten(运行任意 kitten,文档自动链接到对应页)、input_unicode_character(调用 unicode_input kitten)、open_url/open_url_with_hints、sleep(按秒/分/时/天休眠,可小数)、remote_control/remote_control_script(触发远程控制命令或脚本)、launch(按 launch 规范开窗)、discard_event(完全丢弃事件,不传给程序)、no_op(释放该键)、grab_keyboard/ungrab_keyboard、show_error,以及 macOS 专属的hide_macos_app、minimize_macos_window等。
Debugging(debug)——debug_config(查看当前生效配置)、show_kitty_env_vars、dump_lines_with_attrs(dump 屏幕行及属性)、simulate_color_scheme_preference_change、test_dragging(配合 mouse_map 测试拖拽)。
Sessions(session)——goto_session(切换/创建会话)、save_as_session(把当前状态存为会话文件)、goto_previous_session。
四、默认键盘映射全表
以下表格完整摘自 kitty/options/definition.py 中map()的默认值(kitty_mod默认为Ctrl+Shift,可在配置中整体更改;标注 macos 的条目仅在 macOS 上生效)。这就是文档中"每个动作的默认快捷键"一栏的数据来源。
| 功能 | 快捷键 | 绑定的动作 |
|---|---|---|
| 复制到剪贴板 | kitty_mod+c | copy_to_clipboard |
| 粘贴(剪贴板) | kitty_mod+v | paste_from_clipboard |
| 粘贴(主选区) | kitty_mod+s、shift+insert | paste_from_selection |
| 选区传给程序 | kitty_mod+o | pass_selection_to_program |
| 上行/下行滚动 | kitty_mod+up/down、kitty_mod+k/j | scroll_line_up/scroll_line_down smooth |
| 上页/下页滚动 | kitty_mod+page_up/page_down | scroll_page_up/scroll_page_down |
| 滚到顶/底 | kitty_mod+home/end | scroll_home/scroll_end |
| 滚到上一个 shell 提示行 | kitty_mod+z | scroll_to_prompt -1 |
| 分页器浏览回卷缓冲 | kitty_mod+h | show_scrollback |
| 浏览上一条命令输出 | kitty_mod+g | show_last_command_output |
| 新建窗口 | kitty_mod+enter | new_window |
| 新建 OS 窗口 | kitty_mod+n | new_os_window |
| 关闭窗口 | kitty_mod+w | close_window |
| 下一个/上一个窗口 | kitty_mod+]/[ | next_window/previous_window |
| 窗口前移/后移/置顶 | kitty_mod+f/b/` | move_window_forward/move_window_backward/move_window_to_top |
| 开始拖拽调窗 | kitty_mod+r | start_resizing_window |
| 聚焦第 1~10 个窗口 | kitty_mod+1…kitty_mod+0 | first_window…tenth_window |
| 可视化选窗/换窗 | kitty_mod+f7/f8 | focus_visible_window/swap_with_window |
| 下一个/上一个标签页 | kitty_mod+right/left、ctrl+tab/ctrl+shift+tab | next_tab/previous_tab |
| 新建/关闭标签页 | kitty_mod+t/q | new_tab/close_tab |
| 标签页前移/后移 | kitty_mod+./, | move_tab_forward/move_tab_backward |
| 设置标签页标题 | kitty_mod+alt+t | set_tab_title |
| 切换布局 | kitty_mod+l | next_layout |
| 增大/减小/复位字号 | kitty_mod+equal/plus、kitty_mod+minus/kp_subtract、kitty_mod+backspace | change_font_size all +2.0/-2.0/0 |
| 打开 URL(hints) | kitty_mod+e | open_url_with_hints |
| 插入选中路径/行/单词/哈希 | kitty_mod+p>f/>l/>w/>h | 多键映射,调用kitten hints --type path/line/word/hash --program - |
| 插入选定文件/目录 | kitty_mod+p>c/>d | kitten choose-files [--mode=dir] |
| 打开选中文件指定行 / 超链接 | kitty_mod+p>n/>y | kitten hints --type linenum/--type hyperlink |
| 全屏/最大化 | kitty_mod+f11/f10 | toggle_fullscreen/toggle_maximized |
| Unicode 输入 | kitty_mod+u | kitten unicode_input |
| 编辑配置文件 | kitty_mod+f2 | edit_config_file |
| 打开 kitty 命令行 shell | kitty_mod+escape | kitty_shell window |
| 背景透明度增减/满/复位 | kitty_mod+a>m/>l/>1/>d | set_background_opacity +0.1/-0.1/1/default |
| 复位终端 | kitty_mod+delete | clear_terminal reset active |
| 重载 kitty.conf | kitty_mod+f5 | load_config_file |
| 调试配置 | kitty_mod+f6 | debug_config |
| 打开命令面板 | kitty_mod+f3 | command_palette |
macOS 专属映射还包括:cmd+enter新窗口、cmd+n新 OS 窗口、shift+cmd+d关窗、cmd+1…cmd+0聚焦窗口、shift+cmd+]/[切标签页、cmd+t新标签页、cmd+w关标签页/关 OS 窗口、ctrl+cmd+f全屏、cmd+,编辑配置、opt+cmd+r复位终端、cmd+q退出等。
所有字母类默认快捷键均带--allow-fallback=shifted,ascii,即同时匹配"按住 Shift 的字符"与"该物理键在 US 布局下的字符",从而在非拉丁键盘布局(俄语、阿拉伯语等)下依然可用;该机制的完整说明见 mapping 文档。
五、默认鼠标映射全表
鼠标绑定通过mouse_map指令配置,语法为mouse_map 按钮名 事件类型 模式 动作,事件类型取值press/release/doublepress/triplepress/quadruplepress,模式取值ungrabbed(程序未抓取鼠标)与grabbed。默认条目(kitty/options/definition.py 中的 28 条mma()):
| 功能 | 鼠标事件 | 模式 | 动作 |
|---|---|---|---|
| 点击链接或移动光标 | 左键单击 | ungrabbed | mouse_handle_click selection link prompt |
| 抓取状态下点击链接 | shift+左键单击 | grabbed,ungrabbed | mouse_handle_click selection link prompt |
| 点击链接(释放时) | ctrl+shift+左键释放 | grabbed,ungrabbed | mouse_handle_click link |
| 中键粘贴主选区 | 中键释放 | ungrabbed | paste_from_selection |
| 开始选择 | 左键按下 | ungrabbed | mouse_selection normal |
| 矩形选择 | ctrl+alt+左键按下 | ungrabbed | mouse_selection rectangle |
| 选中一个词 | 左键双击 | ungrabbed | mouse_selection word |
| 选中一行 | 左键三击 | ungrabbed | mouse_selection line |
| 从行首选中一行 | alt+左键三击 | ungrabbed | mouse_selection line_from_begin |
| 从点击点选中到行尾 | ctrl+alt+左键三击 | ungrabbed | mouse_selection line_from_point |
| 扩展选区 | 右键按下 | ungrabbed | mouse_selection extend |
| 扩展选区(shift) | shift+左键按下 | ungrabbed | mouse_selection extend |
| 抓取状态下中键粘贴 | shift+中键释放 | ungrabbed,grabbed | paste_selection |
| 抓取状态下左键选择/双击选词/三击选行 | shift+左键/shift+alt+左键/ctrl+shift+alt+左键 | grabbed 等 | mouse_selection系列 |
| 查看点击的命令输出 | ctrl+shift+右键按下 | ungrabbed | mouse_show_command_output |
kitty 还内置了"链接点击拦截"细节:ctrl+shift+左键在press阶段先discard_event丢弃按压事件、在release阶段再触发mouse_handle_click link,避免与选区操作互相干扰——这也是"一个鼠标事件拆成两条映射"的范例写法。
六、用 map / mouse_map 定制你自己的映射
kitty.conf中的map基本语法(摘自 mapping 文档):
# 基本形式:修饰键+键 → 动作 map ctrl+a new_window_with_cwd # 组合多个动作(宏),用冒号分隔 map kitty_mod+e combine : new_window : next_layout # 多键序列 map ctrl+f>2 set_font_size 20 # 释放默认快捷键(映射到空或 no_op,按键将传给终端内程序) map kitty_mod+enter # 完全丢弃事件(连程序也不给) map kitty_mod+f1 discard_event # 触发远程控制命令 / 脚本 / kitten map f1 remote_control set-spacing margin=30 map f1 remote_control_script /path/to/myscript map f1 kitten mykitten.py # 发送任意文本或按键 map f1 send_text normal,application echo Hello, world!\r map alt+s send_key ctrl+s映射进阶能力(均出自 mapping 文档,此处给出要点以便配合动作清单使用):
- 模态映射:
map --new-mode mw kitty_mod+f7创建模式后,map --mode mw ...为该模式定义按键,可用--on-unknown(beep/ignore/end/passthrough)与--on-action end控制未知键与动作后行为; - 条件映射:
map --when-focus-on title:...仅在焦点窗口满足条件时生效(例如编辑器运行时释放某个组合键,避免与程序内快捷键冲突); - 超时:
map_timeout 2.0设置全局多键/模态超时,map --new-mode resize --timeout 5.0 ...可按模式覆盖; - 调试:
kitty --debug-input打印每次按键的系统事件与 kitty 处理结果;kitten show-key(加-m kitty使用 kitty 键盘协议)查看应用实际收到的按键。
七、用 command palette 浏览与触发全部动作
回到docs/actions.rst提到的第二条路径:默认映射map kitty_mod+f3 command_palette(即Ctrl+Shift+F3,定义于 kitty/options/definition.py)打开 command palette 面板。
面板中的要点(详见 kittens/command-palette 文档):
- 已绑定快捷键的动作与未绑定的动作(标记
(unmapped))一起按类别列出,鼠标绑定单独成节;F12切换是否显示未绑定动作; - 输入即搜,跨key / action / category三列做大小写不敏感匹配,支持单词精确、前缀与最多两处拼写容错,匹配更多词项的条目排名更高;
Enter执行选中动作,Escape清空搜索或关闭面板,方向键/Ctrl+N/P/Ctrl+J/K/Page Up/Down/Home/End 导航,鼠标点击可直接执行;- 自定的模态键盘映射会以独立分组头显示。
"发现未绑定动作 → 记下动作名 → 回kitty.conf添加映射"正是动作清单与面板配合的日常工作流。
八、参考文件索引
| 内容 | 路径 |
|---|---|
| 动作清单原始页面(include 生成文件) | docs/actions.rst |
| 动作自动采集与 RST 生成 | kitty/actions.py |
@ac装饰器与ActionGroup定义 | kitty/types.py |
| 动作实现(窗口级) | kitty/window.py |
| 动作实现(标签页/布局级) | kitty/tabs.py |
| 动作实现(Boss 级:标签页、字体、会话等) | kitty/boss.py |
| 默认 map / mouse_map 全部条目 | kitty/options/definition.py |
| 按键映射语法进阶 | docs/mapping.rst |
| command palette 文档与实现 | docs/kittens/command-palette.rst、kittens/command_palette/main.go |
适用前提:以上内容基于当前仓库的源码与配置定义,默认快捷键以definition.py中map()/mma()的默认值为准;macOS 专属条目在 Linux 上不会生效,kitty_mod的实际组合取决于你的kitty.conf设置。
【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考