安装

和安装其它插件一样,直接在插件市场搜索ideaVim安装即可。

配置

快捷键设置

ideaViim键与idea快捷键有冲突,可以在Editor Vim Emulation设置,我的快捷键设置如下:

常用快捷键

  • zo:打开折叠
  • zc:关闭折叠

.ideavim配置文件讲解

逻辑

开发过idea插件的人都知道,在idea中,任何目录选项上的点击操作,工具栏上的按钮都会被映射为一个action。即点击对应的按钮或者选项,执行相应的action。理解很简单,这就是MVC的思想,比如springmvc, 一个访问路径映射为一个控制器中的方法这样子。

明白action映射这一点很重要。因为ideavim的插件支持使用vim命令执行对应的action。所以,这个设计逻辑就打通了vim和idea的交互,使得我们可以在vim中完成所有和idea相关的操作。

常规操作

vim的定位是文本编辑。所以在idea中一般情况下vim快捷键和命令生效的基本条件就是当前窗口焦点在编辑区。这是最基础的条件,如果你当前的快键键在Project或者Run这些侧边栏中,按vim的命令肯定是不会生效的。

明白了基本条件,那我们要做的第一件事也是最重要的事情就是在idea中,如何快速的将焦点回到的编辑区。答案是:Esc

这应该是使用vim的人最能接受的快捷键了。所以,到这里基本的操作思路就很明确,当前的焦点要么在编辑区外,要么在编辑区内。而返回编辑区的操作很简单,就是Esc。当焦点在编辑区的时候,就可以随心所欲的使用vim的指令和快捷键了。

配置

有了idea基本的了解之后,我们就可以着手配置自己的vim了。ideavim插件的配置通常是~/.ideavimrc,所以将自己的配置脚本写在对应的文件中即可。当然如果你已经有了自己的vim配置文件在~/.vimrc下,那只需要在ideavim的配置文件中添加一行命令即可全部读取映射过来

source ~/.vimrc

在~目录下,创建.ideavimrc

"设置高亮搜索
set hlsearch

"重命名文件
nnoremap <Space>rf :action RenameFile<CR>
"跳到指定类
nnoremap <Space>gc :action GotoClass<CR>
"查找使用
nnoremap <Space>fu :action FindUsages<CR>
"跳转到方法的声明
nnoremap <Space>gs :action GotoSuperMethod<CR>
在vim中执行idea的action

为了执行idea中的action,ideavim有两个额外的命令来支持这一操作。

  • :actionlist [pattern]
  • :action {actionName}

第一个命令actionlist是帮助查看idea中有哪些命令。第二个命令是执行对应的action这样子。有了这两个命令的帮助我们就可以在ideavim的配置文件中使用map命令来映射idea的action到vim的快捷键中。

Vim 中的 remap,noremap

remap是一个使映射以递归方式工作的选项

:map:noremap是各种映射命令的递归非递归版本。这意味着,如果你这样做:

:map j gg
:map Q j
:noremap W j

j将映射到ggQ 将映射到gg ,因为j将被扩展用于递归映射。 W将被映射到j (而不是gg ),因为j不会针对非递归映射进行扩展。

现在请记住,Vim 是一个模态编辑器 。它具有普通模式, 可视模式和其他模式。

对于这些映射集中的每一个,都有一个映射可以在正常,可视,选择和操作员模式下工作( :map:noremap ),一个在普通模式下工作( :nmap:nnoremap ),一个在可视模式下( :vmap:vnoremap )等等。

参考

https://programtip.com/zh/art-127704

https://blog.csdn.net/qq_40250122/article/details/102054921

https://my.oschina.net/funcy/blog/1832719

https://blog.csdn.net/CoderBruis/article/details/94735816

https://routinepanic.com/questions/what-is-the-difference-between-the-remap-noremap-nnoremap-and-vnoremap-mapping