乐于分享
好东西不私藏

Ghostty–命令行终端使用的神器(四)

Ghostty–命令行终端使用的神器(四)

新手学习 AI应用 相关知识,更新技能与时代为舞,希望能一起入门不断进步 [碱基比特]

4.7 keybind按键绑定

Ghostty中有两个最核心的键盘配置项,keybindkey-remap按键重映射

按键绑定是用来定义按下什么键执行什么操作的核心配置,格式:触发器=动作,如果有重复的触发器,后面的配置会覆盖前面的

  1. 触发器(Trigger)写法

触发器由按键和修饰键组成,用+连接,基本格式: ctrl+actrl+shift+bup (方向键)

修饰键别名

  • ctrlcontrol
  • alt或者opt,option
  • supercmd,command
  • shift
  1. 物理键码匹配

物理键码匹配 (Physical Key Codes) 是一种按键识别机制,它忽略键盘布局(Layout)和语言设置,直接根据键盘上按键的物理位置来触发操作

在 Ghostty(以及现代 Web 标准 W3C)中,这意味着无论你的操作系统设置为英语、法语、德语还是日语,只要你的手指按下了键盘上同一个位置的键,触发的动作就是一样的。

特性
字符匹配 (Unicode Codepoint) 
(默认行为)
物理键码匹配 (Physical Key Codes) 
(Ghostty 中的 KeyAF1 等)
识别依据
按键产生的字符是什么?
按键的物理位置在哪里?
受键盘布局影响
是。换布局,触发键就变了。
否。换布局,触发键不变。
大小写敏感
通常不敏感 (a = A)。
敏感 (KeyA ≠ KeyB)。
典型写法
a

b?é
KeyA

KeyBQuoteKeyE
适用场景
需要输入特定字符的场景。
快捷键、游戏控制、跨语言环境。

就像是采用统一的键盘标准,不管你键盘是英文还是中文,只要按键位置一样,触发键就一样

  1. 特殊键与通配符

insertupf5delete 等,直接使用名称(参考 W3C 标准)

  1. 序列绑定 (Key Sequences / Leader Keys)

允许通过“先按 A,再按 B”来触发操作,类似 Vim 的 Leader Key 或 Tmux 的前缀键

  • 语法:用>连接
    • ctrl+a>n=new_window (先按 Ctrl+A,松开,再按 N -> 新建窗口)
    • 无限等待,会一直等到按下一个键,没有超时设置
  1. 动作(Action)写法

当你在 keybind 中定义了“触发器”(如 ctrl+a)后,等号右边的部分就是 “动作”,告诉 Ghostty 按下键后具体要做什么

动作的基本格式

  • action或 action:param

    • 如果动作不需要参数,直接写名字(如 new_window
    • 如果动作需要参数,用冒号分隔(如 `text:hello)
  • 参数处理: 冒号后面的内容会被原样接收,不会解析双引号或其他特殊符号

    • 如果你想发送包含空格的字符串 csi:A B,你需要把整个绑定用双引号包起来:--keybind="up=csi:A B"
动作名称
含义
示例与说明
ignore
忽略/吞掉按键
按下键后什么都不发生,也不会传给终端里的程序。常用于屏蔽某些 unwanted 的快捷键。
unbind
解除绑定
删除该按键之前的所有绑定。按键会恢复默认行为(如果是可打印字符,则传给程序)。
(注意:它会同时移除普通绑定和 physical: 前缀的绑定)
csi:text
发送 CSI 序列
发送 ANSI 控制序列。
例:csi:A 发送“光标上移”指令(等同于方向键上)。
esc:text
发送 Escape 序列
发送以 ESC 开头的序列。
例:esc:d 可能用于删除到词尾(取决于具体程序定义)。
text:text
发送字符串
直接输入文本。支持 Zig 语言风格的转义字符。
例: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(条件出发):只有当动作确实能执行时,才触发并消费按键;否则,当作没绑定一样,把按键传给程序。

  1. 多重前缀: 可以叠加使用.global:unconsumed:ctrl+a=reload_config:含义:全局生效 + 不消费按键 + 按下 Ctrl+A 重载配置

  2. 覆盖规则:触发器本身不区分前缀。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
  1. 链式动作 (Chained Actions)

允许你按下一个快捷键,按顺序执行多个动作

1.定义主绑定:首先正常定义一个 keybind; 2. 追加动作:使用 chain= 开头定义后续动作。Ghostty 会自动将这些动作附加到最近定义的那个绑定上

# 第一步:定义主触发器 ctrl+a -> 新建窗口
keybind = ctrl+a=new_window

# 第二步:追加动作 -> 焦点移到左侧分屏
keybind = chain=goto_split:left

# 第三步:再追加一个动作 -> 切换全屏
keybind = chain=toggle_fullscreen
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Ghostty–命令行终端使用的神器(四)

猜你喜欢

  • 暂无文章