@replit/codemirror-vim,OpenIDEA 在它之上加了与 IDE 的集成:保存和关闭标签页的 Ex 命令、运行 IDE 命令的 :action、IdeaVim 风格的 rc 文件,以及快捷键冲突表。
开启
以下任一方式均可:- 工具 › Vim,用来开启或关闭。
- 状态栏的 Vim 微件:单击后勾选 已启用。
- 设置 › 编辑器 › Vim › 启用 Vim 模拟。
NORMAL、INSERT、VISUAL、V-LINE、V-BLOCK 或 REPLACE。
支持哪些功能
通过 codemirror-vim 可以使用常规的 Vim 编辑方式:Normal、Insert、Visual(字符、行、块)和 Replace 模式,带计数的移动、操作符和文本对象,寄存器、标记、. 重复,用 /、?、*、# 搜索,以及它自带的 :s、:g、:sort 等 Ex 命令。
OpenIDEA 额外提供这些 Ex 命令:
rc 文件
Vim 模式开启时(如果上次是开启状态,启动时也会),OpenIDEA 读取~/.openideavimrc;这个文件不存在时读取 ~/.ideavimrc。只想对 OpenIDEA 生效、不影响 IntelliJ IDEA 的配置,就写在 ~/.openideavimrc 里。
修改文件后,运行 重新加载 .ideavimrc(在状态栏微件或查找操作中),或者在 设置 › 编辑器 › Vim 中单击 重新加载。设置页会显示读取的是哪个文件、包含多少个映射,以及每一行被忽略的内容和原因。
支持的写法:
其他内容(函数、
if、autocmd、插件命令等)都会被标记为已忽略,不会执行。
把按键映射到 IDE 命令
映射的右侧可以按 IdeaVim 的写法运行 IDE 命令:GotoDeclaration、GotoImplementation、FindUsages、ReformatCode、RenameElement、ShowIntentionActions、SearchEverywhere、RecentFiles、Run、Debug、ToggleLineBreakpoint、SplitVertically 等 IdeaVim 命令 ID 会被转换成对应的 OpenIDEA 命令。也可以直接写 OpenIDEA 自己的命令 ID,例如 :action code.reformat。命令 ID 可以在 快捷键参考 或 设置 › 按键映射 中查到。
当 leader 映射以 Space、,、;、Backspace 或 Delete 开头时,这个键上原本的 Vim 命令会被停用,以便映射能完整输入。
快捷键冲突
有些键既是 Vim 命令又是 IDE 快捷键,例如Ctrl+R(Vim 中是重做)或 Ctrl+E。设置 › 编辑器 › Vim 的 快捷键冲突 表列出 Vim 用到的每个键以及绑定在它上面的 IDE 操作,可以为每个键选择 处理程序:
- Vim:Vim 模式开启且焦点在编辑器中时,按键交给编辑器。
- IDE:先执行 IDE 操作;没有可用的 IDE 操作时,按键仍交给 Vim。
Esc、Ctrl+C、Ctrl+N、Ctrl+P、Ctrl+Q 和 Ctrl+T 交给 IDE,其余交给 Vim。
限制
- rc 文件只支持上面列出的写法。IdeaVim 自己的选项(例如
ideajoin)以及surround、commentary、easymotion等 IdeaVim 扩展都不可用。 - Vim 模式是整个 IDE 的设置,不能只对某个项目或某种文件类型开启。
:q和:wq关闭的是编辑器标签页,而不是窗口。