2011-04-07 77 views
48

我最近已经进入了vim(再次),现在我在我的.vimrc文件中有很多定制。我意识到,并不是所有内容在IDEA插件的上下文中都是有意义的,但是如果像重新映射jjEsc这样的东西被挑选出来并且被尊重,我会认为真的是。有没有办法做到这一点?无需手动调整IDEA的键盘映射中的所有内容,也就是说。有没有办法让IdeaVIM兑现我的.vimrc文件中的映射?

谢谢。

回答

23

更新:是!请参阅答案below

简答:没有。

我一直在努力做到这一点,特别是因为我有一个相当复杂的.vimrc多年来我已经习惯了。

无论如何,有一种解决方法(有点)。 IdeaVim设置存储在您主文件夹内的.IntelliJIdea10/config/keymaps文件夹(Windows上的C:\Users\<user_name>)中名为vim.xml的文件中。你可以编辑XML来添加你想要的东西。例如,添加以下行击中F2而不是键入:w!来保存文件:

<action id="SaveAll"> 
<keyboard-shortcut first-keystroke="F2"/> 
</action> 

不过,我看不出我们如何才能增加了函数或者vim的设置(这是我d通常使用.vimrc)。

P.S.这也许可以解释为什么不使用的.vimrc(重点煤矿):

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

+0

我很害怕,这是答案,但感谢的解决方法,以及极好来源引用。 – 2011-05-14 17:20:28

+2

@HankGay JetBrains的错误跟踪器目前有[问题](http://youtrack.jetbrains.com/issue/VIM-288)解决这个问题。它已经成为重中之重,但无论如何都要投票! – gregoltsov 2013-10-17 15:44:21

+1

它已经修复为0.33,现在该插件不尊重键映射(在github上有一个添加该功能的pull请求) – baldrs 2014-04-29 16:00:41

4

你知道,我已经取得了一些成功的.vimrc在Windows上我家的文件夹,所以通常是C:\用户\ yourLogin。这似乎是通过设计。 Oleg提到IdeaVIM在这里使用了VIm命令的一个子集。

http://youtrack.jetbrains.com/issue/VIM-134#tab=Comments

看起来你需要登录才能看到youtrack系统上的意见。

奥列格Shpynov 2011 8月15日18:12

IdeaVIM插件加载从.vimrc文件中一些配置数据,但是VIM插件支持 是不是和将不可用,因为是需要重写所有VIM运行时内的 IdeaVim插件。

注意,您必须将文件命名的.vimrc,不_vimrc,如果你使用的是Windows,你可能期望后者。

工程与set ignorecase至少!

+1

我可以支持它。 IdeaVim似乎读取了〜/ .vimrc文件,但是默默地忽略了它不支持的任何命令和设置。我喜欢关闭错误响铃,所以我在我的.vimrc中设置了':noerrorbells'。但IdeaVim不支持这一点。但是,它支持':set visualbell'。尽管它不会像你期望的那样闪烁屏幕。尽管如此,这仍然有助于保持沉默。所以我把它放在':set noerrorbells'之前的.vimrc中,并且都很好。 – DragonFax 2013-04-11 08:02:10

+1

我在'〜/ .vimrc'中的映射似乎没有被读取。 – Chev 2014-04-07 17:09:55

+0

需要了解您的平台(非常明显*不* Windows *)*和* vimrc中的内容([pastebin?](http://pastebin.com/))能够完全提供帮助 - 这[我的]答案主要是针对Windows(这就是我试用过的东西,部分工作的部分)。如果他仍然参与IdeaVIM,Oleg的回答也相当不错。 – ruffin 2014-04-07 19:59:29

5

它看起来是IdeaVIM问题#VIM-288(编辑,更新:参见jbyler's answer,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. 看来此文件具有所有的视觉/插入/普通模式命令及其相应的键绑定。对于我更改“退出插入模式”键绑定的示例,请查找“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. 你可能需要从你的键盘映射文件夹中保存Vim.xml文件,我不知道。我删除了我的,然后重新启动IntelliJ时重新制作了它。

  8. 试一试!现在应该能够使用'jk'作为退出插入模式的快捷方式!

130

更新回答:IdeaVim 0.35版本(发布2014-05-15)从~/.ideavimrc读取设置和密钥绑定。你可以把source ~/.vimrc在该文件中,如果你想包括~/.vimrc映射。

0.33和0.34阅读~/.vimrc直接。

0.33(发布2014-04-28)是第一个版本实现VIM-288,包括像映射ĴĴESC。它的伟大工程,并有在IDEA偏好的新Vim的仿真部分,列出了所有~/.vimrc映射和IntelliJ映射之间的矛盾,并让您通过分配的钥匙,无论是思想或IdeaVim解决冲突。这里是twitter上的release announcement

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

+7

这应该是现在接受的答案! – 2015-02-20 18:19:13

+0

现在,我认为这个工作很好。但我发现我必须使用:imap而不是:map!以插入模式重新映射。在vim中,两者都有效。 – 2015-12-09 11:41:14

+0

我的系统中没有'〜/ .ideavimrc'。另外vim命令'scriptnames'不起作用。有什么方法可以找出我的'〜/ .ideavimrc'文件在哪里? – 2017-09-12 21:43:09

1

IdeaVim现在(至少早0.35)支持limited number of set commands,以及地图和它的变化。要让它们自动获取,请将您的设置放在〜/ .ideavimrc中。

1

为了得到它在Windows 7上的工作用C创建.ideavimrc:\用户[用户名]

为我工作。

0

我只是想出如何昨天这样做。我是能够象征性地运行以下命令我的.vimrc链接到我的ideavim设置:

ln -s $HOME/.vimrc $HOME/.ideavim 
相关问题