核心工具之 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 ...
随机推荐
- H.264中的帧
导言 高级视频编码 (AVC) 也称为 H.264,是使用最广泛的视频压缩标准.它与所有主要的流式传输协议和容器格式兼容. 当我们使用播放器播放一个视频时,通常会经过:解协议,解封装,音视频解码,音视 ...
- 【VMware vCenter】管理平台出现备份作业状态告警,VAMI后台备份任务未能运行,点击手动备份提示FTP位置不可用等问题的处理过程。
VMware vCenter提供了一个备份/还原功能,以便在当vCenter本身出现故障且无法恢复的情况下,使用该功能可以将出故障的vCenter配置文件还原到一个新的vCenter上,这样就无需再重 ...
- Stable Diffusion扩散模型
人像生成模型 1.模型理论基础 扩散模型(Diffusion Model): 1.1 Diffusion Model 原理 首先,Denoise Model 需要一个起始的噪声图像作为输入.这个噪声图 ...
- Taro:高性能小程序的最佳实践
前言 作为一个开放式的跨端跨框架解决方案,Taro 在大量的小程序和 H5 应用中得到了广泛应用.我们经常收到开发者的反馈,例如"渲染速度较慢"."滑动不够流畅" ...
- IIS安装与配置
一.环境介绍 Windows Server 2019 64位 标准版 二.IIS安装 2.1.打开服务器管理器,单击添加角色和功能 在Windows Server 2019 服务器管理中,点击角色和功 ...
- 如何有效应对员工违规使用U盘的情况?
在面对员工违规使用U盘的挑战时,华企盾DSC数据防泄密系统提供了一套综合而高效的解决方案. 通过系统的U盘加密功能,我们能够防止未经授权的U盘访问,确保敏感数据不会被非法传输.这一层保护不仅是基础性的 ...
- ElasticSearch之Slow Log
ElasticSearch的慢日志,相关的参数及配置方法. 在log4j2.properties中配置慢日志的输出文件名. Search Slow Log 相关参数 index.search.slow ...
- Python——CSS(层叠样式表,Cascading Style Sheets)、选择器(Selectors)
CSS(层叠样式表,Cascading Style Sheets)是一种用于描述文档样式和布局的样式表语言.它可以与HTML结合使用,用于控制网页的外观和格式.以下是CSS的主要特点和一些基本概念: ...
- 云MSP技本功|redis的5种对象与8种数据结构之字符串对象(下)
简介: 引言 本文是对<redis设计与实现(第二版)>中数据结构与对象相关内容的整理与说明.本篇文章只对对象结构,1种对象--字符串对象.以及字符串对象所对应的两种编码--raw和emb ...
- 扩展中国剩余定理(Excrt)笔记
扩展中国剩余定理(excrt) 本来应该先学中国剩余定理的.但是有了扩展中国剩余定理,朴素的 CRT 就没用了. 扩展中国剩余定理用来求解如下形式的同余方程组: \[\begin{cases} x \ ...