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
Vim:重新映射Shift Cmd Opt Ctrl以退出_Vim - Fatal编程技术网

Vim:重新映射Shift Cmd Opt Ctrl以退出

Vim:重新映射Shift Cmd Opt Ctrl以退出,vim,Vim,似乎Steve Losh一直在努力,简言之,这让我将Caps Lock重新映射到F19,并在系统级别将F19重新映射到Shift命令Ctrl-Alt,从而为我自己的键盘快捷键提供了一个完整的名称空间 问题是我喜欢在Vim中使用Caps Lock作为我的逃生钥匙。 我尝试了:map,但在寻找资源时,点击caps lock没有任何作用。我猜这是因为Vim希望用修饰符按下一个实际的键 我的问题是:有可能让Vim读取Shift Cmd Ctrl Alt作为转义吗?没有,您不能映射四个修饰符。连三个都没有

似乎Steve Losh一直在努力,简言之,这让我将Caps Lock重新映射到F19,并在系统级别将F19重新映射到Shift命令Ctrl-Alt,从而为我自己的键盘快捷键提供了一个完整的名称空间

问题是我喜欢在Vim中使用Caps Lock作为我的逃生钥匙。 我尝试了
:map
,但在寻找资源时,点击caps lock没有任何作用。我猜这是因为Vim希望用修饰符按下一个实际的键


我的问题是:有可能让Vim读取Shift Cmd Ctrl Alt作为转义吗?

没有,您不能映射四个修饰符。连三个都没有,连两个都没有。而且,嗯……一个也没有

“修饰符”之所以被称为“修饰符”是因为:它们与普通键一起使用来“修改”它们的含义。Shift键、Alt键、Cmd键和Ctrl键本身不做任何事情,Vim也不做任何事情,只是在您按下它们时等待进一步的按键

此外,Vim的输入机制有点“老派”,很可能是为了在多个平台上保持一致。它不会用普通键注册多个修改器。这意味着,如果终端没有吃掉它们(它确实吃了),您只能执行
。Alt键实际上不是一个有效的解决方案,因为有多少终端仿真器处理它,Cmd键仅适用于Mac,并且只适用于MacVim


在这一点上,如果您准备将四个键组合在一起,以模拟只有一个键的功能(这本身就相当愚蠢),那么您可以简单地使用
,这在任何地方都适用。你的左手会感谢你的。

我原来的问题是一个问题

你想做X,你认为Y是最好的方法。你问的不是X,而是Y

我想让Vim将Caps Lock理解为Esc(同时仍然保持其他疯狂的系统级修改),所以我询问了Vim没有的功能

事实证明,虽然上面提供的答案很好,切中要害,而且信息丰富,但我只是不喜欢别人告诉我“不”,我在错误的问题空间中寻找答案

OP链接中讨论的应用程序之一,KeyRemap4MacBook,具有高度的可扩展性。文档还有很多地方需要改进,但我能够根据我最初的问题拼凑出一个解决方案。这与最初的主题“vim中的地图素材”大不相同,对此我深表歉意,但我希望将此留给子孙后代,留给一个需要它的可怜灵魂

简而言之,前一篇文章建议将此添加到KR4MB的“private.xml”文件中:

<item>
    <name>Remap Caps Lock to Hyper</name>
    <appendix>OS X doesn't have a Hyper. This maps Left Control to Control + Shift + Option + Command.</appendix>

    <identifier>caps_lock_to_hyper</identifier>

    <autogen>
        --KeyToKey--
        KeyCode::F19,

        KeyCode::COMMAND_L,
        ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L
    </autogen>
</item>

将大写锁定重新映射到Hyper
(适用于大写字母锁)

这可以改为:

<item>
  <name>Caps Lock to Hyper OR Escape</name>
  <appendix>Caps Lock should be remapped to F19 (80) in PCKBH</appendix>
  <appendix>This remaps F19 to "Hyper" aka Cmd-Shift-Ctrl-Alt...</appendix>
  <appendix>...but, when pressed alone, F19 sends only escape</appendix>
  <identifier>remap.hyper2hyper_escape</identifier>
  <autogen>
      --KeyOverlaidModifier-- 
      KeyCode::F19, 

      KeyCode::COMMAND_L,
      ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, 

      KeyCode::ESCAPE
  </autogen>
</item>

大写锁定为“超”或“转义”
盖锁应在PCKBH中重新映射到F19(80)
这将F19重新映射到“Hyper”又名Cmd-Shift-Ctrl-Alt。。。
…但是,单独按下时,F19只发送escape
remap.hyper2hyper\u转义
--KeyOverlaidModifier--
键码::F19,
KeyCode::命令,
ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL|L,
键码::转义

这告诉系统,每当单独按下Caps Lock时,实际上是Esc,但如果与任何其他键一起按下,则是F19。

不,Vim不希望出现类似情况。它无法处理任何不能由内部非常有限的字节队列格式表示的键组合。因此,您要么需要一些顶级应用程序将
转换为vim的某种转义序列(最好是转义本身),要么放弃整个想法。这不是一致性的问题,而是设计缺陷的问题:当vim创建时,Bram不认为任何人需要终端无法发送的组合。因此,内部格式为
,其中
是termcap数据库中的键,用于
等特殊键,以及
组合的原始控制字符。Termcap数据库与win32或gtk gui完全无关,但您仍然可以看到相同的字符串用于
echo“\”
。没有人能阻止它成为
F1
或任何你喜欢的东西,尽管一开始它还具有性能和可支持性优势。我读到的关于这个主题的两个邮件列表线程实际上有点超出我的理解,因为我对这个主题缺乏直接的兴趣,所以,是的,无可否认,我对那些低级细节有点模糊。然而,我所理解的是,由于设计的选择,Vim的输入系统不能真正处理这种情况。这些线索相当陈旧,所以我不敢打赌在不久的将来会在这方面取得任何进展。谢谢你们提供更多的背景资料。谢谢你们两位在这里提供的信息。维姆的兔子洞数不胜数,让我惊叹不已。太棒了!我在某个地方读了一篇关于这个的博文,但现在我找不到了。你在别处写过这件事吗?@jrhorn424没有,反正还没有。对不起!:)@jrhorn424这可能是你在想的博客文章:现在我只需要找到一种方法在windows中实现这一点。@BrandonPugh谢谢!在Windows上进行按键切换的常用方法是自动热键。我不确定它是否适用于如此复杂的东西,但它可能值得一看。这个答案让我意识到我也在找错地方。我在Mac电脑上使用Karibiner元素映射我的“超”键。在他们的“从互联网导入更多规则”页面上有一个用户创建的脚本,它完美地解决了这个问题。