核心工具之 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 ...
随机推荐
- LabVIEW基于机器视觉的实验室设备管理系统(5)
目录 行动计划 设备借用 判断设备ID是否正确.设备是否在库 判断是否为已注册用户.电话是否正确 借出设备 设备归还 信息查询 判断ID是否正确.选择设备状态 效果演示 今天这一期,我们就来完成实验 ...
- Spring Boot Bean的多种加载方式
在 Spring Boot 中,您可以以多种方式加载 Bean,这取决于项目的需求和设计.以下是一些常见的加载 Bean 的方式以及相应的示例源代码. 1.组件扫描(Component Scannin ...
- 洛谷P2579 [ZJOI2005]沼泽鳄鱼(矩阵快速幂,周期)
例题:现在豆豆已经选好了两座石墩Start和End,他想从Start出发,经过K个单位时间后恰好站在石墩End上.假设石墩可以重复经过(包括Start和End),他想请你帮忙算算,这样的路线共有多少种 ...
- 初探webpack之单应用多端构建
初探webpack之单应用多端构建 在现代化前端开发中,我们可以借助构建工具来简化很多工作,单应用多端构建就是其中应用比较广泛的方案,webpack中提供了loader与plugin来给予开发者非常大 ...
- 在.net中通过自定义LoggerProvider将日志保存到数据库方法(以mysql为例)
在.NET中,Microsoft.Extensions.Logging是一个灵活的日志库,它允许你将日志信息记录到各种不同的目标,包括数据库.在这个示例中,我将详细介绍如何使用Microsoft.Ex ...
- 新冠肺炎病毒(Covid-19)检测系统
一 .背景 新冠肺炎是一种新的呼吸道疾病,它由新型冠状病毒引起,而这种病毒以前从未在人类身上发现 过.新冠肺炎如何传播? 新冠肺炎很容易通过与新冠肺炎患者的密切接触(距离约 6 英尺或两臂长范围内)在 ...
- scrapy 请求meta参数使用案例-豆瓣电影爬取
num = 0 import scrapy from scrapy.http import HtmlResponse from scrapy_demo.items import DoubanItem ...
- JavaFx之Ikonli图标库大全(十五)
JavaFx之Ikonli图标库大全(十五) Ikonli给java提供了大量的图标库, 官网:https://kordamp.org/ikonli/ Ikonli 提供了可以在 Java 应用程序中 ...
- P2343 宝石管理系统 做题记录
随机跳的. 一眼带修第 \(\text{k}\) 大,平衡树 / 权值线段树 / set 随便搞就行. (set 可能要双 \(\log\),所以没写) 很快啊,权值线段树就 \(\text{A}\) ...
- GetView介绍 以及 GetxController生命周期
etView 只是对已注册的 Controller 有一个名为 controller 的getter的 const Stateless 的 Widget,如果我们只有单个控制器作为依赖项,那我们就可以 ...