核心工具之 ideavim
对于个人的核心工具集的选择,因为编程中熟练使用主力IDE能够大大提高效率,所以IDE是一个必选项。而IDE与VIM结合的插件,对于VIM使用者,常常是一个必选项。
在Jetbrains系列工具中,插件IdeaVim非常优秀,对我个人而言是一个必选项。
选用IdeaVim原因有以下几个:
- 安装配置简便
- 对原生的VIM命令支持在IDE中基本做到无缝集成
- 因为IDE对语法的理解比VIM更强,使一些VIM命令更“聪明”
- 提供最常用VIM插件的实现
- 可以通过VIM命令行快捷键调用IDE命令
下面进行一些展开介绍。
1. 安装配置简便
在JetBrains系列软件中,比如IntelliJ IDEA, WebStorm, DataGrip等等,可以使用Cmd + Shift + A,输入plugins进入plugin安装界面,然后在market place中查找IdeaVim进行安装。


安装好之后,可以在使用Cmd + Shift + A 进行打开/关闭 IdeaVim插件。

或者点击工具栏下方的图标:

安装好了之后,基本的VIM命令就都可以使用了。如果需要进一步配置,可以产生~/.ideavimrc文件。比如,这个是我的配置文件:
" ~/.ideavimrc
filetype plugin on
syntax on
set hidden
set shiftwidth=2
set expandtab
set tabstop=2
set softtabstop=2
set autoindent
set smartindent
set ic smartcase
set hlsearch
set incsearch
set lbr
set nu
set visualbell
set ruler
set scrolloff=4
set cursorline
set backspace=2
set dictionary=/usr/share/dict/words
set dir=~/.vimswap//,/var/tmp//,/tmp//,.
let g:netrw_home=$HOME.'/.cache/vim'
" Search for selected text in visula mode for * and #
vnoremap * y/<C-R>=substitute(escape(@@,"/\\"),"\n","\\\\n","ge")<CR><CR>
vnoremap # y?<C-R>=substitute(escape(@@,"?\\"),"\n","\\\\n","ge")<CR><CR>
""" Map leader to space ---------------------
let mapleader=" "
""" Plugins --------------------------------
set surround
set multiple-cursors
set commentary
set argtextobj
set easymotion
set textobj-entire
set ReplaceWithRegister
set exchange
""" Plugin settings -------------------------
let g:argtextobj_pairs="[:],(:),<:>"
""" Idea specific settings ------------------
set ideajoin
set ideastatusicon=gray
set idearefactormode=keep
""" Mappings --------------------------------
map <leader>f <Plug>(easymotion-s)
map <leader>e <Plug>(easymotion-f)
map <leader>d :action Debug<CR>
map <leader>r :action RenameElement<CR>
map <leader>c :action Stop<CR>
map <leader>z :action ToggleDistractionFreeMode<CR>
map <leader>s :action SelectInProjectView<CR>
map <leader>a :action Annotate<CR>
map <leader>h :action Vcs.ShowTabbedFileHistory<CR>
map <S-Space> :action GotoNextError<CR>
map <leader>b :action ToggleLineBreakpoint<CR>
map <leader>o :action FileStructurePopup<CR>
另外, 这个配置文件是对所有JetBrains 工具都共享的。配置一次就可以在所有工具上生效。
2. 对原生的VIM命令支持在IDE中基本做到无缝集成
这一点没有太多解释。如果有快捷键冲突的话,可以在这个配置界页面进行调整:

3. 因为IDE对语法的理解比VIM更强,使一些VIM命令更“聪明”
这里举一个最常用的例子。]m将光标跳转到下一个函数开始的地方。在VIM中要做到精准的跳转很不容易,所以我基本上没有使用。然而在IdeaVim中,因为IDE对语法语义理解精准,所以用起来很爽。类似的命令还有[m, ]M, ``[M`
4. 提供最常用VIM插件的实现
IdeaVim是JetBrains的开源软件1,是使用Kotlin实现的插件。所以我们不能直接使用vim的现有插件。不过,IdeaVim选择实现了一些最常用的VIM插件。比如,tpope/vim-surround, tpope/vim-commentary, vim-scripts/argtextobj.vim, 等等。
从我的使用体验来看,这些选择非常成功,每一个精品。做到了“插件中的插件,精品中的精品”。下面就举两个例子。
第一个,argtextobj。变成中我们常常需要修改函数声明中或者函数调用语句中的整个参数。这个时候,一些额外的单词以及逗号就很讨厌。vim-scripts/argtextobj.vim 就是用来解决这个问题的一个插件。比如使用如下操作方便工作:
- daa: 删除这个参数,包括逗号
- dia: 删除这个参数,不包括逗号
- cia: 删除这个参数,不包括逗号,并进入编辑模式
- vaa: 选中这个参数,包括逗号

第二个例子,surround。我们常常需要在一段文字两端进行操作,不如添加单引号,双引号,括号,把单引号改成双引号,等等。vim-surround插件做这个非常方便。IdeaVim 自带了这个插件。我最常用的命令有
- cs:修改文本目标两端的符号
- ds:删除文本目标两端的符号
- ys:在文本目标两端添加符号
- S:在visual 模式中在被选择文本两端添加符号
这里的可以是', ", {,还可以是xml 标签(用t触发) 。更过的使用说明可以参考vim-surround插件的链接上的文档说明。
而要使用这两个功能,不需要任何安装,只需要在~/.ideavimrc文件中添加以下两行即可:
set argtextobj
set surround
5. 可以通过VIM命令行快捷键调用IDE命令
VIM的一个根本优势是默认模式是命令模式,所以很多按键很简洁,不需要组合键,从而在IdeaVim中我们可以方便定义很多快捷键。比如,可以使用Space, a 快速切换 Annotation View (Git Blame):

IDE暴露了大量的命令可以用IdeaVim快捷键触发。
列举可用命令,在命令行中输入:actionlist:


这里也有一个网上的列表供参考。
然后,可以在~/.ideavimrc中进行配置:
" ~/.ideavimrc
""" Map leader to space ---------------------
let mapleader=" "
""" Mappings --------------------------------
map <leader>d :action Debug<CR>
map <leader>r :action RenameElement<CR>
map <leader>z :action ToggleDistractionFreeMode<CR>
map <leader>s :action SelectInProjectView<CR>
map <leader>a :action Annotate<CR>
map <S-Space> :action GotoNextError<CR>
map <leader>b :action ToggleLineBreakpoint<CR>
map <leader>o :action FileStructurePopup<CR>
比如,可以使用<space>a 打开/关闭 annotation view (git blam),<space>s在project窗口中找到当前文件。
总之,推荐使用IdeaVim!
核心工具之 ideavim的更多相关文章
- HTML5新增核心工具——canvas
原文:HTML5新增核心工具--canvas Canvas元素称得上是HTML5的核心所在,它是一个依靠JavaScript绘制华丽图像的元素. Canvas由一个可绘制地区HTML代码中的属性定义决 ...
- webpack4.X核心工具库之tapable实例对象Hook
一.tapable简介 tapable为webpack底层的核心工具库,webpack许多功能的实现都是跟它密不可分的,webpack的编译流程为配置初始化--->内容编译--->输出编译 ...
- (转)python3之模块io使用流的核心工具
原文:https://www.cnblogs.com/zhangxinqi/p/9135038.html https://blog.csdn.net/Rozol/article/details/710 ...
- python3之模块io使用流的核心工具
1.io概叙 io模块提供了python用于处理各种类型I/O的主要工具,主要有三种类型的I/O:文本I/O,二进制I/O和原始I/O:这些都是通用类型,各种后备存储可使用其中的每一种类型,所以这些类 ...
- Docker 三大核心工具
Docker-machineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox. Digital Oc ...
- HTML5新增核心工具——本地存储
除了Canvas元素外,HMTL5另外一个新增的非常重要的功能是可以在客户端本地存储数据库的Web Storage.本文就介绍下Web Storage以及SQLLite操作. Web Storage分 ...
- APICloud支持Atom编辑器,并建立开发工具核心库
APICloud支持Atom编辑器开发工具 APICloud始终坚持多开发工具支持策略,开发者无论使用Sublime Text3.Eclipse还是Webstorm,都可以在APICloud平台中找到 ...
- APICloud重磅支持Atom编辑器,并建立开发工具核心库
APICloud技术再次升级,不仅支持Atom编辑器开发工具,并推出核心开发工具库,使开发者进行App开发更便捷高效. APICloud支持Atom编辑器开发工具 APICloud始终坚持多开发工具支 ...
- Linux下sysstat工具学习
Linux下,我们多用ssh链接服务器远程操控.对于系统的监控必不可少,sysstat很不错的监控工具包. sysstat官网:http://sebastien.godard.pagesperso-o ...
- Articulate Studio课间制作工具
Articulate Studio可以说是目前国际上用户最广泛的e-learning课件制作工具之 一,通过Articulate Studio,你可以方便.快捷的创建引人入胜的Flash演示和e-le ...
随机推荐
- EF Core预编译模型Compiled Model
前言 最近还在和 npgsql 与 EF Core 斗争,由于 EF Core 暂时还不支持 AOT,因此在 AOT 应用程序中使用 EF Core 时,会提示问题: 听这个意思,似乎使用 Compi ...
- 如何保证Spring Boot接口安全的呢?
在保证Spring Boot接口安全时,我们需要关注的主要方面包括:认证(Authentication).授权(Authorization).数据安全性(Data Security).以及防止常见的W ...
- QT实战 之翻金币游戏
QT实战 之翻金币游戏 相较于原版的优化: 关卡数据不是用静态的config配置,而是动态生成,每次打开的关卡都生成不同的游戏数据,增加了可玩性: 关卡数据依据关卡等级的不同而生成不同难度的数据,随关 ...
- Modbus转PROFINET网关 TS-180
TS-180实现 PROFINET 网络与串口网络之间的数据通信.三串口可分别连接具有 RS232 或 RS485 接口的设备到PROFINET 网络,三串口相同,全为 RS232 或RS485.即将 ...
- Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo
前言 驱动写好后,用户层使用系统函数调用操作相关驱动从而实现与系统内核的关联,本篇主要就是理解清楚驱动如何让用户编程来实现与内核的交互. 杂项设备文件操作集 cd /usr/src/linux ...
- Access denied for user ‘root‘@‘localhost‘ (using password:YES)解决方法
修改jdbc.properties文件的密码
- 【ASP.NET Core】MVC过滤器:常见用法
前面老周给大伙伴们演示了过滤器的运行流程,大伙只需要知道下面知识点即可: 1.过滤器分为授权过滤.资源访问过滤.操作方法(Action)过滤.结果过滤.异常过滤.终结点过滤.上一次咱们没有说异常过滤和 ...
- Windows风格的个人网盘,支持文档在线编辑
这是一个Windows页面风格的个人网盘,支持普通文本.文档.表格.xmind等在线编辑,支持Windows的小组件,例如计算器.WhiteBoard.python 等,其他更多功能待你来发现,也待你 ...
- [USACO2007NOVS] Cow Hurdles S
题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...
- 基于yolo的口罩识别(开源代码和数据集)
2020年开头真的很人意外,开年爆发了疫情.此次疫情牵动了各行各业,在这里衷心的感谢奋斗在一线的医疗工作者:您们辛苦了.作为一名非医专业的学生,在这样情况下,除了不乱跑以外,我也想以另一种方式去致敬那 ...