有没有办法让IdeaVIM尊重我的.vimrc文件的映射?

Han*_*Gay 63 vim ideavim

我最近已经进入了vim(再次),我现在在我的.vimrc文件中有大量的自定义.我认识到,并非一切都在那里才有意义在IDEA插件的情况下,但我真的很喜欢它,如果事情像重新映射jjEsc被拾起和荣幸.有没有办法做到这一点?无需在IDEA的键盘映射中手动调整所有内容,即.

谢谢.

jby*_*ler 160

更新的答案:IdeaVim版本0.35(2014-05-15发布)从中读取设置和键绑定~/.ideavimrc.source ~/.vimrc如果要包含映射,可以放入该文件~/.vimrc.

0.33和0.34 ~/.vimrc直接读取.

0.33(2014-04-28发布)是第一个实现VIM-288的版本,包括映射jj到的ESC.它工作得很好,IDEA首选项中有一个新的Vim Emulation部分列出了~/.vimrc映射和Intellij映射之间的所有冲突,并允许您通过将键分配给IDEA或IdeaVim来解决冲突.这是twitter上的发布公告.

(注意:我不是作者,只是一个满意的用户.)

  • 这应该是现在接受的答案! (10认同)

ars*_*vis 24

更新:是的!见下面的答案.

简答:不.

我一直在尝试这样做,特别是因为我已经.vimrc习惯了多年来相当复杂.

无论如何,有一种解决方法(有点).IdeaVim设置存储在主文件夹内vim.xml.IntelliJIdea10/config/keymaps文件夹中调用的文件中(C:\Users\<user_name>在Windows上).您可以编辑XML以添加所需的内容.例如,我添加了以下行来通过命中F2而不是键入来保存文件:w!:

<action id="SaveAll">
<keyboard-shortcut first-keystroke="F2"/>
</action>
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到我们如何添加函数或vim设置(这是我通常使用的.vimrc).

PS这可以解释为什么不使用.vimrc(强调我的):

对于好奇的人来说,插件的编写时没有任何VIM源代码的引用(正则表达式处理除外).我基本上使用优秀的VIM文档和VIM本身作为参考来验证正确的行为.
资料来源:http://ideavim.sourceforge.net/

  • @HankGay JetBrains的错误跟踪器目前[问题](http://youtrack.jetbrains.com/issue/VIM-288)正好解决了这个问题.它已经成为主要优先事项,但无论如何都要投票! (2认同)

gni*_*nil 5

它看起来是IdeaVIM问题#VIM-288(编辑,更新:参见jbyler的回答,VIM-288现已修复)将解决您的问题.我也在寻找一种方法来使用'jk'退出插入模式而不是使用Escape键.我不是IntelliJ插件的专家,但我设法修改了IdeaVIM源代码,以便'jk'快捷方式在那里被硬编码.我所要做的就是重新部署插件并使用它而不是官方版本.我是这样做的:

  1. 抓住IdeaVIM源代码.

    https://github.com/JetBrains/ideavim

  2. 您可以按照该页面上"开发"下的说明设置插件的开发环境.

  3. 现在您的IdeaVIM项目全部设置完毕,打开此文件:com.maddyhome.idea.vim.key.RegisterActions.java

  4. 看来这个文件具有所有Visual/Insert/Normal模式命令及其相应的键绑定.对于我更改"退出插入模式"键绑定的示例,请查找"VimInsertExitMode".您需要为此新快捷方式的代码块添加一行.

  5. 以下是我编辑代码后的代码部分:

    parser.registerAction(KeyParser.MAPPING_INSERT, "VimInsertExitMode", Command.Type.INSERT, new Shortcut[]{
        new Shortcut(KeyStroke.getKeyStroke('[', KeyEvent.CTRL_MASK)),
        new Shortcut(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK)),
        new Shortcut(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)),
        new Shortcut("jk"),
        new Shortcut(new KeyStroke[]{KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SLASH, KeyEvent.CTRL_MASK),
            KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK)})
    });

  6. 现在部署项目(制作一个.jar)并将其添加到你的插件文件夹中; 我按照这些说明参考:

    http://confluence.jetbrains.com/display/IDEADEV/Getting+Started+with+Plugin+Development#GettingStartedwithPluginDevelopment-anchor5

  7. 您可能需要从keymaps文件夹中保存Vim.xml文件,我不确定.我删除了我的,然后当我重新启动IntelliJ时它被重新制作.

  8. 给它一个旋转!现在应该可以使用'jk'作为退出插入模式快捷键!


Ala*_*eng 5

根据插件存储库(https://github.com/JetBrains/ideavim)中的描述,您可以通过创建文件“ 〜/ .ideavimrc ”及其内容来实现此目的

source ~/.vimrc
Run Code Online (Sandbox Code Playgroud)