如何交换大写锁定键和转义键

如何交换大写锁定键和转义键

我在用

  • arch 内核 5.7.3-arch1-1,以及
  • 打开盒子,和
  • 新vim 0.4.3,和
  • 联想 thinkpad T430 笔记本电脑/键盘。

所有系统包都是最新的。

我正在尝试交换大写锁定和转义键以在 neoVim 中使用并使用了这条线

setxkbmap -option caps:swapescape

这将按预期将转义键设置为大写切换,但对大写锁定键没有任何作用。我期望大写锁定键可以用作退出键,但事实并非如此。

任何人都可以指示我如何执行此操作,以及为什么使用上述命令大写锁定不起作用?

我的理解是,这不能在 nvim 的文件中完成.vimrc

以下是xev按下然后释放时的输出escapekeycode 9

KeyPress event, serial 48, synthetic NO, window 0x3200001,
    root 0x139, subw 0x0, time 75547017, (621,536), root:(792,564),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
mbLookupString gives 1 bytes: (1b) "
FilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x3200001,
    root 0x139, subw 0x0, time 75547079, (621,536), root:(792,564),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
FilterEvent returns: False

以下是xev按下和释放时的输出caps lockkeycode 66

FocusOut event, serial 48, synthetic NO, window 0x4800001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 48, synthetic NO, window 0x4800001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 48, synthetic NO, window 0x0,
    keys:  57  0   0   0   0   0   0   0   4   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 48, synthetic NO, window 0x4800001,
    root 0x139, subw 0x0, time 75680956, (272,352), root:(443,380),
    state 0x2, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

答案1

这可以使用 xmodmap 来完成。交换钥匙。

xmodmap -e "keycode 9 = Caps_Lock"; xmodmap -e "keycode 66 = Escape"

之后这个效果可以被撤销

xmodmap -e "keycode 66 = Caps_Lock"; xmodmap -e "keycode 9 = Escape"

不确定这是否符合您的需求,因为它会影响 x 会话中的所有进程。

答案2

密钥是重新绑定键的通用方法,但它没有为特定程序重新绑定键的方法。 (它确实有一个实验性的keyd-application-mapper,但它仅适用于特定窗口管理器上的窗口应用程序。)您的建议是不可能的,或者至少是不完美的,因为每当 neovim 打开时escape就会反弹capslock,即使它当前没有集中/使用。

也就是说,keyd 是“通用的”,因为它可以在任何会话中工作 - X11、wayland,甚至 TTY。我已经使用它几个月了,没有任何问题。

要安装和配置它,请参阅 GitHub(上面链接)或者您可以运行这些命令(假设您使用的是 systemd):

cd
git clone https://github.com/rvaiya/keyd
cd keyd
make
sudo make install

现在编辑/etc/keyd/default.conf并粘贴以下内容:

[ids]

*

[main]

escape=capslock
capslock=escape

然后启用并启动 keyd 服务:

sudo systemctl enable --now keyd

相关内容