java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > idea使用Vim

idea使用Vim的技巧大全分享

作者:老梁Java

vim是一个高度可配置的文本编辑器,非常稳定,可以高效的创建任何文本、持久的、多级撤销树、支持数百种变成语言和格式、与许多工具集成,本文给大家分享了idea使用Vim的技巧大全,需要的朋友可以参考下

一、前言

vim的基础命令我这边不多做介绍,直接给两个比较大而全的直观图,照着一个个命令看下去基本命令就学了一遍了,我会着重介绍我在idea编写代码过程中比较常用的命令,毕竟在idea写代码和在vim编辑器里写代码还是有很大区别的,idea本身自带了很多功能,不需要依赖vim更加方便

二、插件推荐

IdeaEasyMotion

对于不想用鼠标移动的用户来讲,这是个快速定位的神器,入下图所示,通过快捷键<ll>w

显示所有单词的开头,输入对应的字母就可以将光标定位到那个单词的开头,接下去若要修改,直接cw就删掉这个单词进入插入模式修改了

这里<ll> 代表了两个<leader> 在配置文件用let mapleader=" " 来表示这个字符,我习惯用空格来作为leader

三、开发常用命令

以上方法对应了选中对应两个相同符号范围内的字符串,比如选中双引号内的字符串

c系列

我自定义的命令如下,前三个是删除,后三个是选择

"光标在多个参数的第一个参数任意位置,执行直接删参数
nnoremap <Space>dn F,vt,d
"光标在多个参数的第一个参数任意位置,执行直接删参数
nnoremap <Space>db T(vf,ld
nnoremap <Space>dm F,vt)d
nnoremap <Space>vn F,vt,
nnoremap <Space>vb T(vf,l
nnoremap <Space>vm F,vt)

四、action

重点介绍下如何使用idea的action实现用vim的快捷键调用idea的功能

nnoremap <Space>te :action ActivateTerminalToolWindow<CR>
" 这三个都是arthas的命令,结合快捷键快速复制命令
nnoremap <Space>aw :action ArthasWatch<CR>
nnoremap <Space>at :action ArthasTrace<CR>
nnoremap <Space>dc :action ArthasJadCommandAction<CR>

五、详解map

关于map命令有如下几种,分别在不同的模式下起作用,大部分情况下用的都是nnoremap命令

六、我的配置

" .ideavimrc is a configuration file for IdeaVim plugin. It uses
"   the same commands as the original .vimrc configuration.
" You can find a list of commands here: https://jb.gg/h38q75
" Find more examples here: https://jb.gg/share-ideavimrc
" nnoremap - Normal Mode 映射:这个命令用于在 Normal Mode(普通模式)下创建键盘映射。这意味着当您在普通模式下按下键盘上的指定组合时,将触发所定义的操作。
" inoremap - Insert Mode 映射:这个命令用于在 Insert Mode(插入模式)下创建键盘映射。这允许您在编辑文本时定义按键组合的行为。
" nmap - Normal Mode 和 Visual Mode 映射:这个命令用于在 Normal Mode 和 Visual Mode 下创建键盘映射。这意味着它会影响普通模式和可视模式下的按键行为。
" vmap - Visual Mode 映射:这个命令用于在 Visual Mode(可视模式)下创建键盘映射。它会影响到在可视模式下选择文本时的按键操作。
" imap - Insert Mode 和 Command-Line Mode 映射:这个命令用于在 Insert Mode 和 Command-Line Mode(命令行模式)下创建键盘映射。它允许您自定义插入模式和执行命令时的按键行为。
" map - 通用映射:这个命令用于创建通用的键盘映射,会影响到多个模式(Normal Mode、Visual Mode、Insert Mode、Command-Line Mode)。这种映射可能会导致一些不直观的行为,因此需要谨慎使用。


"" -- Suggested options --
" Show a few lines of context around the cursor. Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5

" Do incremental searching.
" set incsearch

" Don't use Ex mode, use Q for formatting.
map Q gq

" --- Enable IdeaVim plugins https://jb.gg/ideavim-plugins

" Highlight copied text
Plug 'machakann/vim-highlightedyank'
" Commentary plugin
Plug 'tpope/vim-commentary'

set easymotion
"" -- Map IDE actions to IdeaVim -- https://jb.gg/abva4t
"" Map \r to the Reformat Code action
"map \r <Action>(ReformatCode)

"" Map <leader>d to start debug
"map <leader>d <Action>(Debug)

"" Map \b to toggle the breakpoint on the current line
"map \b <Action>(ToggleLineBreakpoint)

set verbose=20
"语法高亮
syntax on
"显示行号
set number relativenumber
"显示光标所在位置的行号和列号
set ruler
set wrap                      "自动折行
set shiftwidth=4
set tabstop=4
set softtabstop=4
set expandtab                  "将tab替换为相应数量空格
set smartindent
set backspace=2
set co=5
"设置取消备份 禁止临时文件生成
set nobackup
set noswapfile
" 为IdeaVim插件增加自动切换为英文输入法的功能,
" idea 需要安装 IdeaVimExtension plugin
set keep-english-in-normal
"设置匹配模式 类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
set hlsearch
set incsearch
set ignorecase
set smartcase
set history=3000000
set commentary
:set vb
set clipboard^=unnamed,unnamedplus
"set laststatus=2   "命令行为两行
"set fenc=utf-8     "文件编码
"set mouse=a        "启用鼠标
"set ignorecase     "忽略大小写
set cursorline     "突出显示当前行
"set cursorcolumn   "突出显示当前列
set fdm=marker
set timeoutlen=1000
" 防止按leader键乱移动
nnoremap <SPACE> <nop>

nnoremap <SPACE>" ciw""<ESC>hp

"jk退出insert模式
"inoremap jk <ESC>
"inoremap jj <ESC>
"inoremap <esc> <nop>

""""""""""""""""""""""""""""""""""""""基础篇""""""""""""""""""""""""""""""""""""""
"--普通模式下使用回车键,向下/向上 增加一行
nmap <CR> o<Esc>
"nmap <S-Enter> O<Esc>
"debug神器
nmap <C-j> :action StepOver<CR>
nmap <C-k> :action Resume<CR>
nmap <C-h> :action StepOut<CR>
nmap <C-l> :action ForceStepInto<CR>
"移动专精
nnoremap <C-e> %
vmap <C-k> <C-y>
vmap <C-h> 10zh
vmap <C-l> 10zl
noremap vin vi"
"移动专精
"imap <C-j> <Esc>ja
"imap <C-k> <Esc>ka
"imap <C-h> <Esc>10zhi
"imap <C-l> <Esc>l10zla
imap <C-j> <Down>
imap <C-k> <Up>
imap <C-h> <Left>
imap <C-l> <Right>
noremap <S-Enter> <Esc>o
imap <S-Enter> <Esc>o
"imap <C-i> <CR>
"左右视野
nnoremap zH 50zh
nnoremap zL 50zl
"^$符号太难按了
map gh ^
map gl $
"代码提示
"imap <C-n> <ESC>:action HippieCompletion<CR>a
"imap <C-p> <ESC>:action HippieBackwardCompletion<CR>a
xnoremap <  <gv
xnoremap >  >gv
""""""""""""""""""""""""""""""""""""""重构篇""""""""""""""""""""""""""""""""""""""
" 设置leader键"
let mapleader=" "
"元素名称重构
noremap <Space>re ^W:action RenameElement<CR>
"移动重构
noremap <Space>mv :action Move<CR>
"成员变量转换为静态变量重构(配合移动重构有奇效)
noremap <Space>ms :action MakeStatic<CR>
"静态变量转换为成员变量重构
noremap <Space>ci :action ConvertToInstanceMethod<CR>
"内联重构(合并无效变量无效方法)
noremap <Space>il :action Inline<CR>
"抽取方法重构
noremap <Space>em :action ExtractMethod<CR>
"抽取接口重构
noremap <Space>ei :action ExtractInterface<CR>
"字段的访问限制
noremap <Space>ef :action EncapsulateFields<CR>
"引入临时变量
noremap <Space>iv :action IntroduceVariable<CR>
"引入常量
noremap <Space>ic :action IntroduceConstant<CR>
"引入方法参数
noremap <Space>ip :action IntroduceParameter<CR>
"引入字段
noremap <Space>if :action IntroduceField<CR>
"引入参数对象(指定参数)
noremap <Space>po :action IntroduceParameterObject<CR>
"方法下放到子类
noremap <Space>pd :action MemberPushDown<CR>
"方法上移到父类
noremap <Space>pu :action MembersPullUp<CR>
"文件名称重构
noremap <Space>RF :action RenameFile<CR>
"修改方法签名
noremap <Space>cs  :action ChangeSignature<CR>
"抽取类
noremap <Space>ec :action ExtractClass<CR>
"匿名类到内部类
noremap <Space>ai :action AnonymousToInner<CR>
""""""""""""""""""""""""""""""""""""""跳转篇""""""""""""""""""""""""""""""""""""""
"特殊变量跳转
nnoremap <Space>ts mm`m:action GotoSymbol<CR>
"url地址跳转
noremap  <Space>tu  mm`m:action Toolkit.GotoService<CR>
"动作跳转
nnoremap <Space>ta mm`m:action GotoAction<CR>
"文件跳转
noremap <Space>tf mm`m:action GotoFile<CR>
"测试类跳转
noremap <Space>tt mm`m:action GotoTest<CR>
"java类跳转
noremap <Space>tc mm`m:action GotoClass<CR>
"文本跳转
noremap <Space>tp mm`m:action FindInPath<CR>
"跳转下个报错处
noremap <Space>ne mm`m:action GotoNextError<CR>
"跳转上个报错处
noremap <Space>pe mm`m:action GotoPreviousError<CR>
"从子类方法跳到父类的方法
noremap <Space>gs mm`m:action GotoSuperMethod<CR>
"跳到方法实现
noremap <Space>gi mm`m:action GotoImplementation<CR>
"跳转到下个改动处
noremap <Space>g, mm`m:action JumpToLastChange<CR>
"跳转到上个改动处
noremap <Space>g; mm`m:action JumpToNextChange<CR>
"最近查看文件间相互跳转
noremap <Space>rf mm`m:action RecentFiles<CR>
"最近改动文件间相互跳转
noremap <Space>rF mm`m:action RecentChangedFiles<CR>
"项目之间的跳转(上一个)
noremap <Space>nw :action NextProjectWindow<CR>
"项目之间的跳转(下一个)
noremap <Space>pw :action PreviousProjectWindow<CR>
"跳转 需要安装AceJump插件
noremap <Space>tj mm`m:action AceWordAction<CR>
noremap <Space>jp mm`m:action AceDeclarationAction<CR>
""""""""""""""""""""""""""""""""""""""SQL篇""""""""""""""""""""""""""""""""""""""
"sql提交
noremap <Space>sc :action Console.Transaction.Commit<CR>
"sql回滚
noremap <Space>sr :action Console.Transaction.Rollback<CR>
"sql执行
noremap <Space>se :action Console.Jdbc.Execute<CR>
"sql执行计划
noremap <Space>ep :action Console.Jdbc.ExplainPlan<CR>
"sql-raw执行计划
noremap <Space>EP :action Console.Jdbc.ExplainPlan.Raw<CR>

"打开数据库日志窗口,前提安装了MyBatis Log Plugin插件
noremap <Space>sl :action TailMyBatisLog0<CR>
noremap <Space>SL :action ActivateMyBatisLogToolWindow<CR>
noremap <Space>AL :action TailMyBatisLog0<CR>:action ActivateMyBatisLogToolWindow<CR>
""""""""""""""""""""""""""""""""""""""运行篇""""""""""""""""""""""""""""""""""""""
"设置运行配置
nnoremap <Space>rc :action RunConfiguration<CR>
"debug上次运行的类
noremap <Space>dd :action Debug<CR>
"统计单元测试覆盖率运行上个类
noremap <Space>cc :action Coverage<CR>
"统计单元测试覆盖率运行当前(now)类
noremap <Space>cn :action RunCoverage<CR>
"项目停止运行
noremap <Space>sp   :action Stop<CR>
""""""""""""""""""""""""""""""""""""""Debug篇""""""""""""""""""""""""""""""""""""""
"开启或关闭当前行断点
noremap <Space>bp :action ToggleLineBreakpoint<CR>
"debug时快速计算表达式
noremap <Space>qe :action QuickEvaluateExpression <CR>
"debug强制返回
noremap <Space>fr :action Debugger.ForceEarlyReturn<CR>
"添加新的debug观察
noremap <Space>daw :action Debugger.AddToWatch<CR>
"debug强制运行到光标处
noremap <Space>fc :action ForceRunToCursor<CR>
"安装了JRebel且在JRebel debug下才生效,热更新
noremap <Space>hs :action Hotswap<CR>
"安装了JRebel的debug运行
noremap <Space>DD :action JRebel Debug<CR>
"去除所有断点在当前文件中
noremap <Space>rab :action Debugger.RemoveAllBreakpointsInFile<CR>
"去除所有断点
noremap <Space>raB :action Debugger.RemoveAllBreakpoints<CR>
"弹出帧
noremap <Space>df :action Debugger.PopFrame<CR>
"显示当前断点位置
noremap <Space>pp :action ShowExecutionPoint<CR>
"流追踪技术
noremap <Space>ds :action StreamTracerAction<CR>
"哑断点技术
noremap <Space>mb :action XDebugger.MuteBreakpoints<CR>
"条件断点编辑
noremap <Space>eb :action EditBreakpoint<CR>

""""""""""""""""""""""""""""""""""""""窗口篇""""""""""""""""""""""""""""""""""""""
"激活maven窗口
noremap <Space>AM  :action ActivateMavenToolWindow<CR>
"激活database窗口
noremap <Space>AD  :action ActivateDatabaseToolWindow<CR>
"激活todo的窗口
noremap <Space>AT   :action ActivateTODOToolWindow<CR>
"激活Favorites的窗口
noremap <Space>AF :action ActivateFavoritesToolWindow<CR>
"激活project的窗口
noremap <Space>AP :action ActivateProjectToolWindow<CR>
"激活git的窗口
noremap <Space>AG :action ActivateVersionControlToolWindow<CR>
"激活服务的窗口
noremap <Space>AS :action ActivateServicesToolWindow<CR>
"激活Breakpoints的窗口.
noremap <Space>AB :action ViewBreakpoints<CR>
"激活Rest的窗口(需要安装插件)
noremap <Space>AR :action ActivateRestServicesToolWindow<CR>
"激活debug的运行窗口
nnoremap <Space>wd :action ActivateDebugToolWindow<CR>
"激活run的运行窗口
nnoremap <Space>wr :action ActivateRunToolWindow<CR>
"隐藏窗口(windows hide)
nnoremap <Space>wh :action HideActiveWindow<CR>
"窗口最大化windows max
nnoremap <Space>mm :action MaximizeToolWindow<CR>
"隐藏所有窗口
noremap <Space>ha :action HideAllWindows<CR>
noremap <Space><Space> :action HideAllWindows<CR>
"激活窗口,选中当前位置
noremap <Space>si :action SelectInProjectView<CR>

""""""""""""""""""""""""""""""""""""""信息篇""""""""""""""""""""""""""""""""""""""
"弹出警告信息
noremap <Space>ed :action ShowErrorDescription<CR>
"弹出类型信息
noremap <Space>ti :action ExpressionTypeInfo<CR>
"弹出参数信息
noremap <Space>pi :action ParameterInfo<CR>
"快速显示当前方法信息
noremap <Space>jd :action QuickJavaDoc<CR>
"弹出文件结构信息
noremap <Space>fs mm`m:action FileStructurePopup<CR>
"显示maven的依赖层级信息
noremap <Space>sd  :action ShowUmlDiagram<CR>
"弹出方法调用层级信息
noremap <Space>ch :action CallHierarchy<CR>
"查找引用了当前方法的文件信息
nnoremap <Space>fu :action FindUsages<CR>
"查找方法内使用该变量的引用信息
nnoremap <Space>su :action ShowUsages<CR>
"弹出方法结构信息
noremap <Space>mh :action MethodHierarchy<CR>
"弹出项目结构信息
noremap <Space>ps :action ShowProjectStructureSettings<CR>
""""""""""""""""""""""""""""""""""""""项目篇""""""""""""""""""""""""""""""""""""""
"关闭项目
noremap <Space>cP :action CloseProject<CR>
noremap <Space>CP :action CloseProject<CR>
"打开项目
noremap <Space>oP :action OpenFile<CR>
noremap <Space>OP :action OpenFile<CR>
"新建项目
noremap <Space>nP :action NewProject<CR>
noremap <Space>NP :action NewProject<CR>
""""""""""""""""""""""""""""""""""""""实用工具篇""""""""""""""""""""""""""""""""
"代码环绕
noremap <Space>sw :action SurroundWith<CR>
"整理代码
noremap <Space>= :action ReformatCode<CR>
"弹出菜单
noremap <Space>sm :action ShowPopupMenu<CR>
"保存模板
noremap <Space>st :action SaveAsTemplate<CR>
"复制当前文件的绝对路径
noremap <Space>cap   :action CopyAbsolutePath<CR>
"复制当前文件名
noremap <Space>ccp   :action CopyContentRootPath<CR>
"优化导入
noremap <Space>oi :action OptimizeImports<CR>
"改变视图
nnoremap <Space>cv :action ChangeView<CR>
"关闭到只剩当前tab栏
noremap <Space>co :action CloseAllEditorsButActive<CR>
"g4文件生成代码(需要安装anltr4插件)
"noremap <Space>ag :action antlr.Generate<CR>:action antlr.Generate<CR>
"显示字节码
noremap <Space>bc   :action ByteCodeViewer<CR>
"快速翻译(需要安装翻译插件)
noremap <Space>qq   :action $TranslateTextComponent<CR>
"替换翻译(需要安装翻译插件)
noremap <Space>tr :action $TranslateAndReplaceAction<CR>
noremap <Space>gfu :action GenerateFullRestUrl<CR>
"添加到收藏文件
"noremap <Space>atf :action AddToFavorites<CR>
"复制文件元素
noremap <Space>cE :action CopyElement<CR>
"新建文件元素
noremap <Space>nE :action NewElement<CR>
"删除当前文件元素
noremap <Space>dE :action SafeDelete<CR>
nnoremap <Space>cp :action CheckinProject<CR>
"idea智能提示
nnoremap <Space><Space> :action ShowIntentionActions<CR>
"跳转下个报错处(这个与idea智能提示配起来,炒鸡爽)
nnoremap <Space><CR> :action GotoNextError<CR>
"新建类,比nE快
noremap <Space>nc :action NewClass<CR>
"打开项目设置
noremap <Space>ps :action ShowProjectStructureSettings<CR>
"露出文件夹
noremap <Space>ri :action RevealIn<CR>
"代码生成
noremap <Space>ga :action Generate<CR>
"删除未修改的tab
noremap <Space>cu :action CloseAllUnmodifiedEditors<CR>
"Codota查找类似代码,需要提前安装Codota插件
noremap <Space>oc :action OpenCodotaSearch<CR>
"Codota激活窗口,需要提前安装Codota插件
noremap <Space>AC :action ActivateCodotaToolWindow<CR>
"Codota激活窗口,需要提前安装Codota插件
noremap <Space>cl :action CodotaLeanSearchCrossRefAction<CR>
"CSDN万能工具,需要提前安装CSDN插件
noremap <Space>csdn :action SearchByCSDN<CR>
"大小写,驼峰,下划线,中划线转换
noremap <Space>uu :action de.netnexus.CamelCasePlugin.ToggleCamelCase<CR>
"替换
noremap <Space>rp :action ReplaceInPath<CR>
"查看代码git作者
noremap <Space>us :action Annotate<CR>
"打开ddl语句
noremap <Space>dl :action DatabaseView.OpenDdlInConsole<CR>
"大小写切换,必须要先安装插件
noremap <Space>u :action de.netnexus.CamelCasePlugin.ToggleCamelCase<CR>
" 显示git菜单
nnoremap <Space>gm :action Git.Menu<CR>
nnoremap <Space>te :action ActivateTerminalToolWindow<CR>
" 一键提交到test环境
nnoremap <Space>mrt :action com.github.novotnyr.idea.gitlab.quickmr.CreateMergeRequestAction<CR>
" 一键提交到uat环境
nnoremap <Space>mru :action com.github.novotnyr.idea.gitlab.quickmr.CreateMergeRequestAction2<CR>
nnoremap <Space>ah :action swapClassAction<CR>oyum install sudo -y;yum install telnet -y;yum install unzip -y;<Esc>o<Esc>pV9kd
"nnoremap <Space>ah :action Artha"sHotRetransformCommandAction<CR>|:normal oyum install unzip -y;<CR>p"+yy
nnoremap <Space>aw :action ArthasWatch<CR>
nnoremap <Space>at :action ArthasTrace<CR>
nnoremap <Space>dc :action ArthasJadCommandAction<CR>
nnoremap <Space>ss :action com.jetbrains.plugins.remotesdk.console.RunSshConsoleAction<CR>
nnoremap <Space>dn F,vt,d
nnoremap <Space>db T(vf,ld
nnoremap <Space>dm F,vt)d
nnoremap <Space>vn F,vt,
nnoremap <Space>vb T(vf,l
nnoremap <Space>vm F,vt)
nnoremap <Space>ex va{<Bar>:action EditorSelectWord<CR>:action EditorSelectWord<CR>:action EditorSelectWord<CR>:action EditorSelectWord<CR>

以上就是idea使用Vim的技巧大全分享的详细内容,更多关于idea使用Vim的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文