说实话,Intellij IDEA 自带的 Vim 插件真心不错!
共 3141字,需浏览 7分钟
·
2020-07-26 00:14
程序员的成长之路互联网/程序员/技术/资料共享 关注
阅读本文大概需要 11 分钟。
作者:kidneyball链接:iteye.com/blog/kidneyball-1828427在 IDEA Intellij小技巧和插件 一文中简单介绍了一下IdeaVim插件。在这里详细总结一下这个插件在日常编程中的一些常用小技巧。供有兴趣使用这个插件,但对Vim还不十分熟悉的朋友参考。当然基本的hjkl移动光标和几种常见模式等等基本概念就略过不提了。为了确保只包含常用操作,这里提到的技巧都没有从现成文档里抄,而是凭记忆列出(不常用自然就不记得了)。估计会有所遗漏,慢慢再补充。1. 切换Vim模拟器状态这个插件允许设置一个快捷键一键开启或关闭,在切换模式时会同时自动切换keymap,十分方便。默认键位是Ctrl+Alt+V,但这个键位覆盖了很常用的“抽取局部变量”功能,建议重设,在setting->keymap中查找VIM Emulator即可。由于开启和关闭状态分别使用两套keymap,因此两套都需要设定。可以把两套keymap下的都设为一样的键,也就是用同一个键切换。但个人建议设为不同的键,这样能清楚知道当前处于那种模式中。并且,如果在开启Vim的插入模式下关闭Vim模拟器,下次进入时仍然是插入模式,比较混乱(因为你关闭模拟器就是为了使用默认keymap输入大段代码,重新开启Vim模拟器就是为了使用普通模式下的命令)。因此建议把Vim keymap中的Exit Insert Mode设为与另一个keymap的Vim Emulator相同的键(也就是进入Vim模拟器的快捷键)。例如,我使用的设定是:
Default keymap -> Vim Emulator : Ctrl+; (用Ctrl+分号开启Vim模拟器)
Vim keymap -> Vim Emulator : Ctrl+, (用Ctrl+逗号关闭Vim模拟器)
Vim keymap -> Vim Emulator : Ctrl+; (用Ctrl+分号退出插入模式,进入普通模式)
set so=5
o - 在当前行下方插入新行并自动缩进
O - 在当前行上方插入新行并自动缩进 (普通模式下的大写字母命令用 shift+字母键 输入,下同)
i - 在当前字符左方开始插入字符
a - 在当前字符右方开始插入字符
I - 光标移动到行首并进入插入模式
A - 光标移动到行尾并进入插入模式
s - 删除光标所在字符并进入插入模式
S - 删除光标所在行并进入插入模式
c<范围> - 删除光标所在位置周围某个范围的文本并进入插入模式。关于范围请看第5点,常用的组合有:caw - 删除一个单词包括它后面的空格并开始插入;ciw - 删除一个单词并开始插入;ci" - 删除一个字符串内部文本并开始插入;c$ - 从光标位置删除到行尾并开始插入;ct字符 - 从光标位置删除本行某个字符之前(保留该字符)并开始插入。等等。
C - 删除光标位置到行尾的内容并进入插入模式 (相当于c$)
r - 修改光标所在字符,然后返回普通模式
R - 进入覆盖模式
d<范围> - 删除一定范围内的文本
c<范围> - 删除一定范围内的文本并进入插入模式
y<范围> - 将范围内的文本放入0号和"号注册栏
v<范围> - 选择范围内的文本
=<范围> - 自动缩进范围内的文本
gU<范围> - 将范围内的字符转换为大写
gu<范围> - 将范围内的字符转换为小写
><范围> - 将范围中的内容缩进一格
<<范围> - 将范围中的内容取消缩进一格
空格 - 光标所在位置字符。(例如 gU空格 - 将光标位置字符转为大写)
重复某些动作命令 - 光标所在行。 (例如dd删除一行,yy复制一行,cc删除一行文本并开始插入,>> 当前行缩进一格,==自动缩进当前行)
$ - 从光标位置到行尾
^ - 从光标位置到行首,不包含缩进空白
0 - 从光标位置到行首,包含缩进空白
gg - 从光标位置到文件开头
G - 从光标位置到文件结尾
% - 从光标位置到另一边匹配的括号
f<字符> - 从光标位置到光标右边某个字符首次出现的位置,包括该字符
F<字符> - 从光标位置到光标左边某个字符首次出现的位置,包括该字符
t<字符> - 从光标位置到光标右边某个字符首次出现的位置,包括该字符
F<字符> - 从光标位置到光标左边某个字符首次出现的位置,包括该字符
/正则表达式 - 从光标位置到下一个匹配正则表达式的位置(跨行)
?正则表达式 - 从光标位置到上一个匹配正则表达式的位置(跨行)
aw - 一个单词加一个空格 (a可理解为“一个”,下同)
iw - 一个单词 (i可理解为in,下同)
a" - 一个字符串包括双引号
i" - 一个字符串内部文本
a< - 一组< >包含的文本,包括< >号本身
同理类推:i<, a[, i[, a(, i(
- 注意:真正vim中的it范围(一对xml标签内部)在ideaVim中不生效。
v - 进入字符选择模式, V - 进入行选择模式, Ctrl+v - 进入块选择模式。
Ctrl+h - 删除光标左边字符
Ctrl+w - 删除光标左边的单词
Ctrl+y - 复制上方的一个字符
Ctrl+e - 复制下方的一个字符
Ctrl+r 0 - 插入前一次用y命令寄存的内容
Ctrl+r * - 插入系统剪贴板的内容
Ctrl+r <寄存器名称> - 插入指定寄存器的内容
Ctrl+a - 插入前一次插入模式所键入的内容
Ctrl+o - 执行一个普通模式下的命令然后返回插入模式。 例如 Ctrl+o A 相当于按 End键, Ctrl+o I相当于按Home键
& - 重复上一次的:s替换命令
@@ - 重复上一次执行的宏
Ctrl+] 跳转到当前标识符的定义位置 (相当于在当前光标位置的单词上按住ctrl用鼠标点击)(结合前面第5点,你也许注意到了,在指定范围时,使用跳转命令将指定一个从光标位置到跳转目标的区域)12 书签在普通模式下按 m<小写字母> 即可定义书签,按 `<字母> 则可跳转到某个书签的精确位置,按 ‘<字母>可跳转到某个书签所在行的行首(用来录制宏时比较有用)。最常用的自然是mm, mn, mj, mk, ml这几个顺手的键位。真正的vim中的全局书签 m<大写字母> 在目前IdeaVim版本中不生效。需要定义全局书签可以使用Idea原本的 F11 + 数字 方式13 文本替换使用 :s/正则表达式/替换文本/ 可在本行内替换首次出现的匹配使用 :s/正则表达式/替换文本/g 在本行内替换所有出现的匹配使用 :%s/正则表达式/替换文本/g 在当前文件内替换所有出现的匹配在可视模式下选中文本后,使用:’<,’>s/正则表达式/替换文本/g 命令可在选中区域中替换文本。其中’<,’>部分在可视模式下,按:冒号后自动加入,直接输入s命令即可。但有效区域只能以行为单位。真正Vim中的 %V 标志在IdeaVim中不生效。11 代码折叠
Ctrl+o 回退一步 (go back)
Ctrl+i 前进一步 (go forward)
`. 跳转到之前修改位置
`` 在前一次跳转位置与当前位置间切换
行号G 或 :行号<回车> 跳转到某一行
gg 跳转到文件开头
G 跳转到文件末尾
H 跳转到屏幕顶端(如果设置了set so=n,则跳转到第n行)
L 跳转到屏幕底端(如果设置了set so=n,则跳转到倒数第n行)
M 跳转到屏幕中间
f 或 F 跳转到本行某个字符,小写f向右查找,大写F向左查找。用;或,在匹配间切换
t 或 T 跳转到本行某个字符之前,小写t向右查找,大写T向左查找。用;或,在匹配间切换
/正则表达式 跳转到下一个匹配。用n或N在匹配间切换。
?正则表达式 跳转到上一个匹配。用n或N在匹配间切换。
zo - 打开折叠
zc - 关闭折叠
全选:ggvG
调换两个字符位置:xp
复制一行:yyp
调换两行位置:ddp
插入模式下到行尾继续输入(相当于End键):Ctrl+o A 或 Ctrl+[ A
插入模式下到行首继续输入(相当于Home键):Ctrl+o I 或 Ctrl+[ I
到类定义位置(适用于正确缩进的public,protected类) :?^p回车
a)let命令 (没有let命令就无法导出/导入寄存器内容,也就是无法导入宏)
b):g命令 (在文本处理中很有用的一个命令,在编程中倒是不那么常用)
c)!命令 (执行shell命令)
d)大部分正则表达式标记 (例如 \%V, \v 等等)
e) 某些多键命令双击最后一个字符表示作用于当前行。例如在Vim中gUU可以把当前行转换为大写,在IdeaVim中无效,实现同样功能可以先用V命令选中当前行,再用gU转换为大写。
f)关于窗口操作的大部分命令 (Ctrl+w系列命令, :split等)
g)所有Vim脚本插件 (不过大部分可以用Idea自身的功能和插件来补偿)
推荐阅读:
微信扫描二维码,关注我的公众号
写留言朕已阅