我最近重新开始大量使用vim,并且在我的.vimrc
文件中进行了大量自定义。我意识到其中并非所有内容都适用于IDEA插件的上下文环境,但如果能够像重新映射jj
为Esc
这样的操作能被识别和遵守就太好了。有没有方法可以实现?而不需要手动调整IDEA的按键映射。
谢谢。
更新的答案: 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 来解决冲突。这里是发布公告的推特链接。
(注意:我不是作者,只是一位满意的用户。)
~/.ideavimrc
文件。而且 vim 命令 scriptnames
也无法使用。有没有办法找出我的 ~/.ideavimrc
文件在哪里? - Jay Bhavsar.ideavimrc
的文件,并将所需的设置放置其中。 - jbylersource ~/.vimrc
或源自您的 .vimrc 文件所在位置。重新启动 PyCharm。 - SanD更新:是的!请参见下方答案。
简短回答:不行。
我也一直在尝试这样做,特别是因为我有一个相当复杂的.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/
source ~/.vimrc
看起来 IdeaVIM 问题 # VIM-288(编辑,更新:请参见jbyler的答案,VIM-288现已修复)将在修复后解决您的问题。我也正在寻找一种方法,使“jk”退出插入模式而不是使用 Escape 键。虽然我不是 IntelliJ 插件的专家,但我成功地修改了 IdeaVIM 源代码,使“jk”快捷键硬编码在其中。然后我所要做的就是重新部署插件并使用它而不是官方版本。以下是我的操作步骤:
获取 IdeaVIM 的源代码。
你可以按照该页面上“开发”部分的说明来设置插件的开发环境。
现在,你的 IdeaVIM 项目已经设置好了,打开以下文件: com.maddyhome.idea.vim.key.RegisterActions.java
这个文件似乎包含了所有的可视化 / 插入 / 正常模式命令及其相应的键绑定。对于我修改“退出插入模式”键绑定的示例,请查找“VimInsertExitMode”。你需要在这段代码中添加一行以设置新的快捷键。
这是我编辑后的代码段:
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)})
});
现在部署项目(制作 .jar 文件)并将其添加到插件文件夹中;我按照以下说明进行了参考:
你可能需要保存来自 keymaps 文件夹的 Vim.xml 文件,但我不确定。我删除了我的文件,然后重新启动 IntelliJ 时它被重新创建。
试一下吧!现在应该可以使用“jk”作为退出插入模式的快捷键了!
你知道吗,在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
时可以正常工作!
:set noerrorbells
。但是IdeaVim不支持它。然而,它支持:set visualbell
。即使它不像您期望的那样闪烁屏幕。虽然如此,它也能消除提示音。因此,在我的.noerrorbells之前,我在我的.vimrc中包含了它,现在一切都很好。 - DragonFax要在Windows 7上使其工作,请在C:\ Users [username]中创建.ideavimrc。
对我有用。
我昨天刚刚弄明白了这个。我通过运行以下命令,成功地将我的 .vimrc 符号链接到我的 ideavim 设置:
ln -s $HOME/.vimrc $HOME/.ideavim
~\.vimrc
复制到~\.ideavimrc
。您能否将其标记为已接受的答案,以帮助其他访问此页面的人? - Kellen Stuart