更改系统键盘键值

  最近在使用vim的时候,经常会碰到一种情况,就是CapsLk按键经常会误操作,这在普通模式下,对缓存界面的影响非常大。所以,今天就在网上找了下方法,想办法把这个按键的作用跟键盘上的其他按键调换下。

  现在记下具体的方法

  ubuntu下

  实现这个方法,我们其实需要借助一个配置文件

 remove Lock = Caps_Lock remove

Control = Control_R keysym

Control_R = Caps_Lock keysym

Caps_Lock = Control_R

add Lock = Caps_Lock add

Control = Control_R

  我们只需要在当前的用户目录下创建一个名为.Xmodmap的配置文件,然后把上面的内容复制到这个文件里面,然后重启电脑就行了。

   对于上面的内容其实很容易理解,就是:

  首先把你想要替换的按键分别移除,使用remove命令

   然后就是重新定义这两个按键的功能

  最后把这两个功能重新添加,使用命令add

现在我们总结下上面的知识点:

1.首先我们可以通过xmodmap -help来查看关于xmodmap的使用方法。结果如下

    -display host:dpy            X server to use
    -verbose, -quiet             turn logging on or off
    -n                           don't execute changes, just show like make
    -e expression                execute string
    -pm                          print modifier map
    -pk                          print keymap table
    -pke                         print keymap table as expressions
    -pp                          print pointer map
    -help                        print this usage message
    -grammar                     print out short help on allowable input
    -                            read standard input

上面都是一些命令,感兴趣的话,可以试试看,主要就是用来显示键盘的映射等。然后我们执行xmodmap -grammar,结果如下

pointer = default              reset pointer buttons to default
pointer = NUMBER ...           set pointer button codes
//这两个好像是这只鼠标的。具体的不大清除
keycode NUMBER = [KEYSYM ...]  map keycode to given keysyms
//这个是给一个键值赋予功能的
keysym KEYSYM = [KEYSYM ...]   look up keysym and do a keycode operation
//这个是更新一个功能的内容
clear MODIFIER                 remove all keys for this modifier
//消除modifier,后面只能跟着八个固定的数值,应该是系统定义好的,跟add remove 操作对象一样
add MODIFIER = KEYSYM ...      add the keysyms to the modifier
//增加一个modifier
remove MODIFIER = KEYSYM ...   remove the keysyms from the modifier
移除所有的modifier关联

帮助信息里面还包含有下面这段

where NUMBER is a decimal, octal, or hex constant; KEYSYM is a valid
Key Symbol name; and MODIFIER is one of the eight modifier names:  Shift,
    Lock, Control, Mod1, Mod2, Mod3, Mod4, or Mod5.  Lines beginning with
    an exclamation mark (!) are taken as comments.  Case is significant except
    for MODIFIER names.

    Keysyms on the left hand side of the = sign are looked up before any changes
    are made; keysyms on the right are looked up after all of those on the left
    have been resolved.  This makes it possible to swap modifier keys.

上面这段话的大意,就是说上面提到的keycode clear等配置命令的参数意义。大概就是,NUMBER是一个键值,KEYSYM-是按键的一个符号名称。系统应该就是通过>这个值能给按键分配功能的。现在最不懂的就是modifier的作用了。然后就是说的,keysyms这个赋值的时候,他们生效有个什么顺序,可以支持两个交换复制。

2.如果我们执行xmodmap -pke命令
我们可以看到如下的信息(部分)

keycode   8 =
keycode   9 = Caps_Lock NoSymbol Caps_Lock
keycode  10 = 1 exclam 1 exclam
keycode  11 = 2 at 2 at
keycode  12 = 3 numbersign 3 numbersign
keycode  13 = 4 dollar 4 dollar
keycode  14 = 5 percent 5 percent
keycode  15 = 6 asciicircum 6 asciicircum


这上面信息,主要就是包括当前按键的键值以及对应的功能。
然后我们就可以使用如下的方法进行更改

clear Lock
keycode 66 = Escape
keycode 9 = Caps_Lock
add Lock = Caps_Lock


其实这个方法跟上面的方式是一样的,只不过,这时候我们没有更改键值符号,而是直接更改了按键的定义符号,这样其实也是更直接的更改了按键的功能。
clear lock-这个命令是用来清空lock的映射关系,似乎只要更改了lock的键值,这个命令就必须执行。自己验证的结果是,如果clear add这两条命令没有增加的>话,CapsLk键,会同时执行Esc跟CapsLk两个键值。我现在是不是能这样理解了。当我们给一个按键,赋予功能的时候,如果这个功能是modifier。那么这个按键就可以同时保持两个功能,而当我们执行了clear命令,其实是把这个所有跟modifier关联的按键都给清除了,所以就相当于去除了lock功能。不知道这样理解的对不对,先这样吧

win7下面的方法

1.打开注册表

win+r->regedit->确定

2.选择注册标

HKEY_LOCAL_MACHINE -> System -> CurrentControlSet -> Control -> KeyBoard Layout

3.添加新的键值注册表

右键点击Keyboard Layout->新建->二进制值->重命名为Scancode Map

4.修改注册表内容

右键点击 Scancode Map -> 修改。

修改内容如下

0000  00 00 00 00 00 00 00 00
0008  03 00 00 00 01 00 3a 00
0010  3a 00 01 00 00 00 00 00  
0018

然后重启你的电脑就好了

上面的几行内容

1.每一行的前四位数字,是系统自动生成的。后8*2 位是自己手动输入的,输满以后自动换行

2.第一行跟第四行好像是默认的

3.第二行03 00 00 00 这个具体指什么不明白,不知道是不是指接下来的行号数。

4.第二行后4*2 表示是键值映射。01 00 表示Esc 3a 00 表示Caps Lock。他的意思就是把Esc 映射为Caps Lock

5.第三行前4*2也是键值映射

原文地址:https://www.cnblogs.com/zhangshuli-1989/p/hq_15_11_6_0_30.html