zoukankan      html  css  js  c++  java
  • Capslock and Esc

    将Caps Lock转换成Esc(windows and linux)

    1. linux 下将Caps Lock 转换成Esc

    作为一个vimer,Caps Lock对我(还有其他很多人)来说根本就是多余的,而且在键盘中的位置根本不合理,一不小心就按到了Caps Lock,然后就出错了。Esc又是vim下使用最为频繁的按键,将Caps Lock替换成Esc真是再好不过了,而且不用担心按ESC的时候按到了该死的F1。

    可能有人会问,这样对于连续的大写不是就不方便了吗?我们可以先用小写,然后选中该段文中,按U,就变成大写了。对于在vim中的大写,这里还有一个小技巧推荐给大家:

    inoremap <C-u><esc>gUiwea  

    将上面这条语句是放在.vimrc文件里的,它的作用就是在编辑状态下,按ctrl+u,将你刚刚输入的那个单词变成大写。谁用谁知道。对一个用vim 作为主要编辑器的人,有了上面两条技巧以后, Caps Lock 就是多余的了。

    在linux将Caps Lock转换成Esc非常简单,只要在.profile文件加入下面这条语句即可。

    xmodmap -e 'clear Lock'-e 'keycode 0x42 = Escape'

    当你不需要的时候,只要将这条语句删除,重启即可。

    2. windows下将Caps Lock 转换成Esc

    在linux下把Caps Lock当Esc习惯以后,到windows下自然也希望将Caps Lock转换成Esc,如果用搜索引擎搜"windows Esc Caps lock",很轻松的就找到了下面的答案:

    1. 新建文本文档,重命名为capslock2esc.reg
    2. 输入如下内容

      [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01,00,3a,00,00,00,00,00
    3. 然后保存,并且双击写入注册表,重新登录计算机

    这个答案有个问题就是交换了Caps Lock与Esc ,当我向我们组的同事请教问题的时候,他需要在我的电脑上操作,按Esc确是Caps Lock 显然让他很不习惯,所以,我又搜了一下,如何将Caps Lock转换成Esc ,而不是交换它们。我找到了这篇文章,讲得不错,可惜有错误。

    为了完整,把这篇文章转过来了,并修正了错误。方法还是和上面的一样,不过多了解析。

    下面分析"Scancode Map"后面一长串数字, 为方便分析,拆分为每8位一行,并加上行号,结果如下:

    1.00,00,00,00,2.00,00,00,00,3.03,00,00,00,4.3a,00,01,00,5.01,00,3a,00,6.00,00,00,00

    头两行和最后一行,是固定的,都是8个0。
    第3行,表示共更改了多少个按键,本例为3个,怎么算的?从第4行开始,到最末尾行(虽然严格来说末行不算),每行算1个,4、5、6行,刚好3个
    第4行,前后各4位,分别代表某个按键。本例为将0100的按键映射为3a00。3a00代表CapsLock键,0100代表Esc键
    第5行,同理,3a00的按键映射为0100,即映CapsLock射为Esc
    第6行,已经讲了,末行,固定8个0。如果需要增加更多的映射,可以在此行之上,不断加类似4、5行格式的。当然,最后的结果,还是要将各行合为一行的。
    每行的4个数字,两个数字一组,代表一个按键,在映射时,他们的关系类似与c语言的char *strcpy(char *strDest, const char *strSource)函数,把后面一组的意义赋给前一组。

    综上所述,将Caps Lock映射成Esc,而不是交换Esc与Caps Lock的代码如下:

    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00

    叫上面代码保存到capslock2esc.reg 文件中,双击运行,重启电脑即可。

    还原按键时,只需要在注册表的路径([HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout])下,删除Scancode Map键即可。

    附录

    部分按键映射对照表。

    Escape0100Tab0F00CapsLock3A00LeftAlt3800LeftCtrl1D00LeftShift2A00LeftWindows5B    E0
    RightAlt38    E0
    RightCtrl1D    E0
    RightShift3600RightWindows5C    E0
    Backspace0E00Delete53    E0
    Enter1C00Space3900Insert52    E0
    HOME                  47    E0
    End4F    E0
    NumLock4500PageDown51    E0
    PageUp49    E0
    ScrollLock4600

    还有一个特殊的值 —— 00 00,表示啥也不干,如果要将某个按键禁用,只需映射为00 00。

  • 相关阅读:
    MySQL实战45讲
    mysql查看binlog日志
    Nginx核心知识100讲
    RabbitMQ消息为什么变成数字了呢?
    Spring core中一些API
    [LeetCode] 719. Find K-th Smallest Pair Distance 找第K小的数对儿距离
    Github Upload Large File 上传超大文件
    [LeetCode] Special Binary String 特殊的二进制字符串
    [LeetCode] Range Module 范围模块
    [LeetCode] Find Anagram Mappings 寻找异构映射
  • 原文地址:https://www.cnblogs.com/liubaocheng999/p/3461406.html
Copyright © 2011-2022 走看看