Alacritty 是由 Rust 写的一个 Terminal emulator。功能比较少,但是够用。个人认为最好的是方便自定义,能够和 Tmux 进行支持;原生也支持 Vi Mode。
配置文件基于 Alacritty 的 0.7.0 ,未注释的则是个人配置,可以参考。配置因人而异,顺手就好。
# Configuration for Alacritty, the GPU enhanced terminal emulator.
# 导入额外的配置文件
#
# 按照列表顺序进行加载,如果文件不存在,那么会跳过。如果和先前导入的配置存在相同的字段,那么会被替换。
# 所有的 import 路径要么使用以 `/` 开头的绝对路径,要么以用户的 HOME 目录开头 `~/`
# import:
# - /path/to/alacritty.yml
# `env` 下的所有键值对将会被添加为环境变量
env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
TERM: xterm-256color
window:
# 窗口尺寸大小(配置变更需要重启生效)
#
# 终端显示的列和行的数量。列的数量至少是 2,如果设置为 0 那么会使用窗口管理器决定的大小。
dimensions:
columns: 120
lines: 30
# 窗口位置(配置变更需要重启生效)
#
# 单位是像素。如果不进行设置,那么由窗口管理器决定位置
# position:
# x: 0
# y: 0
# 窗口内边距(配置变更需要重启生效)
#
# 调整窗口的内边距(单位为像素)。此填充由DPI缩放,并且始终在相对的两边添加指定的值。
# 注解:内边距是窗口边框相对于终端显示内容的空白部分,可以参考 CSS
# padding:
# x: 0
# y: 0
# 在终端内容周围平均分配额外的 padding。
# dynamic_padding: false
# 窗口的外边框
#
# 可以为如下的值:
# - full: 边框和标题栏
# - none: 边框和标题栏都没有
#
# macos 可以独占的配置:
# - transparent: 标题栏,透明背景和标题栏按钮
# - buttonless: 标题栏,透明背景,但没有标题栏按钮
decorations: none
# 启动模式(配置变更需要重启生效)
#
# 可以为如下的值:
# - Windowed: 窗口化
# - Maximized: 最大化窗口
# - Fullscreen: 全屏
#
# macos 可以独占的配置:
# - SimpleFullscreen
# startup_mode: SimpleFullscreen
startup_mode: Windowed
# 窗口标题
title: Alacritty
# 是否允许终端的应用更改窗口标题
dynamic_title: true
# Window class (Linux/BSD only):
# class:
# Application instance name
# instance: Alacritty
# General application class
# general: Alacritty
# GTK theme variant (Linux/BSD only)
#
# Override the variant of the GTK theme. Commonly supported values are `dark`
# and `light`. Set this to `None` to use the default theme variant.
# gtk_theme_variant: None
scrolling:
# 回滚缓冲区中的最大行数。 设置为 0 会禁用滚动
history: 10000
# 一次滚动几行
multiplier: 3
# 字体配置
font:
# 常规字体
normal:
# family: Hack
# family: "Sarasa Mono SC"
family: "Fira Code" #目前的版本不支持连字
# 字体风格
style: Regular
# 粗体
bold:
family: "Fira Code"
style: Bold
# 斜体
italic:
family: Hack
style: Italic
# 斜粗体
# bold_italic:
# family: monospace
# style: Bold Italic
# 字体大小
size: 16
# 每个字符的间的字间距。"offset.y" 可以控制行距,"offset.x" 可以改变字符间距。
offset:
x: 1 # 我这里改成 1 了,个人感觉比较舒服
y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increasing `x` moves the glyph to the
# right, increasing `y` moves the glyph upward.
# glyph_offset:
# x: 0
# y: 0
# 细线字体渲染(仅适用于macOS)
#
# retina 可以设置为 true,非 retina 屏幕建议设置为 false
use_thin_strokes: true
# If `true`, bold text is drawn using the bright color variants.
draw_bold_text_with_bright_colors: false
# 颜色配置,建议不要自己折腾,直接 https://github.com/eendroroy/alacritty-theme
colors:
primary:
foreground: '0xeeeeec'
normal:
black: '0x2e3436'
red: '0xcc0000'
green: '0x73d216'
yellow: '0xedd400'
blue: '0x3465a4'
magenta: '0x75507b'
cyan: '0x06989a'
white: '0xd3d7cf'
bright:
black: '0x2e3436'
red: '0xef2929'
green: '0x8ae234'
yellow: '0xfce94f'
blue: '0x729fcf'
magenta: '0xad7fa8'
cyan: '0x34e2e2'
white: '0xeeeeec'
# 终端响铃
#
# 配置接收到 BEL 控制字符后的
# 每当接收到BEL控制字符时,钟就会响起。
# bell:
# 动画效果
#
# 可以为下面的值,可以设置后自己感受:
# - Ease
# - EaseOut
# - EaseOutSine
# - EaseOutQuad
# - EaseOutCubic
# - EaseOutQuart
# - EaseOutQuint
# - EaseOutExpo
# - EaseOutCirc
# - Linear
# animation: EaseOutExpo
# 动画闪烁的持续时间(以毫秒为单位)。设置为 0 表示禁用动画效果
# duration: 0
# 动画颜色.
# color: '#ffffff'
# 响铃后执行的命令, 配置为 None 则不执行任何命令
#
# Example:
# command:
# program: notify-send
# args: ["Hello, World!"]
#
# command: None
# 背景不透明度
#
# 窗口不透明度,区间为从0.0到1.0的浮点数。0.0 完全头名,1.0 则完全不透明
background_opacity: 0.95
selection:
# 分割语义化单词的分隔符,这个会影响到鼠标双击左键的单词选中。
# 比如 @ 作为分割 username 和 password 的字符,默认配置里面竞是没有的。。。
semantic_escape_chars: ",│`|:\"' ()[]{}<>\t@="
# 选中文本后是否复制到主剪贴板,关于主剪贴板是啥可以参考 https://wiki.archlinux.org/index.php/clipboard
save_to_clipboard: false
# 光标配置
cursor:
# 光标样式
style:
# 光标形状
#
# 可以为下面的值:
# - ▇ Block
# - _ Underline
# - | Beam
shape: Block
# 光标闪烁状态
#
# 可以为下面的值:
# - Never: Prevent the cursor from ever blinking
# - Off: Disable blinking by default
# - On: Enable blinking by default
# - Always: Force the cursor to always blink
blinking: Off
# Vi 模式下的光标样式
# 同上面的配置项,如果设置为 None 那么会使用普通模式下的光标配置
vi_mode_style: None
# 毫秒为单位的光标闪烁间隔
# blink_interval: 750
# 如果为true,则当窗口未聚焦时,光标将显示为空心框。
# unfocused_hollow: true
# Thickness of the cursor relative to the cell width as floating point number
# from `0.0` to `1.0`.
#thickness: 0.15
# 是否启用配置热更新
live_config_reload: true
# Shell
#
# 随终端打开时启动的 Shell
#
# Default:
# - (macOS) /bin/bash --login
# - (Linux/BSD) user login shell
# - (Windows) powershell
# shell:
# program: /bin/bash
# args:
# - --login
# 启动时的目录
#
# 如果是 None 那么会使用父进程的工作目录
# working_directory: None
# Alt 和字符连按的时候发送 ESC (\x1b)
# alt_send_esc: true
# 鼠标配置
mouse:
# 点击配置
#
# 双击和三击的判定等待时间,数值越小,需要快速的双击才能判定为双击操作
# double_click: { threshold: 300 }
# triple_click: { threshold: 300 }
# 打字的时候临时隐藏鼠标
hide_when_typing: false
url:
# 配置单击 URL 时的动作
#
# 单击被识别为URL的文本时,将执行所指定的程序。 URL始终作为最后一个参数添加到命令中。
# 如果设置为 None,那么禁用此功能
#
# Default:
# - (macOS) open
# - (Linux/BSD) xdg-open
# - (Windows) explorer
# launcher:
# program: xdg-open
# args: []
# URL modifiers
#
# 配置修饰键,Alacritty 默认单击就打开 URL,如果将此项配置为 Command,那么需要按住 Command 然后单击
modifiers: Command
# Mouse bindings
#
# 配置鼠标动作绑定,和键盘绑定类似。详细配置可以参考 Key bindings 一节
#
# 为了在 Alacritty 中运行的应用程序捕获鼠标时触发鼠标绑定,会自动添加 Shift 修饰符。
#
# - `mouse`:
#
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# - `action` (see key bindings)
#
# And optionally:
#
# - `mods` (see key bindings)
# mouse_bindings:
# - { mouse: Middle, action: PasteSelection } # 按鼠标中键粘贴选中内容
# Key bindings
#
# 按键绑定是对象列表。比如西面的是默认的粘贴的键位绑定
#
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Each key binding will specify a:
#
# - `key`: 需要按到的键盘码
#
# - A-Z
# - F1-F24
# - Key0-Key9
#
# 键盘码可以从下面找到
# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
# 这里对于不清楚键盘上每个键的英文名称的同学,可以参考
# https://www.computerhope.com/jargon/b/backquot.htm
#
# 除了使用按键的名字之外,还支持使用所需键的 scancode。不过必须为十进制数字。下面的命令会显示十六进制的 scancode
#
# `showkey --scancodes`.
#
# Then exactly one of:
#
# - `chars`: 发送字节序列到正在运行的应用程序
#
# char 字段可以将指定的字符串写入终端。这功能可以用在传递转义序列中。
# 想要找到诸如 `PageUp` (`"\x1b[5~"`) 这样的转义字符,可以通过 `showkey -a` 命令
# `xxd -psd` 命令也可以做到
#
# - `action`: 执行预定义的操作
#
# - ToggleViMode: 开启/关闭 Vi 模式
# - SearchForward: 向前搜索
# - SearchBackward: 向后搜索
# - Copy: 复制
# - Paste: 粘贴
# - IncreaseFontSize: 增加字号
# - DecreaseFontSize: 减小字号
# - ResetFontSize: 重置字号
# - ScrollPageUp: 向上翻一页
# - ScrollPageDown: 向下翻一页
# - ScrollHalfPageUp: 向上翻半页
# - ScrollHalfPageDown: 向下翻半页
# - ScrollLineUp: 向上滚动一行
# - ScrollLineDown: 向下滚动一行
# - ScrollToTop: 滚动到顶部
# - ScrollToBottom: 滚动到底部
# - ClearHistory: 清空滚动缓冲区
# - Hide: 隐藏窗口
# - Minimize: 最小化
# - Quit: 退出
# - ToggleFullscreen: 在全屏/当前模式下切换
# - SpawnNewInstance: 启动一个新的 Alacritty
# - ClearLogNotice: 清 UI 上的 warning 和 error 的 notice
# - ClearSelection: 清空当前选中
# - ReceiveChar: 不执行任何动作,将字符输入
# - None: 不执行任何动作,并且拦截掉
#
# - Vi 模式下独占的操作
#
# - Open: 打开一个链接,launcher 的配置参考 `url.launcher`
# - ToggleNormalSelection: 切换到普通选中模式
# - ToggleLineSelection: 切换到行选中模式
# - ToggleBlockSelection: 切换到块选中模式
# - ToggleSemanticSelection: 切换到语义选中模式,参考 `selection.semantic_escape_chars`.
#
# - Vi 模式下独占的光标操作:
#
# - Up: 向上一行
# - Down: 向下一行
# - Left: 向左一个字符
# - Right: 向右一个字符
# - First: 第一列,如果已经在第一列,那么到起始行
# - Last: 最后一列,如果已经在最后一列,那么到起始行
# - FirstOccupied: 此终端行中的第一个非空单元格,如果已经位于该行的第一个单元格时,那么该行的第一个非空单元格
# - High: 屏幕最上方
# - Middle: 屏幕中间
# - Low: 屏幕底部
# - SemanticLeft: 前一个在被语义上分隔的单词的开头
# - SemanticRight: 下一个在被语义上分隔的单词的开头
# - SemanticLeftEnd: 前一个被语义上分隔的单词的结尾
# - SemanticRightEnd: 下一个被语义上分隔的单词的结尾
# - WordLeft: 前一个被空白符分隔的单词的开头
# - WordRight: 下一个被空白符分隔的单词的开头
# - WordLeftEnd: 前一个被空白符分隔的单词的结尾
# - WordRightEnd: 下一个被空白符分隔的单词的结尾
# - Bracket: 与光标所在位置的括号匹配的字符
# - SearchNext: 向后搜索
# - SearchPrevious: 向前搜索
# - SearchStart: vi 模式光标左侧的首次匹配
# - SearchEnd: vi 模式光标右侧的最后匹配
#
# - 搜索模式独占的操作:
# - SearchFocusNext: 将焦点移到下一个搜索匹配项。
# - SearchFocusPrevious: 将焦点移到上一个搜索匹配项。
# - SearchConfirm: 确认搜索
# - SearchCancel: 取消搜索
# - SearchClear: 清空搜索内容
# - SearchDeleteWord: 删除搜索内容的最后一个单词
# - SearchHistoryPrevious: 跳转搜索内容历史的上一个
# - SearchHistoryNext: 跳转搜索内容历史的下一个
#
# - macos 独占的操作:
# - ToggleSimpleFullscreen: Enter fullscreen without occupying another space.
#
# - Linux/BSD 独占的操作:
#
# - CopySelection: 从选中缓冲区中复制
# - PasteSelection: 从选中缓冲区中粘贴
#
# - `command`: 执行命令
#
# The `command` field must be a map containing a `program` string and an
# `args` array of command line parameter strings. For example:
# `{ program: "alacritty", args: ["-e", "vttest"] }`
#
# 可选的:
#
# - `mods`: 修饰键
#
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# 多个修饰键使用 `|` 进行组合,像这样:
# `mods: Control|Shift`.
#
# - `mode`: 对于指定的模式下进行绑定。用于在不同模式下向应用程序发送正确的转义序列
# - AppCursor
# - AppKeypad
# - Search
# - Alt
# - Vi
#
# A `~` 操作符,用于逻辑取反
#
# Alacritty 有默认的键位绑定,如果想要替换需要使用新的绑定进行覆盖。如果想取消默认的绑定,,可以映射到 `ReceiveChar`。
# 另外,如果不希望接收该绑定的输入字符,可以映射到 `None`。
# 如果相同的触发键位,有多个 action,那么会顺序执行
# 下面是我的键位绑定,使用 Tmux。通过转义序列触发 tmux 的 prefix 和快捷键位
# Tmux 和 Alacritty 集成可以参考 https://arslan.io/2018/02/05/gpu-accelerated-terminal-alacritty/
key_bindings:
- { key: LBracket, mods: Command, chars: "\x1d\x5b"}
- { key: Apostrophe, mods: Command, chars: "\x1d\x22"}
- { key: S, mods: Command, chars: "\x1d\x25"}
- { key: J, mods: Command, chars: "\x1d\x6a"}
- { key: K, mods: Command, chars: "\x1d\x6b"}
- { key: H, mods: Command, chars: "\x1d\x68"}
- { key: L, mods: Command, chars: "\x1d\x6c"}
- { key: J, mods: Command|Shift, chars: "\x1d\x4a"}
- { key: K, mods: Command|Shift, chars: "\x1d\x4b"}
- { key: H, mods: Command|Shift, chars: "\x1d\x48"}
- { key: L, mods: Command|Shift, chars: "\x1d\x4c"}
- { key: W, mods: Command, chars: "\x1d\x77"}
- { key: T, mods: Command, chars: "\x1d\x63"}
- { key: D, mods: Command, chars: "\x1d\x26"}
- { key: X, mods: Command, chars: "\x1d\x78"}
- { key: Z, mods: Command, chars: "\x1d\x7a"}
- { key: N, mods: Command, chars: "\x1d\x71"}
- { key: Semicolon, mods: Command|Shift, chars: "\x1d\x3a"}
- { key: Key1, mods: Command, chars: "\x1d\x31"}
- { key: Key2, mods: Command, chars: "\x1d\x32"}
- { key: Key3, mods: Command, chars: "\x1d\x33"}
- { key: Key4, mods: Command, chars: "\x1d\x34"}
- { key: Key5, mods: Command, chars: "\x1d\x35"}
- { key: Key6, mods: Command, chars: "\x1d\x36"}
- { key: Key7, mods: Command, chars: "\x1d\x37"}
- { key: Key8, mods: Command, chars: "\x1d\x38"}
- { key: Key9, mods: Command, chars: "\x1d\x39"}
# 不使用 tmux 可以参考这份
# key_bindings:
#- { key: LBracket, mods: Command, action: ToggleViMode }
#- { key: U, mods: Command, mode: ~Vi|~Search,action: ScrollHalfPageUp }
#- { key: D, mods: Command, mode: ~Vi|~Search,action: ScrollHalfPageDown }
#- { key: LBracket, mods: Control,mode: Vi|~Search, action: ClearSelection }
#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode }
#- { key: G, mode: Vi|~Search, action: ScrollToTop }
#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom }
#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp }
#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown }
#- { key: Y, mode: Vi|~Search, action: Copy }
#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection }
#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection }
#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection }
#- { key: Return, mode: Vi|~Search, action: Open }
#- { key: K, mode: Vi|~Search, action: Up }
#- { key: J, mode: Vi|~Search, action: Down }
#- { key: H, mode: Vi|~Search, action: Left }
#- { key: L, mode: Vi|~Search, action: Right }
#- { key: Key0, mode: Vi|~Search, action: First }
#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last }
#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied }
#- { key: H, mods: Shift, mode: Vi|~Search, action: High }
#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle }
#- { key: L, mods: Shift, mode: Vi|~Search, action: Low }
#- { key: B, mode: Vi|~Search, action: SemanticLeft }
#- { key: W, mode: Vi|~Search, action: SemanticRight }
#- { key: E, mode: Vi|~Search, action: SemanticRightEnd }
#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft }
#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight }
#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd }
#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket }
#- { key: Slash, mode: Vi|~Search, action: SearchForward }
#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward }
#- { key: N, mode: Vi|~Search, action: SearchNext }
#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious }
# 调试
# debug:
# 显示没帧重绘所使用的时间
# render_timer: false
# 持久化日志
#persistent_logging: false
# 日志级别
#
# Values for `log_level`:
# - Off
# - Error
# - Warn
# - Info
# - Debug
# - Trace
# log_level: Warn
# 输出所有接收到的窗口事件
# print_events: false