在打字的时候如果需要移动光标,把手指挪到方向键的位置很不方便,但是 Capslock 键在很好按到的位置。vim 虽然是一个很好的选择,但是学习 vim 需要改变一些原有的打字习惯,以及 vim 的操作逻辑总是要在各种文本编辑器软件中实现,无法做到全局操作。Windows 中的 Capslock+ 以及 Linux 系统中的 xxx (需要自己设置)利用 Capslock 组合键解决了这个问题。

Capslock+

软件官网:Capslock+

下载之后还可以参考 CapsLock+settingsDemo.ini 中的格式,在 CapsLock+settings.ini 中加入自己需要的组合键。

keyd

项目地址:keyd

Linux 中虽然有很多能够实现各种 key remapping 功能的软件,但是很多都在 Wayland 中没法用。keyd 通过内核级的操作规避了这个问题:

keyd attempts to solve this problem by providing a flexible system wide daemon which remaps keys using kernel level input primitives (evdev, uinput).

配置文件

Arch linux 中,keyd 的配置文件路径为 /etc/keyd/default.conf

keyd 虽然有非常详细的 man page,但是不像 Capslock+ 那样有一个现成的配置文件可以照葫芦画瓢,因此配置文件写起来会麻烦一点。这里直接给出我现在在用的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[ids]
*

[main]
# 定义 Capslock 键的功能
# - 短按: capslock (大小写锁定)
# - 长按: 切换到 [nav] 层
capslock = overload(nav, capslock)


[nav]
# 这是一个自定义的导航层 (layer)
# 只有当 Capslock 被按住时,这里的映射才会生效

# --- 基本光标移动 (Vim-style) ---
i = up
k = down
j = left
l = right

# --- 扩展光标移动 ---
# Capslock + p: 移动到行首 (Home)
p = home
# Capslock + ;: 移动到行末 (End) - 新增
semicolon = end
# Cpaslock + b: 向下移动 10 行
b = macro(down down down down down down down down down down)


# --- 文本选中功能 ---
# Capslock + u: 选中至行首 (Shift + Home)
u = S-home
# Capslock + o: 选中至行末 (Shift + End)
o = S-end
# Capslock + h: 向左选中一个单词 (Shift + Ctrl + Left)
h = S-C-left
# Capslock + dot: 向右选中一个单词 (Shift + Ctrl + Right)
dot = S-C-right
# Capslock + y: 向上选中 10 行
y = macro(S-up S-up S-up S-up S-up S-up S-up S-up S-up S-up)
# Capslock + m: 向下选中 10 行
m = macro(S-down S-down S-down S-down S-down S-down S-down S-down S-down S-down)


# --- 文本编辑功能 (新增) ---
# Capslock + Enter: 在行末换行 (End -> Enter)
enter = macro(end enter)
# Capslock + Backspace: 删除当前行 (Home -> Shift+End -> Backspace)
backspace = macro(home S-end backspace)