Ghostty–命令行终端使用的神器(四)
新手学习 AI应用 相关知识,更新技能与时代为舞,希望能一起入门不断进步 [碱基比特]
4.7 keybind按键绑定
Ghostty中有两个最核心的键盘配置项,keybind和key-remap按键重映射
按键绑定是用来定义按下什么键执行什么操作的核心配置,格式:触发器=动作,如果有重复的触发器,后面的配置会覆盖前面的
-
触发器(Trigger)写法
触发器由按键和修饰键组成,用+连接,基本格式: ctrl+a, ctrl+shift+b, up (方向键)
修饰键别名
-
ctrl或control -
alt或者opt,option -
super或cmd,command -
shift
-
物理键码匹配
物理键码匹配 (Physical Key Codes) 是一种按键识别机制,它忽略键盘布局(Layout)和语言设置,直接根据键盘上按键的物理位置来触发操作
在 Ghostty(以及现代 Web 标准 W3C)中,这意味着无论你的操作系统设置为英语、法语、德语还是日语,只要你的手指按下了键盘上同一个位置的键,触发的动作就是一样的。
|
|
(默认行为) |
(Ghostty 中的 KeyA, F1 等) |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
a = A)。 |
KeyA ≠ KeyB)。 |
|
|
a
b, ?, é |
KeyA
KeyB, Quote, KeyE |
|
|
|
|
就像是采用统一的键盘标准,不管你键盘是英文还是中文,只要按键位置一样,触发键就一样
-
特殊键与通配符
insert, up, f5, delete 等,直接使用名称(参考 W3C 标准)
-
序列绑定 (Key Sequences / Leader Keys)
允许通过“先按 A,再按 B”来触发操作,类似 Vim 的 Leader Key 或 Tmux 的前缀键
-
语法:用 >连接 -
ctrl+a>n=new_window(先按 Ctrl+A,松开,再按 N -> 新建窗口) -
无限等待,会一直等到按下一个键,没有超时设置
-
动作(Action)写法
当你在 keybind 中定义了“触发器”(如 ctrl+a)后,等号右边的部分就是 “动作”,告诉 Ghostty 按下键后具体要做什么
动作的基本格式
-
action或action:param -
如果动作不需要参数,直接写名字(如 new_window) -
如果动作需要参数,用冒号分隔(如 `text:hello) -
参数处理: 冒号后面的内容会被原样接收,不会解析双引号或其他特殊符号
-
如果你想发送包含空格的字符串 csi:A B,你需要把整个绑定用双引号包起来:--keybind="up=csi:A B"
|
|
|
|
|---|---|---|
ignore |
|
|
unbind |
|
(注意:它会同时移除普通绑定和 physical: 前缀的绑定) |
csi:text |
|
例: csi:A 发送“光标上移”指令(等同于方向键上)。 |
esc:text |
|
例: esc:d 可能用于删除到词尾(取决于具体程序定义)。 |
text:text |
|
例: text:\x15 发送 Ctrl-U 字符;text:Hello 直接输入 Hello。 |
提示: 其他所有高级动作(如 new_window, copy, paste 等)可以通过运行命令
ghostty +list-actions查看完整列表。
特殊全局指令
keybind = clear :清除所有设定的按键绑定
这不仅清除你自定义的,连 Ghostty 的默认绑定(如 Ctrl+C, Ctrl+V)也会被清除!通常只在配置文件开头使用,以便从头开始完全自定义
高级前缀修饰符 (Prefixes)
可以在触发器前面加前缀(用冒号结尾),来改变绑定的行为范围或逻辑
-
all: (应用到所有表面):快捷键只对当前聚焦的那个终端窗口/标签页生效, 加上 all:: 快捷键会对所有打开的 Ghostty 终端表面生效 (比如你想按一个键让所有终端同时滚动,或者同时刷新配置) -
global: (系统级全局快捷键): 加上 global:: 即使 Ghostty 没有聚焦(你在用浏览器或编辑器),按下该组合键也能触发 Ghostty 的动作 -
unconsumed (不消费输入):加上unconsumed:: Ghostty执行动作的同时,也会把按键信号传给终端里的程序 (你想让 Ctrl+A 既触发 Ghostty 的某个功能,又让 Vim 收到 Ctrl+A 进行行首跳转。) 冲突: global: 和 all: 绑定的按键永远会被消费,不能使用 unconsumed:(因为它们不属于特定终端,无法编码发送) -
performable(条件出发):只有当动作确实能执行时,才触发并消费按键;否则,当作没绑定一样,把按键传给程序。
-
多重前缀: 可以叠加使用.
global:unconsumed:ctrl+a=reload_config:含义:全局生效 + 不消费按键 + 按下 Ctrl+A 重载配置 -
覆盖规则:触发器本身不区分前缀。ctrl+a 和 global:ctrl+a 被视为同一个触发器。后写的覆盖先写的
# 1. 忽略 F12,防止误触
keybind = F12=ignore
# 2. 解除 Ctrl+Q 的默认退出绑定,让它传给程序(如果程序有用)
keybind = ctrl+q=unbind
# 3. 发送特定的字符串 "sudo "
keybind = ctrl+s=text:sudo\x20
# 4. 【智能复制】有选区时复制,无选区时传给程序 (如中断)
keybind = performable:ctrl+c=copy_to_clipboard
# 5. 【全局快捷键】无论在哪,按 Cmd+Shift+R 重载 Ghostty 配置 (macOS/KDE/GNOME)
keybind = global:super+shift+r=reload_config
# 6. 【全终端广播】按某个键,让所有打开的终端都清屏
keybind = all:ctrl+l=clear_screen
-
链式动作 (Chained Actions)
允许你按下一个快捷键,按顺序执行多个动作
1.定义主绑定:首先正常定义一个 keybind; 2. 追加动作:使用 chain= 开头定义后续动作。Ghostty 会自动将这些动作附加到最近定义的那个绑定上
# 第一步:定义主触发器 ctrl+a -> 新建窗口
keybind = ctrl+a=new_window
# 第二步:追加动作 -> 焦点移到左侧分屏
keybind = chain=goto_split:left
# 第三步:再追加一个动作 -> 切换全屏
keybind = chain=toggle_fullscreen
夜雨聆风