Vim 映射Esc位置的方案
QBug Lifelong Learner

由于在用Vim的时候需要频繁去按Esc,为了我们的手指健康以及效率提高,于是就有很多映射Esc的方案出现了。

jj

使用jj来代替Esc是配置起来最容易的方案,只需要在~/.vimrc中输入imap jj <Esc>,退出Vim再进入就可以轻敲2次j键来代替Esc了。

但是这里可能就会有一个疑问了,在Vim的command mode下会不会出现快速按下j被识别为Esc导致不会移动光标呢?

答案是不会,此处引用一下fandom的说明。

The :imap command is used to create the mapping so that it only applies while in insert mode

但是会导致一个新问题 : 在insert mode下输入jj会直接Esc

使用Ctrl [代替Esc

此处引用一下fandom的说明。

If you have an American English keyboard, pressing Ctrl-[ (control plus left square bracket) is equivalent to pressing Esc. This provides an easy way to exit from insert mode.

简单来说,你只需要在Vim中按下两个键就可以实现Esc的功能:Ctrl + [

CapsLock大小写锁定键

CapsLock这个键占据了一个非常有利的位置,只需要伸出左手小拇指就可以按到,我自己也是用Caps当作我的游戏麦克风开关快捷键的。

然而这个键说实话基本上没什么用,唯一功能就是切换大小写,然而切换大小写我们可以按住Shift键来实现,只要你习惯了用Shift切换大小写输入,那么这个Caps键就显得有些食之有肉,弃之有味了。

Caps这个占了高效位置的键交给其他高频使用的按键来使用,说起来也算是很符合计算机思想了,同时网上也有很多人推荐将CapsLock映射到Esc

使用系统的键盘映射工具修改 - 推荐

由于下面两个方法xmodmap & setxkbmap都是启动后就会失效,所以我Google了一下,发现了这么一句话:Isn’t there a “keyboard settings” GUI in ubuntu?. 这倒是提醒了我,于是直接在Google搜“deepin 键盘映射”,还真让我找到了这个修改键盘映射 for deepin, 那对于其他系统,我们直接如法炮制按照系统来搜索修改键盘映射的方法即可。

经测试,重启登录后,我们的修改依然有效,终于是解决了这个问题。

xmodmap - 不推荐

一开始是打算直接修改vimrc来完成键位映射,结果发现vim中似乎无法映射Caps键,那没办法, 只能请出我们的xmodmap来修改用户全局的键盘映射了。

首先,查看要更换的两个键的keycode

在terminal中输入xev, 按下Caps键,可以看到输出了如下信息

1
2
3
4
5
6
KeyPress event, serial 38, synthetic NO, window 0x8400001,
root 0x205, subw 0x0, time 25407643, (895,586), root:(895,616),
state 0x12, keycode 66 (keysym 0xff1b, Escape), same_screen YES,
XLookupString gives 1 bytes: (1b) "
XmbLookupString gives 1 bytes: (1b) "
XFilterEvent returns: False

重点信息在于按下的Caps键的keycode,记录下来。同理,记录下Esc的keycode.

接下来只需要执行xmodmap -e 'clear Lock' -e 'keycode 66 = Escape' -e 'keycode 9 = Caps_Lock'即可。

ps : 可以使用xmodmap -pke来查看所有”keycode = key”的信息。

如果使用xmodmap来改变映射,在看Youtube视频的时候还是需要按下键盘上的Esc键才能退出。

setxkbmap - 不是很推荐

使用xmodmap改变映射会出现一个问题有点繁琐,而且重启就没了.

而虽然我们也可以用setxkbmap -option caps:swapescape来交换两者(caps & escape),但是一样的,重启就没了。

在终端中输入setxkbmap -option caps:swapescape即可交换(只能在本次连接内生效),我试过将该命令放在~/.profilecrontab~/.zshrc中,没有一个生效的,每次重启还是需要手动进行修改。

我的推荐

实际上,我更加推荐使用Caps作为Esc的方法,同时也推荐使用系统的键盘映射工具进行修改,一劳永逸,即使重启修改也依然存在。

  • Post title:Vim 映射Esc位置的方案
  • Post author:QBug
  • Create time:2021-07-06 22:50:47
  • Post link:https://q-bug4.github.io//articles/2021/07/06/1625583047644.html
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.