python中的ideavim有什么作用_IdeaVim插件施用技巧

2022-11-10 10:24:19 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

IdeaVim插件使用技巧在 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 分号退出插入模式,进入普通模式)这样,在任何时候只要连按两下ctrl 分号,就能保证必定在Vim模拟器的普通模式中。2. ScrollOff 参数启动Intellij后在Vim模拟器下输入命令 :set so=5 可以令屏幕滚动时在光标上下方保留5行预览代码(也就是光标会在第5行触发向上滚动,或者在倒数第5行触发向下滚动)。在代码窗口比较狭小时(例如单步跟踪调试时)非常方便。可惜仅在Vim模拟器开启时有效。3. 行号定位普通模式下输入 行号G 或 :行号 都能快速定位到某一行。区别在于前者在输入行号时屏幕上没有任何提示,后者则在Vim命令输入框中可以看到输入过程。(题外话:Sublime Text 2也是用 :行号 来快速定位到某行,应该是沿用了Vim的习惯)4. 进入修改进入插入模式的方式有很多,直接选用合适的方式进入插入模式比进入后再用箭头键移动光标要好。常用的有:o – 在当前行下方插入新行并自动缩进O – 在当前行上方插入新行并自动缩进 (普通模式下的大写字母命令用 shift 字母键 输入,下同)i – 在当前字符左方开始插入字符a – 在当前字符右方开始插入字符I – 光标移动到行首并进入插入模式A – 光标移动到行尾并进入插入模式s – 删除光标所在字符并进入插入模式S – 删除光标所在行并进入插入模式c – 删除光标所在位置周围某个范围的文本并进入插入模式。关于范围请看第5点,常用的组合有:caw – 删除一个单词包括它后面的空格并开始插入; ciw – 删除一个单词并开始插入; ci” – 删除一个字符串内部文本并开始插入; c$ – 从光标位置删除到行尾并开始插入; ct字符 – 从光标位置删除本行某个字符之前(保留该字符)并开始插入。等等。C – 删除光标位置到行尾的内容并进入插入模式 (相当于c$)r – 修改光标所在字符,然后返回普通模式R – 进入覆盖模式5. 范围操作某些普通模式的动作命令后面可以追加一些表示范围的指令,表示该动作将作用在整个范围上。这类命令常用的有: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< – 一组< >包含的文本,包括< >号本身同理类推: i0 命令组合将用粘贴内容替换光标处的一个单词,并停留在插入模式。b)在Windows下,寄存器 和 * 都代表系统剪贴板,可以互换使用,选一个顺手的即可。例如” yy命令组合可将当前行复制到系统剪贴板。ci”*命令组合则将系统剪贴板的内容替换字符串的内部文本。c) 寄存器1至9记录之前九次的删除大段文本,每次超过一行的删除操作都会导致这9个寄存器的内容发生位移,最近删除的文本会存入寄存器1。但只有删除超过1行时才会影响寄存器1至9,行内的删除内容则会被存入寄存器-(减号)。如果用q命令录制宏时不涉及跨行删除,可以在宏中直接使用这9个寄存器来暂存文本。(在Vim中,复制内容与录制宏共享同一套寄存器,因此我习惯把字母寄存器留给宏使用)d) 普通模式下小写p把寄存器内容复制到当前位置之后,大写P把寄存器内容复制到当前位置之前。e) 使用 :regs 命令可以列出当前所有寄存器的内容8.  一些插入模式下的常用快捷键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键9. 退出插入模式退出插入模式可以用 ESC 键,但键位太远。其实也可以用 Ctrl [ 键退出插入模式 。当然也可以用第1点自定义的Ctrl ;快捷键,但这不是标准vim按键,会养成不良习惯,不建议使用。10. 重复操作普通模式下按. (小数点)可重复上一次的修改操作& – 重复上一次的:s替换命令@@ – 重复上一次执行的宏11. 跳转Ctrl ] 跳转到当前标识符的定义位置 (相当于在当前光标位置的单词上按住ctrl用鼠标点击)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在匹配间切换。(结合前面第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 代码折叠zo – 打开折叠zc – 关闭折叠14 宏定义在IdeaVim中定义宏比Idea自带的宏功能要轻量许多。按在普通模式下 q 即可开始把后续按键序列录制到指定寄存器中(寄存器参考前面第7条)。录制完毕进入普通模式再按q键即可停止录制。之后用 @ 即可重放。需要注意的是宏和复制粘贴共用一套寄存器,因此在录制宏时就注意不要把当前宏正在使用的寄存器用来复制了。寄存器内容是自动保存的,重启Idea仍然生效。但IdeaVim没有导出宏独立保存的功能。因此最好把用来保存宏的寄存器和用来复制粘贴的寄存器分开,不要同一个寄存器有时用来记录宏,有时用来复制粘贴。我的习惯是键盘左手区用来保存一些长期使用的宏(比如说我有一个宏专门用来把pom.xml中的版本号抽取到property区域,原来的位置则改用${property}引用)。右手区的hjklnm键用来保存一些临时宏。yuiop五个寄存器保留用来复制粘贴。如果录制的宏不涉及删除大段代码,寄存器1至9也可以用来进行复制粘贴。执行一次宏后,可以用@@命令重复上一次执行的宏。在Idea中录制宏时,如果触发了代码自动完成,在自动完成列表启动的状态输入的字符不会被记录。因此最好在Setting -> Code Completion -> Autopopup code completion中把延迟设为500ms以上或干脆关掉。在录制宏的过程中避免触发代码自动完成功能。录制一些长期有效的宏时,开始录制后,最好先用0,^,T, F, $等命令把光标对齐到行首行末或某个特定起始位置(比如说用 F” 跳转到字符串的左边引号),再用一个f或/指令跳转到操作位置,这样的宏就不用必须把光标放在某个特定字符才能使用了。15. 一些常用组合技全选: ggvG调换两个字符位置: xp复制一行: yyp调换两行位置: ddp插入模式下到行尾继续输入(相当于End键): Ctrl o A 或 Ctrl [ A插入模式下到行首继续输入(相当于Home键): Ctrl o I 或 Ctrl [ I到类定义位置(适用于正确缩进的public,protected类) : ?^p回车16. 一些在目前版本已知没有实现的一些常用Vim功能(如果对Vim不熟悉可以跳过这节)a)let命令 (没有let命令就无法导出/导入寄存器内容,也就是无法导入宏)b):g命令 (在文本处理中很有用的一个命令,在编程中倒是不那么常用)c)!命令 (执行shell命令)d)大部分正则表达式标记 (例如 %V, v 等等)e) 某些多键命令双击最后一个字符表示作用于当前行。例如在Vim中gUU可以把当前行转换为大写,在IdeaVim中无效,实现同样功能可以先用V命令选中当前行,再用gU转换为大写。f)关于窗口操作的大部分命令 (Ctrl w系列命令, :split等)g)所有Vim脚本插件 (不过大部分可以用Idea自身的功能和插件来补偿)嗯,差点忘了,在普通模式下按u撤销上一个修改(相当于其他IDE的Ctrl z),按Ctrl r重做被撤销的修改。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187057.html原文链接:https://javaforall.cn

0 人点赞