你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

IntelliJ IDEA替换所有文本?试试IdeaVim插件一键搞定

发布时间:2026-05-28

浏览次数:0

链接:iteye.com/blog/-

于《IDEA 小技巧和插件》这一文中有关于插件的初步概要介绍。在此处, 针对该插件于普通日常编程期间的一些经常会用到的小技巧予以详尽归纳总结。

是供那些有兴趣去使用这个插件, 然而对Vim却还并非十分熟悉的朋友去参考的, 当然啦, 像基本的hjkl移动光标以及几种常见模式等之类的基本概念就省略不说了。

这儿所提及的技巧, 为了保证仅涵盖常用操作, 并非抄袭自现成文档, 而是凭借记忆进行罗列, 不常用的自然就记不得了, 是这样的情况。

估计会有所遗漏,慢慢再补充。

1. 切换Vim模拟器状态

存在这样一个插件, 它赋予了设置一个快捷键进而一键开启或者关闭的能力, 于切换模式之际会同步进行自动切换, 此情形极为便利, 其默认的键位乃是Ctrl + Alt + V, 然而该键位将颇为常用的“抽取局部变量”功能予以覆盖了, 故而建议重新设置, 去往该插件的->之中查找VIM便可达成。

开启状态与关闭状态各自使用两套, 所以两套都得进行设定。能够把两套下面的设定为相同的键, 也就是借助同一个键来切换。不过, 个人提议设定为不同的键, 如此一来就能清晰知晓当下处于哪种模式当中。并且, 要是在开启Vim的插入模式之际关闭Vim模拟器, 下次进入的时候依旧是插入模式, 颇为混乱(因为你关闭模拟器是为了运用默认输入大段代码, 重新开启Vim模拟器是为了运用普通模式下的命令)。

因此提出如下建议, 即把Vim里的, Exit Mode设置成, 等同于另一个Vim的键, 那个也就是, 进入Vim模拟器时所使用的快捷键。

例如,我使用的设定是:

Default keymap -> Vim Emulator : Ctrl+;     (用Ctrl+分号开启Vim模拟器)
Vim keymap -> Vim Emulator : Ctrl+,    (用Ctrl+逗号关闭Vim模拟器)
Vim keymap -> Vim Emulator : Ctrl+;    (用Ctrl+分号退出插入模式,进入普通模式)

如此一来, 于任何时刻, 只要接连按下两下ctrl与分号, 便可以确保必然处于Vim模拟器的普通模式里面。

2. 参数

启动后在Vim模拟器下输入命令 :

set so=5

屏幕滚动之际, 能够让光标上下方留存5行预览代码, 即当光标处于第5行时会引发向上滚动, 或者当光标处于倒数第5行时会激发向下滚动。

当处于代码窗口较为狭小的状况下, 此状况如同单步跟踪调试时的情景,它展现出了显著的便利性, 只可惜这种便利性仅仅在Vim模拟器开启的条件下才能够生效。

3. 行号定位

普通模式下输入 行号G 或 :行号 都能快速定位到某一行。

一种不同在于前者于此在加入行号之际屏幕上面并未有着任何的提示, 另一种不同在于后者在Vim指令里面是能够看到录入进程的。

(题外话: 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< - 一组< >包含的文本,包括< >号本身
同理类推:i<, a[, i[, a(, i(

使用 / 或者? 请求进行查找之际, 正则表达式于默认状况下对大小写敏感, 要是有需求使其不敏感, 能于正则表达式起始之处添加上 \c 标识。

比如说, `/\cabc` 能够匹配到 `ABC`。接下来所提及的 `s` 命令, 同样是适用的。

6. 选择文本

于Vim里, 要选择文本就得进入“可视模式”(Mode), 此名称颇为奇特, 其由来据说在于Vim的前身Vi中, 选择的区域是不是可见的。

在Vim中选择区域会高亮显示,因此称为“可视模式”。

v - 进入字符选择模式, V - 进入行选择模式, Ctrl+v - 进入块选择模式。

当处于相应模式之时, 移动光标从而能够选中文本。在这个过程当中, 按o键可使光标于选区两端进行切换。

先是在块选择模式里, 选中多行, 紧接着按I或者A, 之后输入文本, 再去退出插入模式, 如此一来, 所输入的文本会自主性地加入到每一行的开头, 或者是结尾。

7. 复制粘贴

于Vim模式当中, 复制粘贴并非径直运用系统的剪贴板, 而是借助Vim所提供的多个“寄存器”, 每一个寄存器皆是用一个字符予以表示的。

在关于寄存器的详细说明方面, 能够查看的地方是这里, 而此处所指的是http://blah..com/2006/04/27// , 这是随便的一个网页, 在此处简单列出一些常用的操作技巧。

(留意, vim运用双引号”当作选择寄存器的指令, 所以下文里的双引号皆指于普通模式下按双引号键)。

a)使用y命令把文本存进寄存器之后, 假设要在其他地方替换原来的内容, 能够先运用v命令选中原来的内容, 接着使用p命令粘贴。

仅仅是在头一遭进行粘贴之后, 那默认的寄存器"会被替换成方才删掉的内容。要是拟再次粘贴先前复制的内容, 就得运用 “0p 命令组合去复制。

这也能够在进入插入模式之后, 运用Ctrl+r 0去进行复制。如同ciw0命令组合一般, 它会把粘帖上去的内容换成光标所在位置的一个单词, 而且会停留在插入模式下。

b)本人, 是这样的, 寄存器当中, 那个加号以及星号, 它们都表示系统剪贴板, 这两者是能够相互交换来使用的, 就从中挑选出一个用着顺手的就行。

比如说, “+yy”这个命令组合能够把当前行复制到系统剪贴板, 而“ci”*命令组合会将系统剪贴板当中的内容去替换字符串的内部文本。

c) 寄存器1到9, 记录着先前九次的删除大篇幅文本, 每一次超出一行的删除举动, 都会致使这9个寄存器的内容产生位移intellij idea替换所有文本,而最近被删除的文本会被存入寄存器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 便可用来定义书签, 按下 ` 能够促使跳转到某个书签的精准位置, 按下 ‘ 可实现跳转到某个书签所处行的行首(此情况在用于录制宏时颇具益处)。

顺手的, 最常用的, 是k这几颗, 很顺手的, 键位。

真正于vim里的全局书签m, 在当下版本中是不起作用的。若要去定义全局书签, 能够运用Idea原本的F11加数字这种方式。

13 文本替换

采用 :s/正则表达式/替换文本/ 的方式, 能够于本行之中替换首次出现的相匹配内容。

于本行之中。借助 :s/正则表达式/替换文本/g 去替换所有出现的匹配。

通过使用 :%s/正则表达式/替换文本/g 实现在当前文件之内进行所有出现匹配的替换。

处于可视模式之时, 将文本选中了以后运用这样一个命令, 也即是使用 : ’s / 正则表达式 / 替换文本 / g , 能够在被选中的区域里面去把文本替换掉。

在其中的’部分处于可视状态之下时, 当按:冒号接着就会自动添加入内, 仅仅直接输入s命令便可以达成。然而有效得区域仅仅能够以行为作为单位来进行操作。

真正Vim中的 %V 标志在中不生效。

11 代码折叠

zo - 打开折叠
zc - 关闭折叠

14 宏定义

在中定义宏比Idea自带的宏功能要轻量许多。

于普通模式里, 按一下q, 便可起始将后续按键一系列依次续录情形, 录入至指定寄存器当中(寄存器情况参照前面第7条所讲)。当录制完全结束之后, 进入一般性运行模式, 此阶段再按q这个键, 就能够终止之前开展的录制操作。

随后借助@便可进行重放, 特此要重视那个对于宏以及复制粘贴而言共同使用同一套寄存器的状况, 所以在录制宏之际就得留意别把当前宏正所运用的寄存器用于复制操作。

寄存器当中的内容是会自动进行保存的, 要是电脑重启了Idea, 它依旧会生效。然而它是没有导出宏可以进行独立保存的功能的。所以说最好要把用来保存宏的寄存器以及用来复制粘贴的寄存器给区分开来, 不要让同一个寄存器在有的时候用来进行记录宏, 而在另外的时候又用来进行复制粘贴。我的习惯是把键盘左手区用来保存一部分长期会使用到的宏(比如说我存在一个宏专门是用来将pom.xml里的版本号提取出来到区域。在原来的位置则变换成使用${}引用)。

用来保存一些临时宏的是右手区的键 , 保留用来复制粘贴的是yuiop五个寄存器。倘若录制的宏并不涉及删除大段代码 , 寄存器1至9同样能够用来施行复制粘贴。

执行一次宏后intellij idea替换所有文本,可以用@@命令重复上一次执行的宏。

在Idea里头录制宏之际倘若触发了代码自愿达成, 于自愿达成列表启动的状况下输入的字符不会被记载。所以最好在进到名为 -> Code -> code 的选项那里把延迟设置为500ms开外或者爽性关了。 在录制宏这个阶段要防止触发代码自愿达成功能。

录制那些长期有效的宏之际, 开始录制以后, 最好先是采用0, ^, T, F, $等这般的命令, 将光标对齐至行首行末或者某个特定的起始位置, 举例而言, 像是运用F”跳转至字符串的左边引号处, 接着再借助一个f或/指令, 跳转至操作的位置, 如此一来, 这样的宏便无需非得把光标置于某个特定字符之上才能够使用了。

15. 一些常用组合技

全选:ggvG
调换两个字符位置:xp
复制一行:yyp
调换两行位置:ddp
插入模式下到行尾继续输入(相当于End键):Ctrl+o A 或 Ctrl+[ A
插入模式下到行首继续输入(相当于Home键):Ctrl+o I 或 Ctrl+[ I
到类定义位置(适用于正确缩进的publicprotected类) :?^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这个按键去撤销前一次的更改(这等同于其他集成开发环境的Ctrl+z组合键功能), 依照Ctrl+r这个组合键去重新执行被撤销掉的更改操作呢。

有热门推荐

如有侵权请联系删除!

13262879759

微信二维码