我在用
- arch 内核 5.7.3-arch1-1,以及
- 打开盒子,和
- 新vim 0.4.3,和
- 联想 thinkpad T430 笔记本电脑/键盘。
所有系统包都是最新的。
我正在尝试交换大写锁定和转义键以在 neoVim 中使用并使用了这条线
setxkbmap -option caps:swapescape
这将按预期将转义键设置为大写切换,但对大写锁定键没有任何作用。我期望大写锁定键可以用作退出键,但事实并非如此。
任何人都可以指示我如何执行此操作,以及为什么使用上述命令大写锁定不起作用?
我的理解是,这不能在 nvim 的文件中完成.vimrc
。
以下是xev
按下然后释放时的输出escape
,keycode 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 lock
,keycode 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