Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Map 如何在VIM中映射CAPS LOCK key?_Map_Vim_Capslock - Fatal编程技术网

Map 如何在VIM中映射CAPS LOCK key?

Map 如何在VIM中映射CAPS LOCK key?,map,vim,capslock,Map,Vim,Capslock,我在Windows下使用GVIM。 要将CAPSLOCK映射到Ctrl+^ 有办法吗 顺便说一句,我在网上看到了很多关于如何使用registry hack交换CAP和Esc的示例,但是没有一个使用VIM map命令,而是使用外部工具和注册表更改。我认为你做不到。 我相信CAPS-LOCK可能在vim看到它之前就被操作系统翻译了。 因此,您需要在操作系统级别进行黑客攻击,就像您已经看到的注册表黑客一样 编辑:自动热键看起来可以用来编辑。这样一来,第三方应用程序在操作系统级别进行黑客攻击,而你只是挂

我在Windows下使用GVIM。 要将CAPSLOCK映射到Ctrl+^

有办法吗

顺便说一句,我在网上看到了很多关于如何使用registry hack交换CAP和Esc的示例,但是没有一个使用VIM map命令,而是使用外部工具和注册表更改。

我认为你做不到。 我相信CAPS-LOCK可能在vim看到它之前就被操作系统翻译了。 因此,您需要在操作系统级别进行黑客攻击,就像您已经看到的注册表黑客一样


编辑:自动热键看起来可以用来编辑。这样一来,第三方应用程序在操作系统级别进行黑客攻击,而你只是挂接该应用程序。

Capslock(以及Control和Shift等)是一个修改键,这意味着它与另一个普通键一起使用,以修改该键的含义。如果操作系统不将修改键传递给应用程序,除非同时按下了普通键,例如,应用程序将看不到按下
CTRL
,但windows下会看到
CTRL-C

?使用。这不是vim映射,但正如其他人所说的,您无法映射它。我使用AHK将CAPSLOCK映射到CTRL。

Linux?对于X,使用xmodmap来更改键映射,例如

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

将Esc映射到CapsLock键。谷歌搜索更多示例。

由于Linux和Windows有一个解决方案(自动热键),我建议使用Mac在任何地方重新映射CapsLock。

如果您的目的只是避免在Vim之外工作,您可以在您的.vimrc中添加以下行:

au VimEnter * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
当您进入Vim时,第一行将escape映射到caps lock键,当您退出时,第二行将正常功能返回到caps lock


这需要安装了xorg xmodmap包的Linux。

对于Mac OS,您可以在“系统首选项”中重新映射系统范围内的“caps lock”键

遵循以下路径:

系统首选项>键盘>修改键


然后单击“caps lock”旁边的下拉框并选择“^Control”。

在Linux系统中,这可以通过xmodmap完成

将其保存在主文件夹的文本文件中

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
使用.capstoescswitc这样的名称保存此文件

然后通过终端执行该文件

xmodmap ~/.capstoescswitc 
如果您想使用它,只需切换脚本文件中的关键变量

有关更多信息,请参阅此解决方案,该解决方案不会在vim之外打破
Caps Lock
窗户
  • 安装自动热键
  • 运行自动热键脚本:

  • Ubuntu 运行以下命令:

    wget -O - https://raw.githubusercontent.com/grabantot/scripts/master/install/install_caps_to_esc.sh | bash
    
    或手动执行以下操作:

  • sudo apt get install xdoool xbindkeys
    。我们还将使用
    xprop
    xset
    (默认情况下应安装)
  • 创建一个
    ~/caps\u to_esc.sh
    脚本:
  • 将新绑定添加到
    ~/.xbindkeysrc
  • kill所有xbindkeys&&xbindkeys
  • 工作原理:
  • xbindkeys
    将在按下Caps\u Lock时检测并调用
    Caps\u to\u esc.sh
    脚本
  • 在脚本中,通过
    xprop
  • 检查wm_类是否对我们感兴趣(gnome终端、vscode、gvim、chrome),如果不感兴趣则退出
  • 通过
    xdool
  • 通过
    xset
    检查Caps Lock是否开启,如果开启,则通过
    xdool
  • xbindkeys
    将检测我们发送的Caps\u锁,但我们忽略它

  • 我想这样做的原因之一是创建一个软capslock,就像其他人提到的,可能是为了避免在正常模式下保持capslock打开。
    我用这个插件在退出插入模式时关闭了capslock,看起来还可以

    在mac上,也可以使用Karabiner()

    $brew桶安装卡箍元件


    安装后,您可以在“简单修改”选项卡中将capslock键映射到esc键。需要注意的是,这是系统范围内的,这意味着您到处都会丢失capslock密钥。IMO需要capslock。

    对于像我这样的普通WINDOWS用户来说,从2020年起,一个有效的例子就是使用

    当前正在使用此单行脚本:

    Capslock::Esc
    
    运行它,你的问题就解决了。希望有帮助。:)

    @rsoren的答案是有效的。但问题是,如果打开了多个缓冲区,从一个缓冲区退出,也会恢复所有其他缓冲区的映射。用BufEnter和Buflifeve代替Viminer和Vimleve,我成功了

    au BufEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
    au BufLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
    
    在Windows上重新映射
    CAPSLOCK
    ESC
    CTRL
    如果要将
    CAPSLOCK
    重新映射到两者

  • ESC
    (单独按下时)
  • CTRL
    (用其他键按下时) 你可以用伊利林
  • 此操作不需要管理员权限,
    ESC
    CTRL
    仍按预期工作

    我用它来享受方便的
    CTRL+anything
    按下而不伤害我的小指,并在Vim中切换模式,我在MobaXterm中通过ssh使用这些模式。对于安装,只需遵循以下步骤

    在Linux上重新映射
    CAPSLOCK
    ESC
    CTRL
    要在Linux上执行同样的操作,可以使用。要在Ubuntu上安装它,请使用:

    sudo apt install xcape
    
    对于实际映射,请执行以下操作:

    setxkbmap -option ctrl:nocaps
    xcape -e 'Control_L=Escape'
    
    第一个命令是将
    CAPSLOCK
    映射到
    ESC
    ,而第二个命令负责使用其他键按下
    CTRL


    要使此功能在X会话中永久工作,您可以将其添加到
    ~/.xprofile

    我自己完成了此问题的答案,但我在寻找稍微不同的内容:

  • 我正在使用Linux
  • 即使在Vim之外,我也很乐意更改CAPS(我几乎总是误按,并且我可以随时将其保留在Esc按钮上,以实现我正在使用的目标)
  • 我希望尽可能使用最常用的软件,无需进一步安装
  • 我更愿意这样做,甚至不需要进一步冗长的脚本
    au BufEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
    au BufLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
    
    sudo apt install xcape
    
    setxkbmap -option ctrl:nocaps
    xcape -e 'Control_L=Escape'
    
    ! ~/.xmodmap
    clear lock
    keycode 66 = Escape
    keycode 9 = Caps_Lock
    add lock = Caps_Lock
    
    clear control
    add control = Control_L Control_R Escape