我想将Caps Lock+ H / J / K / 绑定L到箭头键。我发现两种方法各有一些问题:
解决方案1
使用xkb
:编辑/usr/share/X11/xkb/symbols/us
第一个块。
# replace Caps with AltGr
key <CAPS> { [ ISO_Level3_Shift ] };
# Add vim cursor keys to be accessed with AltGr
key <AB02> { [ x, X, Delete, Delete ] };
key <AC02> { [ s, S, KP_Enter, KP_Enter ] };
key <AC03> { [ d, D, Next, Next ] };
key <AC04> { [ f, F, BackSpace, BackSpace ] };
key <AC06> { [ h, H , Left, Left ] };
key <AC07> { [ j, J, Down, Down ] };
key <AC08> { [ k, K, Up, Up ] };
key <AC09> { [ l, L, Right, Right ] };
key <AD07> { [ u, U, Prior, Prior ] };
key <AE03> { [ 3, section, Home, Home ] };
key <AE04> { [ 4, dollar, End, End ] };
但这个答案在Java程序(例如IntelliJ)中不起作用,所以我应该使用解决方案2。
解决方案2
使用xmodmap
:创建~/.xmodmap
包含以下内容的文件:
keycode 66 = Mode_switch
keysym h = h H Left
keysym l = l L Right
keysym k = k K Up
keysym j = j J Down
keysym u = u U Prior
keysym i = i I Home
keysym o = o O End
keysym p = p P Next
然后运行xmodmap ~/.xmodmap
命令。
问题:该解决方案打破了其他布局。它可以用英语工作,但是当我切换其他布局(例如切换为俄语)时,我无法在这些键上键入字母,并且Caps+ H / J / K / L也不起作用,直到我切换回英语。我怎么解决这个问题?
答案1
在Linux上,我强烈推荐密钥。
这示例配置 会达到比你想要的更多(但如果需要,你可以手动修剪它)
# Goal:
#
# To create a vi like navigation layer accessible by pressing H J K L while having capslock pressed
# otherwise behave like the control key (when held) and escape when tapped.
#
# In essence we want:
#
# - capslock+h = left
# - capslock+j = down
# - capslock+k = up
# - capslock+l = right
#
# - capslock+shift+h = C-left
# - capslock+shift+l = C-right
# - capslock+shift+j = C-down
# - capslock+shift+k = C-up
#
# - capslock = escape (when tapped)
#
# In all other instances capslock should behave as normal control:
#
# - capslock+a = C-a
# - capslock+b = C-b
# - capslock+c = C-c
# ...
# - capslock+shift+i = C-S-i
# - capslock+shift+k = C-S-k
# ....
克莫纳德将是一个替代方案
答案2
请参阅此处的示例https://wiki.archlinux.org/index.php/X_keyboard_extension#Caps_hjkl_as_vimlike_arrow_keys
它应该可以在所有应用程序中完美运行。
我将尝试详细阐述这个答案,并稍后提交更完整的示例。