IdeaVim 配置与使用指南

一、什么是 IdeaVim?

IdeaVim 是 JetBrains 系列 IDE(如 IntelliJ IDEA, WebStorm, PyCharm 等)中的一个插件,让你在 IDE 里使用 Vim 的按键习惯,大大提升效率。

安装方法:
在 IDE 中打开 设置(Settings)插件(Plugins) → 搜索 IdeaVim → 安装并重启。

Vim 的各种模式

Vim 主要有以下几种模式,每种模式有不同的快捷键:

模式名称 进入方式 作用
普通模式(Normal) Esc 执行命令、移动光标
插入模式(Insert) iao 输入文本
可视模式(Visual) vVCtrl+v 选中文本
命令模式(Command-line) : 执行 Vim 命令
替换模式(Replace) R 逐字符替换文本
选择模式(Select) gh 类似可视模式,但可以直接输入替换文本
Ex 模式(Ex mode) Q 进入 Vim 的 Ex 界面(类似命令模式,但适用于批量处理)


二、基础配置(.ideavimrc)

IdeaVim 支持使用 .ideavimrc 文件(类似于 Vim 的 .vimrc),配置自己喜欢的快捷键、模式、增强功能。

一般放在用户根目录下,比如:

  • Windows: C:\Users\你的用户名\.ideavimrc

  • Linux/macOS: ~/.ideavimrc

推荐基础配置

"" .ideavimrc - Matt Chapman


"" 基础设置
"" ========================================================

set scrolloff=10         " 保持光标上下方各 10 行的间距,避免视野紧张
set linenumber           " 显示行号
set showmode             " 显示当前 Vim 模式(Normal/Insert 等)
set showcmd              " 显示正在输入的命令

set smartcase            " 搜索时智能大小写(有大写时区分大小写)
set incsearch            " 搜索时实时跳转到匹配项
set hlsearch             " 搜索后高亮所有匹配项

set visualbell           " 出错时使用视觉提示,而非响铃

" 使用系统剪贴板
set clipboard+=unnamed   " 与系统剪贴板共享内容(如复制粘贴)

" 设置 leader 键为空格
let mapleader = " "


"" 插件相关设置
"" ========================================================

set surround             " 启用 surround 插件(包围操作)
set highlightedyank      " 启用高亮 yank(复制)内容
set sneak                " 启用 Sneak 快速跳转插件
set nerdtree             " 启用 NERDTree 文件树插件

" Easymotion 插件设置
set easymotion           " 启用 easymotion 插件(增强跳转)
set notimeout            " 禁用按键超时(提高组合键连按响应)

" Which-key 插件设置
set which-key                          " 启用 which-key 插件
let g:WhichKey_FontSize = 16           " 菜单字体大小
let g:WhichKey_CommandColor = "#41ead4"     " 命令颜色
let g:WhichKey_PrefixColor = "#f335b2"      " 前缀颜色
let g:WhichKey_SortOrder = "by_key_prefix_first" " 按前缀排序

" Which-key 描述设置
let g:WhichKeyDesc_leader = " Leader 键菜单"

let g:WhichKeyDesc_leader = "x 打开文件管理器"

let g:WhichKeyDesc_easymotion = "j 使用 Easymotion 跳转"
let g:WhichKeyDesc_easymotion_prefix = ""

let g:WhichKeyDesc_comment = "c 注释行"

let g:WhichKeyDesc_fold = "z 折叠"
let g:WhichKeyDesc_fold_all = "zc 折叠所有区域"
let g:WhichKeyDesc_unfold_all = "zo 展开所有区域"

let g:WhichKeyDesc_window = "w 窗口操作"
let g:WhichKeyDesc_window_split_vertically = "wv 垂直分屏"
let g:WhichKeyDesc_window_split_horizontally = "wh 水平分屏"
let g:WhichKeyDesc_window_split_unsplit = "wu 取消分屏"
let g:WhichKeyDesc_window_split_move_editor = "wm 移动编辑器到另一个分组"

let g:WhichKeyDesc_display = "d 显示选项"
let g:WhichKeyDesc_zen_mode = "dz Zen 模式"
let g:WhichKeyDesc_df_mode = "dd 专注模式"
let g:WhichKeyDesc_fullscreen = "df 全屏模式"

let g:WhichKeyDesc_action= "a 动作"
let g:WhichKeyDesc_action_context_menu = "am 打开上下文菜单"
let g:WhichKeyDesc_action_search = "as 打开命令面板"

let g:WhichKeyDesc_file_quickLook = " 最近文件"

let g:WhichKeyDesc_file_nav = "f 文件导航"
let g:WhichKeyDesc_file_nav_goto_file = "ff 跳转到文件"
let g:WhichKeyDesc_file_nav_goto_content = "fc 查找文件内容"
let g:WhichKeyDesc_file_nav_show_recent_files = "fr 最近使用文件"
let g:WhichKeyDesc_file_nav_show_recent_locations = "fl 最近位置"

let g:WhichKeyDesc_close_tab = "q 关闭当前标签页"

let g:WhichKeyDesc_refactoring = "r 重构菜单"
let g:WhichKeyDesc_refactoring_rename = "rn 重命名元素"
let g:WhichKeyDesc_refactoring_method = "rm 提取方法"
let g:WhichKeyDesc_refactoring_variable = "rv 引入变量"
let g:WhichKeyDesc_refactoring_field = "rf 引入字段"
let g:WhichKeyDesc_refactoring_signature = "rs 更改函数签名"
let g:WhichKeyDesc_refactoring_all = "rr 打开重构列表"

let g:WhichKeyDesc_goto = "g 跳转"
let g:WhichKeyDesc_goto_declaration = "gd 跳转到定义"
let g:WhichKeyDesc_goto_type_declaration = "gy 跳转到类型定义"
let g:WhichKeyDesc_goto_implementation = "gi 跳转到实现"
let g:WhichKeyDesc_goto_usages = "gu 查看用法"
let g:WhichKeyDesc_goto_test = "gt 跳转到测试"
let g:WhichKeyDesc_goto_back = "gb 返回上一步"
let g:WhichKeyDesc_goto_forward = "gf 前进一步"

let g:WhichKeyDesc_git = "g Git 操作"
let g:WhichKeyDesc_git_commit = "gc 提交代码"
let g:WhichKeyDesc_git_status = "gs 查看 Git 状态"
let g:WhichKeyDesc_git_branches = "gb 查看分支列表"

let g:WhichKeyDesc_errors = "e 错误导航"
let g:WhichKeyDesc_errors_next = "en 跳转到下一个错误"
let g:WhichKeyDesc_errors_prev = "ep 跳转到上一个错误"


"" 快捷键映射
"" ========================================================

inoremap jk                             " 插入模式按 jk 退出

" 标签页切换
nnoremap  :tabnext                  " Alt+n 切换到下一个标签
nnoremap  :tabprev                  " Alt+p 切换到上一个标签

" 窗口方向跳转
nnoremap  h                        " Alt+h 跳转到左侧分屏
nnoremap  l                        " Alt+l 跳转到右侧分屏
nnoremap  k                        " Alt+k 跳转到上方分屏
nnoremap  j                        " Alt+j 跳转到下方分屏

" 方法间跳转(需 IDE 支持)
nnoremap [[ (MethodUp)              " 跳转到上一个方法
nnoremap ]] (MethodDown)            " 跳转到下一个方法

" 可视模式缩进优化
vnoremap <  >gv                              " 保持选择状态的右缩进

" 执行寄存器 q 中的宏
nnoremap qj @q

" 弹窗菜单导航(补全提示)
inoremap  (PopupMenu-selectNext)   " 下一个补全项
inoremap  (PopupMenu-selectPrev)   " 上一个补全项


"" Leader 快捷键命令
"" ========================================================

" 注释行
map c (CommentByLineComment)

" Easymotion 快速跳转
map j (easymotion-s)

" 打开 NERDTree 文件浏览器(q 退出)
map x :NERDTreeToggle

" 折叠操作
map zc :action CollapseAllRegions
map zo :action ExpandAllRegions

" 窗口分屏操作
map wv (SplitVertically)
map ws (SplitHorizontally)
map wu (Unsplit)
map wm (MoveEditorToOppositeTabGroup)

" 显示模式切换
map dd (ToggleDistractionFreeMode)
map dz (ToggleZenMode)
map df (ToggleFullScreen)

" 动作菜单
map am (ShowIntentionActions)
map as (SearchEverywhere)

" 文件导航
map ff (GotoFile)
map fr (RecentFiles)
map fc (FindInPath)
map  (RecentFiles)
map fl (RecentLocations)
map fs (NewScratchFile)

" 关闭当前标签
map q (CloseContent)

" 重构操作
map rn (RenameElement)
map rm (ExtractMethod)
map rv (IntroduceVariable)
map rf (IntroduceField)
map rs (ChangeSignature)
map rr (Refactorings.QuickListPopupAction)

" 跳转功能
nmap gd (GotoDeclaration)
nmap gy (GotoTypeDeclaration)
nmap gi (GotoImplementation)
nmap gu (ShowUsages)
nmap gt (GotoTest)
nmap gf (Back)
nmap gb (Forward)

" Git 操作
map gc (CheckinProject)
map gs (ActivateVersionControlToolWindow)
map gb (Git.Branches)

" 错误导航
map en (ReSharperGotoNextErrorInSolution)
map ep (ReSharperGotoPrevErrorInSolution)

三、常用操作

               

操作  快捷键
保存 :w 或
退出   :q
保存并退出 :wq
撤销 u
重做 
快速移动  h 左 j 下 k 上 l 右
搜索   /关键词
搜索下一个 n
搜索上一个 N
复制(可视模式) y
粘贴   p
剪切(可视模式) d
可视选择 v
块选择(列模式) Ctrl+v

四、常见问题

1. 复制成功但粘贴失败?

Vim(包括 IdeaVim)复制内容,是放在Vim自己的寄存器里的,
如果没有设置系统剪贴板共享,是不能用 Ctrl+V 粘贴到外面的!

解决: 打开你的 ~/.ideavimrc 文件,加上这一行:

set clipboard=unnamedplus

然后保存,重启 IntelliJ IDEA

这样以后用 y 复制,就直接同步到系统剪贴板啦~可以 Ctrl+V 粘到微信、浏览器、VS Code 等外部程序。

2. 插件指令不完整?

  • 问题:IdeaVim 并没有完整复刻 Vim 的所有命令和功能。

  • 解决:查看 IdeaVim 官方文档 或使用 :help 查看支持的命令列表。


五、实用技巧

  • 基本模式切换

    • Esc:返回普通模式。

    • i:进入插入模式。

    • v:进入可视模式(字符选择)。

    • V:进入行选择模式。

    • Ctrl + W:在普通模式下用来快速移动光标到下一个单词、删除单词等。

  • 跳转与搜索

    • gg:跳转到文件开头。

    • G:跳转到文件末尾。

    • /:搜索文本,按 n 查找下一个,按 N 查找上一个。

    • Ctrl + F:在文件内进行查找(相当于 Vim 的 /,但在普通模式下)。

    • Ctrl + R:使用历史搜索。

  • 多光标编辑

    • Ctrl + D:选中下一个相同的词。

    • Ctrl + N:跳到下一个匹配的光标位置。

  • 命令模式

    • ::进入命令模式,你可以运行类似于 w(保存)、q(退出)等 Vim 命令。

    • :w:保存文件。

    • :q:退出文件。

    • :wq:保存并退出。

  • 撤销与重做

    • u:撤销操作。

    • Ctrl + R:重做操作。

  • 修改光标移动方式

    • Ctrl + f:滚动页面一个窗口。

    • Ctrl + b:滚动页面一个窗口向上。

    • Ctrl + d:向下滚动半个窗口。

    • Ctrl + u:向上滚动半个窗口。

  • 窗口分割

    • Ctrl + w 再按 s:水平分割窗口。

    • Ctrl + w 再按 v:垂直分割窗口。

    • Ctrl + w 再按 q:关闭当前窗口。


六、插件推荐

 

已内置的功能

功能 对应设置 是否需额外安装插件 描述
Surround set surround 改变文本“包围符号”,如引号括号等(来自 vim-surround)
Highlighted Yank set highlightedyank 复制(yank)时高亮被复制的区域
NerdTree set nerdtree 使用类似 Vim 的方式控制项目结构视图(注意:实际上在 IDEA 中不是使用真正的 NerdTree,而是通过模拟行为达成类似效果)
Which-Key set which-key 类似 Emacs/Vim 中的 which-key,提示后续可用快捷键和含义

需要额外安装插件的功能:

功能 需安装插件 描述
Sneak  IdeaVim Sneak 在多行中快速跳转,输入两个字符定位,替代 f/F/t/T 方式搜索。
EasyMotion IdeaVim-EasyMotionAceJump 高效跳转定位,输入字符后高亮出现所有匹配,并用快捷键快速跳转。AceJump 是依赖库。

 

你可能感兴趣的:(java-ee,intellij-idea)