对于个人的核心工具集的选择,因为编程中熟练使用主力IDE能够大大提高效率,所以IDE是一个必选项。而IDE与VIM结合的插件,对于VIM使用者,常常是一个必选项。

在Jetbrains系列工具中,插件IdeaVim非常优秀,对我个人而言是一个必选项。

选用IdeaVim原因有以下几个:

  1. 安装配置简便
  2. 对原生的VIM命令支持在IDE中基本做到无缝集成
  3. 因为IDE对语法的理解比VIM更强,使一些VIM命令更“聪明”
  4. 提供最常用VIM插件的实现
  5. 可以通过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的更多相关文章

  1. HTML5新增核心工具——canvas

    原文:HTML5新增核心工具--canvas Canvas元素称得上是HTML5的核心所在,它是一个依靠JavaScript绘制华丽图像的元素. Canvas由一个可绘制地区HTML代码中的属性定义决 ...

  2. webpack4.X核心工具库之tapable实例对象Hook

    一.tapable简介 tapable为webpack底层的核心工具库,webpack许多功能的实现都是跟它密不可分的,webpack的编译流程为配置初始化--->内容编译--->输出编译 ...

  3. (转)python3之模块io使用流的核心工具

    原文:https://www.cnblogs.com/zhangxinqi/p/9135038.html https://blog.csdn.net/Rozol/article/details/710 ...

  4. python3之模块io使用流的核心工具

    1.io概叙 io模块提供了python用于处理各种类型I/O的主要工具,主要有三种类型的I/O:文本I/O,二进制I/O和原始I/O:这些都是通用类型,各种后备存储可使用其中的每一种类型,所以这些类 ...

  5. Docker 三大核心工具

    Docker-machineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox. Digital Oc ...

  6. HTML5新增核心工具——本地存储

    除了Canvas元素外,HMTL5另外一个新增的非常重要的功能是可以在客户端本地存储数据库的Web Storage.本文就介绍下Web Storage以及SQLLite操作. Web Storage分 ...

  7. APICloud支持Atom编辑器,并建立开发工具核心库

    APICloud支持Atom编辑器开发工具 APICloud始终坚持多开发工具支持策略,开发者无论使用Sublime Text3.Eclipse还是Webstorm,都可以在APICloud平台中找到 ...

  8. APICloud重磅支持Atom编辑器,并建立开发工具核心库

    APICloud技术再次升级,不仅支持Atom编辑器开发工具,并推出核心开发工具库,使开发者进行App开发更便捷高效. APICloud支持Atom编辑器开发工具 APICloud始终坚持多开发工具支 ...

  9. Linux下sysstat工具学习

    Linux下,我们多用ssh链接服务器远程操控.对于系统的监控必不可少,sysstat很不错的监控工具包. sysstat官网:http://sebastien.godard.pagesperso-o ...

  10. Articulate Studio课间制作工具

    Articulate Studio可以说是目前国际上用户最广泛的e-learning课件制作工具之 一,通过Articulate Studio,你可以方便.快捷的创建引人入胜的Flash演示和e-le ...

随机推荐

  1. 聊聊分布式 SQL 数据库Doris(七)

    LSM-Tree Doris的存储结构是类似LSM-Tree设计的,因此很多方面都是通用的,先阅读了解LSM相关的知识,再看Doris的底层存储与读取流程会清晰透彻很多,如下是几个关键的设计: SST ...

  2. 在net中通过Autofac实现AOP的方法及实例详解

    在本示例中,我们将使用Autofac和AspectC(Autofac.Extras.DynamicProxy2)来演示如何实现AOP(面向切面编程).我们将创建一个简单的C#控制台应用程序,并应用AO ...

  3. 循环返回结果结果集(connect 函数使用)

    --示例: SELECT 0 + ROWNUM sonID FROM DUAL /*区间范围*/ CONNECT BY ROWNUM <= 20;

  4. [ABC262G] LIS with Stack

    Problem Statement There is an empty sequence $X$ and an empty stack $S$. Also, you are given an inte ...

  5. LeetCode 503:下一个更大的元素|| (单调栈 or 线段树)

    解题思路: 1.单调栈:因为是循环数组,因此把数组复制三遍,ans 数组复制为2倍长,维护一个单调非递增的栈,栈保存的元素是元组(a[i] , i ),如果后面的值有比栈顶元素的值大,栈顶元素出栈,更 ...

  6. 使用Py2neo更新Neo4j中节点的属性值的正确姿势

    1 def findNode(name, graph): 2 matcher = NodeMatcher(graph) 3 m = matcher.match(name = name).first() ...

  7. 国产 Web 组态软件在玻璃生产线中的应用

    ​  概述 随着工厂信息化.数字化发展,智慧生产车间成为必然发展趋势,通过智能硬件.物联网.大数据等智慧化技术与手段,提高车间生产设备.工艺设备的智能执行能力,从而提升整个车间乃至工厂的智能化.网络化 ...

  8. bash shell笔记整理——file命令

    file命令的作用 查看一个给定参数的文件类型 file命令语法 file [FILE...] file命令还有选项,但是基本用的不太多,这个命令也基本用得不是很多. 示例 [root@nginx-p ...

  9. 2023计算机保研经验贴 直博向(南大cs,计算所,科大高研院,浙大cs,交大cs,国科cs,北大cs,清华cs)

    写在前面 本人作为普通选手,只能将个人经验分享一二,不能代表其他人的想法和意见,望路过的大佬们高抬贵手-,如果有相关老师或者同学认为我违反了保密条例请与我私信联系,我会第一时间删除相关内容. 个人情况 ...

  10. Semantic Kernel 正式发布 v1.0.1 版本

    微软在2023年12月19日在博客上(Say hello to Semantic Kernel V1.0.1)发布了Semantic kernel的.NET 正式1.0.1版本.新版本提供了新的文档, ...