有没有办法让IdeaVIM遵守我的.vimrc文件中的映射?

76

我最近重新开始大量使用vim,并且在我的.vimrc文件中进行了大量自定义。我意识到其中并非所有内容都适用于IDEA插件的上下文环境,但如果能够像重新映射jjEsc这样的操作能被识别和遵守就太好了。有没有方法可以实现?而不需要手动调整IDEA的按键映射。

谢谢。


答案是将 ~\.vimrc 复制到 ~\.ideavimrc。您能否将其标记为已接受的答案,以帮助其他访问此页面的人? - Kellen Stuart
9个回答

181

更新的答案: IdeaVim 版本 0.35(发布于2014年05月15日)从 ~/.ideavimrc 中读取设置和键绑定。如果您想要包含来自 ~/.vimrc 的映射,请在该文件中放置 source ~/.vimrc

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

版本 0.33(发布于2014年04月28日)是第一个实现VIM-288的版本,其中包括将 jj 映射到 ESC 等功能。它工作得很好,在 IDEA 首选项中有一个新的 Vim 模拟 部分,列出了所有 ~/.vimrc 映射与 Intellij 映射之间的冲突,并允许您通过将键分配给 IDEA 或 IdeaVim 来解决冲突。这里是发布公告的推特链接

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


现在这个很好用,我认为。但是我发现我必须使用 :imap 而不是 :map! 来重新映射插入模式。在 vim 中,两者都可以。 - Erik Corry
我的系统中没有 ~/.ideavimrc 文件。而且 vim 命令 scriptnames 也无法使用。有没有办法找出我的 ~/.ideavimrc 文件在哪里? - Jay Bhavsar
@JayBhavsar,您需要创建文件。 ~ 表示您的主目录。因此,请在您的主目录下创建一个名为 .ideavimrc 的文件,并将所需的设置放置其中。 - jbyler
如果您没有文件 ~/.ideavimrc,那么您可以简单地创建它。只需写入 source ~/.vimrc 或源自您的 .vimrc 文件所在位置。重新启动 PyCharm。 - SanD
1
对我来说不起作用,~/.ideavimrc 文件被忽略了。 - Anenth
显示剩余2条评论

26

更新:是的!请参见下方答案

简短回答:不行。

我也一直在尝试这样做,特别是因为我有一个相当复杂的.vimrc文件,这些年来我已经习惯了它。

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

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

不过,我不知道如何添加像函数或Vim设置这样的内容(这通常是我使用.vimrc文件的原因)。

P.S. 这可能解释了为什么不使用.vimrc文件(重点强调):

  

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


我很担心这就是答案,但感谢您提供的解决方法和优秀的参考来源。 - Hank Gay
2
@HankGay,目前在JetBrains的错误跟踪器上有一个问题正在解决这个问题。它已经被设置为重要优先级,但无论如何都请投票支持它! - gregoltsov
1
已在0.33版本中修复,现在插件确实遵守键映射(在Github上有一个拉取请求添加了该功能)。 - baldrs

8
根据插件存储库中的描述(https://github.com/JetBrains/ideavim),您可以通过创建一个名为"~/.ideavimrc"的文件并添加以下内容来实现此功能:
source ~/.vimrc

7

看起来 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. 这个文件似乎包含了所有的可视化 / 插入 / 正常模式命令及其相应的键绑定。对于我修改“退出插入模式”键绑定的示例,请查找“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”作为退出插入模式的快捷键了!


4

你知道吗,在Windows系统中,.vimrc文件可以放在家目录下的C:\Users\yourLogin。看起来这是有意设计的。Oleg在这里提到IdeaVIM使用了Vim命令的一个子集。

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

看起来你需要登录才能在youtrack系统中查看评论。

Oleg Shpynov 15 Aug 2011 18:12

IdeaVIM插件从.vimrc文件加载一些配置数据,但是vim插件不受支持,也不会受支持, 因为它需要在IdeaVim插件中重新编写所有的Vim运行时。

请注意,在Windows系统中,如果你希望使用_vimrc文件,你必须将其重命名为.vimrc

至少在设置set ignorecase时可以正常工作!


1
我可以证实这一点。IdeaVim似乎会读取您的~/.vimrc文件,但会默默地忽略它不支持的任何命令和设置。我喜欢关闭错误提示音,所以我在我的.vimrc中使用:set noerrorbells。但是IdeaVim不支持它。然而,它支持:set visualbell。即使它不像您期望的那样闪烁屏幕。虽然如此,它也能消除提示音。因此,在我的.noerrorbells之前,我在我的.vimrc中包含了它,现在一切都很好。 - DragonFax
需要知道您的平台(显然不是Windows ;^D)以及vimrc中有什么内容(pastebin?),才能完全帮助您 - 请注意,这个答案主要针对Windows(那是我尝试并部分工作的地方)。如果Oleg仍然参与IdeaVIM,他也很擅长回答问题。 - ruffin

1

要在Windows 7上使其工作,请在C:\ Users [username]中创建.ideavimrc。

对我有用。


1

IdeaVim现在(至少从0.35版本开始)支持有限数量的set命令,以及map和其变体。为了自动加载它们,请将设置放在~/.ideavimrc中。


0

我昨天刚刚弄明白了这个。我通过运行以下命令,成功地将我的 .vimrc 符号链接到我的 ideavim 设置:

ln -s $HOME/.vimrc $HOME/.ideavim

-1
我正在使用 Vim(版本0.57)两天了 :D,我讨厌用 ESC 键退出插入模式。在 Jet Brains 中,只需向下看右侧,您就会看到 Vim 徽标,然后> 打开 ~/.ideavimrc。

enter image description here

并键入 :imap ii <ESC>,这将使用双 i 退出插入模式 (可以放置任何内容) 保存 .ideavimrc 文件并重启您的 IDE


你似乎从未倾向于输入“夏威夷”。 - Armali

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