虽然使用了很长时间的 Vim,也使用了很长时间的 IntelliJ IDEA,但总感觉没有充分利用,所以想再这里总结一下,系统的浏览一遍 Idea Vim 插件能提供的功能,看看能不能有所受益,Vim 和 IntelliJ IDEA 的基本操作和内容就省略了。
Introduction
首先 ideavim 这个插件是 JetBrains 官方提供的,基本上安装后即可。GitHub 的页面还提到 ideavim 插件提供了一些 Vim 插件的扩展功能,比如:
- vim-easymotion
- vim-surround
- vim-multiple-cursors
- vim-commentary
- argtextobj.vim
- vim-textobj-entire
- ReplaceWithRegister
可以根据这个页面 上的方式配置和开启这个扩展功能。
为什么要用 IdeaVim
- 既充分利用了 IntelliJ 提供的代码补全,重构,代码浏览等等功能,又可以充分利用 Vim 的多模式,以及 Vim 在编辑器中的高效
- 利用
~/.ideavimrc
来复用 Vim 的工作方式,以及充分利用 Idea 提供的 Action
vim-easymotion
Idea 中的 vim-easymotion 插件支持的配置,可以参考这里
AceJump
在了解 easymotion 时意外收获了 AceJump 插件,IntelliJ IDEA 中的 easymotion 实际上是通过 AceJump 插件来实现的。 :q
默认情况下,使用 Ctrl + ; 来开启 AceJump 模式,不过我的 Ctrl + ;
已经作为输入法的多粘贴板来使用了,所以就改成 Alt + k 。
AceJump 的工作流程,按下 Alt + K 进入 AceJump ,此时按下任何按键就会在当前文件搜索,并给每一个结果一个 tag,按下回车,然后输入 tag 就可以快速跳转过去。
结合 action
在 IntelliJ IDEA 中,任何选项操作都会映射到一个 action
上,点击按钮,就执行对应的 action
,所以记住 Ctrl + Shift + a 这个快捷键。
在编辑器模式下,可以输入如下命令查看 actionlist:
:actionlist
vim-surround
启用方式:
set surround
支持的 Commands: ys, cs, ds, S
下面的例子中,假设 *
是当前光标的位置:
Old Text | Command | Text After command execute |
---|---|---|
“Hello *world!” | ds” | Hello world! |
[123 + 4*56]/2 | cs]) | (123+456)/2 |
“Look ma, I’m *HTML!” | cs” | <q>Look ma, I'm HTML!</p> |
if *x>3 | ysW( | if ( x>3 ) |
my $str = *www; |
vllS’ | my $str = 'www'; |
vim-surround 在想要改变 surround
的时候非常方便。
vim-multiple-cursors
目前我的使用场景大部分通过 IDEA 自带的 rename 功能批量替换变量即可做到,所以目前还没有开启这个功能的需求,更多多光标的操作技巧可以参考这篇文章
IdeaVim 支持的所有快捷键:
总结
最后,这里 是我的 .ideavimrc
配置。