Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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
在Windows中将CAPS LOCK用作Vim模式切换键_Windows_Vim_Keyboard - Fatal编程技术网

在Windows中将CAPS LOCK用作Vim模式切换键

在Windows中将CAPS LOCK用作Vim模式切换键,windows,vim,keyboard,Windows,Vim,Keyboard,很多人都知道如何使用或控制,但我想使用Caps Lock键在插入模式和正常模式之间切换,我还没有找到任何解决方法 (然后我想让ShiftCaps-Lock做一个单独使用Caps-Lock时通常会做的事情,比如在需要Caps-Lock的时候,比如在键入长常量名称时。但这确实是一个单独的问题,如果有办法完成第一部分的话,我将在后面讨论。所有这些都很可能是不可能的。) 这些天我主要在工作中使用Windows,所以这是我目前最关心的。(由于这可能涉及到某种仅适用于Windows的黑客行为,我将针对我也使

很多人都知道如何使用或控制,但我想使用Caps Lock键在插入模式和正常模式之间切换,我还没有找到任何解决方法

(然后我想让ShiftCaps-Lock做一个单独使用Caps-Lock时通常会做的事情,比如在需要Caps-Lock的时候,比如在键入长常量名称时。但这确实是一个单独的问题,如果有办法完成第一部分的话,我将在后面讨论。所有这些都很可能是不可能的。)


这些天我主要在工作中使用Windows,所以这是我目前最关心的。(由于这可能涉及到某种仅适用于Windows的黑客行为,我将针对我也使用的OS X提出一个单独的问题。)

您的请求很不寻常,我建议不要偏离默认模式切换那么多,但您可以尝试以下方法:

  • 首先,使用特定于操作系统的方法(如您提到的链接中所述),您需要将Caps Lock密钥重新映射到另一个(未使用的,例如F12)密钥,因为特殊Caps Lock无法在Vim中重新映射
  • 然后,为更改模式的重新映射键定义两个Vim映射
  • 下面是一个简单的例子:

    :nnoremap <F12> a
    :inoremap <F12> <Esc>
    
    :nnoremap a
    :重新映射
    

    然后,您可以使用Caps Lock键(重新映射到F12)在插入和命令模式之间切换。

    我认为您无法使用Vim以本机方式执行此操作,但看起来您可能可以使用AutoHotKey执行此操作。我不是自动热键专家,但以下是我总结出来的:

    n=0
    Capslock::
    On := 1
    If On=True {
    Send i
    On := False
    } Else {
    Send :
    On := True
    }
    Return
    
    从这里的例子中可以看出:

    此脚本使用Capslock键为热键提供两种不同的输出。 我不确定您是否需要使用+;代替:在第二部分切换到命令模式

    n=0
    Capslock::
    On := 1
    If On=True {
    Send i
    On := False
    } Else {
    Send :
    On := True
    }
    Return
    
    上述脚本未经测试,但应在发送i(用于插入)或:(用于插入命令模式)之间切换。不幸的是,这无法跟踪VIM的当前状态。 为此,您必须学习我的AHK脚本(如何使用变量,因此在insert中按“?”、“/”、“esc”、“:”等键时,它将知道如何使用变量在AHK中存储VIM模式以及发送实际代码)

    参考资料:

    对于您的第二部分,它看起来可以通过以下方式完成:

    不完全确定,但您已对VIM进行注册表编辑,以正确识别Capslock更改:


    你真的是指“命令模式”吗?就像你按下
    时所说的“转到命令行”一样,还是指“正常模式”?我想我指的是“正常模式”(这是一个非常奇怪的名称,考虑到在这种模式下,按键发出命令,这对于键盘上的按键来说并不完全正常,尤其是在文本编辑器中)。修正问题使其更清楚。“正常”的意思是“这是Vim通常处于的模式。”“命令模式”的意思非常具体,与正常模式有很大不同。(FWIW我使用CapsLock作为转义,但这对我来说很容易,因为我的键盘支持在硬件级别上重新映射。)是的,我知道,但我仍然认为这是一个非常违反直觉的名称。你是否建议反对它,因为(1)你认为它会导致糟糕的可用性,或者(2)因为用Vim很难做到这一点?@iconoclast:我没有被要求,但我建议不要这样做,因为用一种方式进入插入模式并不是Vim的惯用方式
    i
    a
    cc
    。。。进入插入模式的方法有很多种,但没有一种是特别常用的。当你习惯了映射方案后,你会在没有它的系统上挣扎(而且大写锁定重新映射很难拖到新的或外来的系统上)。此外,您将关闭在其他应用程序(如Firefox的Pentadactyl)中使用vi模式的大门,或者必须在每个应用程序中重新实现您的映射(可能会与其中较少的重新映射功能发生冲突)@progo:你可能已经给出了我不这么做的唯一原因——如果实现这一点的唯一方法迫使我将大写锁定作为进入插入模式的唯一方法,那么我会同意:那太糟糕了。希望它将有可能使用所有正常的方式进入插入模式以及。。。但我还没有机会测试这个。。。不过,我并不担心必须在其他系统上使用Esc。@iconoclast:它很可能工作得很好,但与只映射Caps lock来转义相比,您几乎没有什么好处。想想看,在进入插入模式时,
    i
    a
    都比caps lock本身更容易访问。是的,自动热键是我在回答中暗示的操作系统特定方法之一。然而,我认为尝试复制复杂的Vim状态图以跟踪脚本中的当前模式注定会失败(只需考虑任意映射)。但是,该模式可以包含在Vim的
    'titlestring'
    中,然后可以通过自动热键捕获和解析窗口标题。