如何将 LightTable 中 Vim 的默认 ESC 键改为退出插入模式?

4
我发布这个问题主要是为了提供我得出的答案(因为我在网上找不到任何东西,也没有看到有人问如何做到这一点),希望能节省未来LightTable vim用户一些时间。但我也想听听其他人对这个问题的解决方案或vim LightTable的问题的看法。
我爱上了LightTable,但至少需要最小的vim支持才能考虑使用IDE。 LightTable具备这个功能。但目前来说,你基本上只能使用默认的vim选项,并且很难改变配置。我非常想知道在这个领域的未来计划是什么(你在那里吗Chris?)即使高度受限制,在本地配置目录中公开.vimrc将会简单极了,但我意识到这还处于早期开发阶段,并且在很大程度上取决于CodeMirror能提供什么。
有一件事我无法容忍,那就是必须将我的小拇指向上和向左移动以按ESC键退出插入模式。这太慢了,需要您的左手离开家庭行,这从来不是好事。我通常在vim中处理这个问题的方法是在.vimrc中将ii映射到退出插入模式。另一种默认选择是按CTRL-[。那更好,但对我来说,那是进入emacs和弦领地的行为,因某种原因,我的右小拇指几乎总是会打错任一括号键。
这有点像黑客,但它是一个可以容忍的解决方法,直到LightTable / CodeMirror提供更好的vim支持。我只在最新的LightTable(0.4.9)上进行了测试,因此我不确定它适用于早期版本(您可能不应该使用这些版本),或者以后会出现的版本。
有一个名为“Vim:toggle vim mode”的命令选项。这会在编辑器(或instarepl)中打开和关闭vim。您可以通过“Settings:Change key bindings / shortcuts”命令将此命令绑定到热键组合。这将打开一个新的选项卡,在左侧输入新的键绑定。当前的键绑定显示在右侧。
我在“:editor.keys.normal”的上下文中使用SHIFT-i。(这意味着我不能直接在文本中使用大写“I”,但实际上在程序编辑中 - 特别是Clojure中 - 这几乎不会引起问题,如果确实有问题,您可以只需使用小写 i,然后回退并替换字符即可)。这有效地使“II”(SHIFT-i SHIFT-i)成为退出插入模式的手段。第一个SHIFT-i退出vim并将您放回普通的所见即所得编辑器中。下一个SHIFT-i将您带回vim,但处于命令模式。哇!您已从vim插入模式转换为vim命令模式。
希望这能帮助其他LightTable vim用户。
2个回答

4
更新:我认为最新的LightTable版本支持此功能。如果在用户行为文件(用户行为通过命令面板(ctrl-space)可访问)中添加以下内容有效,请有人评论一下:
[:editor :lt.plugins.vim/set-options {"enableInsertModeEscKeys" true, 
                                      "insertModeEscKeys" "jk", 
                                      "insertModeEscKeysTimeout" 200}]

旧答案:

最新的LT插件源代码支持此功能,但尚未发布。

要轻松安装它,请执行以下操作:

  1. 打开您的LT插件文件夹,例如在OSX上是 ~/Library/Application Support/LightTable/plugins/Vim/
  2. (可选) 在其他地方保存Vim(插件)文件夹的备份
  3. 删除Vim文件夹
  4. 下载https://github.com/LightTable/Vim/archive/master.zip
  5. 解压它,将解压后的文件夹重命名为Vim,并将其移动/复制到您的LT插件文件夹中(即替换您刚刚删除的官方Vim插件)
  6. 在您的user.behaviors文件的:editor部分中添加以下选项: (:lt.plugins.vim/set-options {"enableInsertModeEscKeys" true, "insertModeEscKeys" "jk" "insertModeEscKeysTimeout" 200})
  7. 重新启动LT,您应该能够使用jk(或您在insertModeEscKeys中设置的任何键)退出插入模式

直到今天,LightTable一直是半不可用的...现在所有问题都已经解决了!!它甚至似乎可以与jj一起使用!非常感谢 :) - Cotten
很好,听到这个消息很高兴!插件现在正在使用来自CodeMirror的更新版本vim.js,我的设置Vim选项的补丁已经被接受,但他们还没有正式发布插件更新,我已经更新了答案以反映这一点。 - JobJob
出于性能原因,请小心使用此功能。只有 j、k、i 可以一起用来退出插入模式。如果您想要不同的按键,您必须在这里添加它们:vim.js#L4760 例如,我使用 uh(dvorak)。我花了一段时间才弄清楚这一点。 - noob

3
CodeMirror的API设计得非常简单,添加按键绑定并不复杂,但是要支持配置文件和扩展默认按键以涵盖更多Vim功能的一部分,对我来说并不是那么容易的任务。而且,考虑到LT甚至没有搜索/替换功能,这可能是他们待办事项清单中最不重要的事情之一。
此外,CodeMirror是第三方“库”,LT团队可能没有太多影响力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接