vial 键盘初探

介绍vial的基础使用方法、支持的常见配列(包括corne, sofle, lily58等),以及我个人的键位配置逻辑。
peripheral device
aiac
Published

September 16, 2026

Modified

September 17, 2026

Vial简介

Vial 是什么

Vial是一个开源、跨平台的键盘配置工具,支持Windows、macOS和Linux。它通过图形界面实时修改键位,也能配置切层、宏、Tap Dance等功能。修改后的配置保存在键盘端,日常使用时不需要一直开着Vial,换一台电脑也能保留键位。

理解它时,可以先区分三个东西:

  • QMK 是运行在键盘控制器上的开源固件,负责把物理按键转换成发送给电脑的按键事件。
  • VIA 提供实时改键界面,让兼容固件的键盘可以不用重新编译、刷写固件就修改键位。
  • Vial 沿用了实时改键的思路,配套的vial-qmk固件基于QMK,并提供更多可在界面中配置的功能,例如Tap Dance和Combo。

从使用体验看,可以把Vial理解为VIA的功能增强版。不过,支持QMK或VIA并不等于完整支持Vial:要使用Vial的全部功能,需要键盘运行对应的Vial兼容固件。界面里能配置多少层、多少组Tap Dance,也取决于固件开放的功能与存储空间。

硬件准备

首先需要有一个支持Vial的键盘,再从官网下载页面获取软件。购买时最好确认具体型号、控制器和连接方式是否支持Vial,以及是否已预刷兼容固件。

大多数情况下不需要自己设计键盘,可以选择现有配列,再定制键位。分体键盘中常见的有Corne、Sofle、Lily58及它们的变体:

配列 常见版本的特点 选择时的考虑
Corne 常见为42键,也有36键等变体,没有独立数字行 手指移动范围小,数字和更多符号需要依靠切层或组合输入
Sofle 常见为58键,保留数字行,部分版本带旋钮和显示屏 可保留更多传统键位,适合逐步适应分体键盘
Lily58 常见为58键,保留数字行,与Sofle的拇指区等布局细节不同 可比较拇指按键的位置、外壳和套件生态后选择

这些名字描述的是硬件设计及其衍生配列。实际键数、附加功能和Vial支持情况仍要以具体版本为准。

我选择的是sofle的一个变体,W-SOFLE Split Keyboard,它有64键,相比sofle多了6个按键,但缺少2个旋钮和2块显示屏。多出来的按键更方便我从传统的键盘切换到这类少键位的键盘。后续的内容会以它为基础,但我认为总体的思想可以通用。

配置键位

本节由AI完成写作。

连接、改键与备份

连接键盘后打开Vial,选择对应设备,正常情况下就能看到键盘配列。第一次修改前,建议通过File → Save current layout把当前配置导出为.vil文件,保存一份可以恢复的起点。后续也可以在每次较大的调整后分别备份,通过Load saved layout载入适用于同一键盘的配置。

最基本的改键操作只有三步:

  1. Keymap页面选择要编辑的层,初次尝试先选0
  2. 点击上方配列中的一个物理按键。
  3. 在下方的键码区域选择新功能。例如,选中原来的CapsLock位置,再在Basic中选择Esc。

普通键位修改会立即写入键盘并生效,不用重新刷固件。可以打开文本编辑器测试,但要注意Tap Dance等配置页面可能有单独的Save按钮,需要保存后再使用。界面中点击层号只是在选择编辑对象,并不会让实际键盘切换到那一层。

如果检测不到键盘,先检查线材是否支持数据传输、连接方式是否正确,以及是否已经安装兼容固件。Linux上还可能需要按照官方说明配置udev规则。需要解锁的操作应按界面提示按住指定的物理按键;不要随意使用Clear EEPROMBootloader,前者会清除持久化设置,后者用于进入刷写模式。

还有一个容易混淆的地方:Vial通常配置的是键码,最终字符由电脑上的键盘布局和输入法解释。例如,在美式布局下,Shift + [会输出{;换成其他布局或输入法,结果可能不同。后文涉及符号的配置以美式布局为例。

Layer:让同一个位置承担不同功能

Layer(层)可以理解为叠在同一块键盘上的多张键位表。通常把Layer0作为基础层,放字母、常用符号和修饰键;把Layer1用于方向键、数字小键盘或功能键。这样即使物理按键较少,也能覆盖完整键盘的功能。

例如,Layer0的H/J/K/L仍然输入字母,Layer1的相同位置分别设为左、下、上、右方向键,再给拇指区分配一个MO(1):平时正常打字,按住拇指键时,右手就能控制方向。

常用的切层方式如下,括号内的数字是目标层号:

键码 操作方式 适合的用途
MO(1) 按住时激活Layer1,松开后取消 临时使用方向键、符号键,类似笔记本的Fn键
TG(1) 按一下开启Layer1,再按一下关闭 连续输入数字等需要长时间停留的场景
OSL(1) 激活Layer1供下一次按键使用 偶尔输入一个其他层的键
LT(1, KC_SPC) 单击输入空格,按住时激活Layer1 把空格与切层合并到一个拇指键
TO(0) 切换到Layer0,关闭其他非默认活动层 从其他层返回基础层

实际工作时可以同时激活多个层,编号更高的活动层优先。高层的按键有两种需要特别区分的设置:

  • (透明,KC_TRNS):继续向下查找较低活动层在同一位置的功能。没有改动的字母键、修饰键常常可以设为透明。
  • KC_NO(无操作):这个位置不执行动作,也不会继续向下查找。

初学时先用MO(1)就足够了,并把Layer1中切层键所在的位置设为透明。使用TG(1)时,也要确保Layer1上有能够关闭这一层的按键,例如在同一位置保留透明映射,或安排一个明确的返回键,避免切过去后找不到出口。

双功能键:单击与按住

除了专门的切层键,还可以给一个按键安排两种功能。前面的LT属于Layer-Tap:单击发送普通键码,按住切层。另一类是Mod-Tap:单击发送普通键码,按住充当Ctrl、Shift、Alt或GUI等修饰键。

例如,LCTL_T(KC_ESC)表示单击Esc、按住左Ctrl。在Vial的Quantum区域中,这类键可能显示为LCtl_T(kc);先选择外层功能,再点击按键内部的小框指定Esc。它与LCtl(kc)不同,后者表示直接发送Ctrl与指定键的组合,例如LCtl(C)用于复制。

单击与按住需要固件作出判断。Tapping Term是相关的时间阈值,连续按键时的先后顺序和其他Tap-Hold设置也会影响结果。刚开始可以保留默认值,确认自己经常误触发哪一种动作后再调整。把高频字母键都改成双功能键需要适应,初次尝试可以先从拇指区或Esc这类位置开始。

Tap Dance:单击、双击和长按

Tap Dance可以根据同一个按键的不同操作触发不同功能。在Vial的Tap Dance配置页选择一个编号后,可以设置四种动作:

界面选项 动作
On tap 单击
On hold 按住
On double tap 双击
On tap + hold 单击松开后,再按下并保持

比如我希望原CapsLock位置“单击Esc,长按或双击CapsLock”,就可以把On tap设为Esc,把On holdOn double tap设为CapsLock。这里的长按触发的是CapsLock开关,松开按键后大写状态仍然保留。

配置完成后,点击该页面的Save,再回到Keymap,把对应的TD(n)分配给一个物理按键。只编辑Tap Dance条目、没有把它绑定到键位上,不会产生效果。

后文的括号键也是这样实现的:左键的单击、双击、长按、单击后长按分别设为[({<,右键则配置对应的右括号。例如{可用带Shift的左方括号键码表示。每次操作输出一侧的符号;如果希望一次输入整对括号并移动光标,就需要进一步使用宏。

Tap Dance也有自己的Tapping Term。阈值太短容易来不及双击,太长则可能让单击输出产生等待感。它适合把相关但不那么高频的功能放在一起,使用前应测试快速单击、双击和长按是否符合预期。

Combo与宏

还有两类功能可以按需尝试:

  • Combo(组合触发):同时按下指定的几个按键,产生另一个键码。例如把两个相邻键同时按下设为Esc。选择组合时要避开正常打字中容易同时按下的键,减少误触。
  • Macro(宏):把一串按键动作绑定到一个位置,例如输入固定文本或执行重复的快捷键序列。它会受系统键盘布局、当前输入法和应用焦点影响,不适合存储密码等敏感内容。

对于刚开始使用少键位键盘的人,我建议先完成基础层与一个MO功能层,再逐步加入Tap Dance、Combo和宏。每次只调整一小组键位,实际使用一段时间后再判断,比较容易分清问题来自布局还是操作习惯。

以上操作可参阅Vial官方的初次使用LayersQuantumTap Dance文档。

我的键位配置思路

总体思路上,我希望新键盘能保持主要键位不变(从而降低迁移成本),把传统键盘的不方便的键位进行调整,从而提高效率。当然,为了适应这个64键位的键盘,必定有一些键码被换到其他位置。 具体到方法上,我需要在总体键位变化不大的前提下,让常用键码更容易打出(放到离中心区更近的位置,或使用Tap Dance等方法快速打出),让不常用的键码不容易打出(通过更多的操作打出)。

作为这类键盘的新手,我还不太习惯频繁切层的使用风格。所以先决定引入较少的层数来作为过渡,根据使用情况决定是否引入更多的层。目前,我只用了两个Layer,Layer0是基础层,Layer1作为导航层和数字小键盘。

Layer0

Layer0是默认的键盘,需要包含英文字母、符号等,并能够切层。

拇指区、右手键位。 sofle键盘相比普通键盘多了拇指区的位置,相当于在拇指附近多了两个键位,它们习惯上配置层切换按键、空格和回车键,这几类按键的特点是常用、但按动它们的频率不算高(相比于中心区域),因此非常适合拇指按动。我也按照习惯,将靠上的那个配置为层切换(左侧MO(1),右侧MO(2)),将下面的那个配置成空格/回车(左侧/右侧)。 这样普通键盘上回车键的位置就可以换成其他键、而默认位于拇指区的del键则需要换到其他位置。 在使用过程中我发现:

  • 打字过程中需要经常使用退格键(backspace),它默认位于键盘的右上角,十分不方便。
  • 位于右手尾指处的“;:”键(也就是L右边的那个键)占据了重要的位置,但日常打字很少使用它(或许cpp编程频率会高一些)

综合上面几点,可以把原本回车键的位置让给退格键,右上原本的退格键改为del,再把“;:”键和之前的回车键的位置(现在的退格键)互换。这样,退格键位于右手尾指的位置,而“;:”则在它右边一位。保证高频使用的退格键能不用移动手指;右上角的del也是很多常用键盘原本的位置,符合肌肉记忆。

左手键位。 CapsLock键是普通键盘上被诟病最多的按键位置,它很不常用,但却占据了重要的位置(尾指左侧)。而作为vim用户,我的esc键使用频率很高;而CapsLock是一个开关,没有组合键,只有开启/关闭状态。于是就把原本的CapsLock改为“短按esc、长按CapsLock”,而左上角原本esc的位置换成“`~”,符合它的低使用频率、又和普通键盘上esc的位置一致(数字行最左侧)。

中心区键位。 对于w-sofle多出来的左右各3个键位(3x2),靠上的2个(2x2)默认的配置是方向键,予以保留;下面的一对键则被我改为括号键,借助tap dance,它可以输出全部的成对符号([],(),{},<>分别对应短按、双击、长按、单击后长按),切层后则对应“-_”“=+”键,用于中文输入法翻页。

这个部分由于没有键盘上的对应区域,所以自定义程度很高、受习惯的影响小,因此更需要时间找到最佳的配置,目前还存在不少问题。

  • 方向键由两只手控制,有些不方便,应当考虑把它换成PageUp,PageDown,Home,End按键,方向键完全交给Layer1的导航区(采用vim的方向控制,对我来说很熟悉)。
  • 中文输入法翻页的按键“-_”“=+”的其他用途较少,后续可能尝试把中文输入法翻页键配置为[],或者通过PageUp/PageDown来翻页(在把它们换到Layer0的前提下)。

Layer1

Layer1作为导航层主要的功能是数字键盘和方向键。这个层目前还没有我比较确定的设计,因为在常见的键位中,它会包含大量符号和功能键。但我的键盘是无刻键盘,毫无规律的键位很难记住(并且这些符号键本身就很少用,形成肌肉记忆就更困难了)。

键位上,左侧为数字小键盘,类似于全配列的数字小键盘,右侧是导航区,使用hjkl进行类似vim的导航方式,中心区的键位从方向键变换为PageUp,PageDown,Home,End按键。

由于这个层使用频率不高、没有输出字母的能力,因此直接使用MO切换。

键位使用体验

sofle键盘的主要区域是纵列对齐的键盘,初上手时会有错按或按到两键中间的情况,我还在熟悉中。不过这种配列似乎也会让手指定位变得更方便。 分体式键盘可能会让你不习惯用对应的手按按键,例如我就经常想用右手按B,但是它实际上在左手位置。

总结

总体来讲这个键盘的可玩性很高,希望后面能习惯这个键盘。