一种同时适用于Vim和Emacs的改键方案

[TOC]

方案

Vimers的主流改键方案是互换Esc和Caps Lock,因为Vim里面Esc很常用但是离得太远。

Emacsers的主流改键方案是互换Ctrl和Caps Lock,因为Emacs里面Ctrl是最常用的。

我会同时用到Vim和Emacs,现在的状态是大部分时间用Vim,Emacs的Verilog-mode离不开。这两种改键显然只能取其一,所以在这个方面还是要考虑一下。

我觉得这两种方案其实都不是很好,因为我感觉用小拇指按在Caps Lock上面其实感觉不好,Vim的改键方案还好,用Emacs的话需要长按Ctrl的时候再有q、a、z的时候就有不适感了。

我在网上找了很久,机缘巧合之下发现左边的Ctrl和Alt键和右边的其实是不同的编码的键,然后我想到的方案是交换右边的Ctrl键和Alt键,这样做我感觉可以比较完美的同时实现Vimers和Emacsers的改键效果,而且好处还不止这些,原因是:

  1. 右边的Alt键的位置是刚好是在右手大拇指下方,有需要的话可以用右手大拇指长按着。一般我们打字是用两只手的非大拇指打字的,这样改键的话就完全不会影响到打字手。这个在Vim和Emacs之外的地方也是适用的,回想一下以前用键盘删除剪切复制的时候是用左手小拇指按住左边的Ctrl键,然后再点xcv,现在这种键位是比以前要快了。
  2. Emacsers需要的是不费力的获得长按Ctrl键的效果,这个方案是明显符合的,而且比Caps Lock更合理,因为明显更省力。
  3. Vimers的需求是可以轻松的点击到Esc,这个操作往往是单独点击不用长按的,改成Caps Lock的合理性其实比Emacs的要好一点。对Vimers来讲,改成这个其实也是一个很好的方案,因为可以用Ctrl+c来取代Esc。其实说起来Ctrl+c的定义是打断当前操作,和Esc的定义还是稍有不同的(这个在列编辑的时候就体现出来了,要插入整列字符的话是要用Ecs不能用Ctrl+c),真正能替代Esc的是Ctrl+[。 但是Ctrl+c基本是可以完成99%的Esc的功能。
  4. 其实说起来,Caps Lock还是偶尔会用到的键,要是改了别人用你的电脑的话就会不适应。而右侧的Alt和Ctrl的话基本是没人能用到的,我觉得每个人的电脑都这么改键的话都不会有丝毫影响。

操作

要改的其实有两种:一种是直接改注册表,另外一种是用一些脚本比如AutoHotKey实现只在Vim\Emacs里面改动。因为这种方案没什么后患,而且AutoHotKey什么的我也不会,这个就直接讲该注册表的。

改注册表的其实也可以用那种小软件改,如果嫌烦不想去下那种小软件可以按这里的操作:

  1. 打开注册表编辑器win+r,里面输入regedit
  2. 找到路径HKEY_LOCAL_MACHINE-->SYSTEM-->CurrentControlSet-->Control-->Keyboard Layout
  3. 新建名为Scancode Map的二进制项,修改值为:0000000000000000030000001de038e038e01de000000000

这样就完工了,这个需要注销或重启才能生效。


贴个图好了,免的搞错:

Image Title