在使用
linux
系统的时候,难免会接触到vim
,而对于经常用IDE
的我来说vim
用起来很不便捷,为了让自己能够更顺畅地使用vim
,用这篇博客来记录一些vim
常用的功能。
查找
vim
的查找功能很强大,意味着你可以很简单地使用,也可以做很复杂地操作。vim
的功能一般都需要在normal
模式下,查找也不例外,因此首先按下esc
进入normal
模式,接下来让我们开启查找之旅。
简单查找
输入/
进入后向查找模式,再输入想查找的内容并回车,即可跳到第一个匹配,如:
/hello
接着,按下n
查找后向下一个,N
后向查找上一个,若是不方便切换大小写怎么办呢?贴心的vim
还提供了另外一种输入?
进行前向查找的功能,在这种模式下,按下n
就是查找前向下一个,即上一个。
大小写敏感查找
对简单查找模式的指令进行简单改造即可,其后加上\c
表示大小写不敏感查找(默认),\C
表示大小写敏感查找,如:
/Hello\c
将会查找hello
的所有大小写组合,比如hello
,hEllO
,HELLO
等。
快速查找
有时候单词很长的时候手动输入非常麻烦,也很容易输错,当然可以使用模糊匹配,如使用通配符*
等,但这个不能精确匹配,除非花时间去写一个正则表达式。
此时较为便捷的方式是,让光标停留在想要查找的单词任意一个字母上面,然后按下shift+*
,即可快速选中该单词,并且也可以使用n
或N
进行下一个或上一个的匹配。
替换
下面进入我们的重头戏:替换。替换的命令格式如下:
:[range]s/from/to/[flags]
其中:s
是这个命令的主体,其余的都为参数。例如:%s/hello/hey/g
会在全局范围(%
)内查找hello
,替换内容为hey
,并且替换所有(g
)。
下面我们来一一解释参数。
作用范围(range)
作用范围分为光标所在行,指定行,选区,所有行等,
[range] 有以下一些表示方法:
不写range : 默认为光标所在的行。
. : 光标所在的行。
1 : 第一行。
$ : 最后一行。
33 : 第33行。
'a : 标记a所在的行(之前要使用ma做过标记)。
.+1 : 当前光标所在行的下面一行。
$-1 : 倒数第二行。(这里说明我们可以对某一行加减某个数值来
取得相对的行)。
22,33 : 第22~33行。
1,$ : 第1行 到 最后一行。
1,. : 第1行 到 当前行。
.,$ : 当前行 到 最后一行。
'a,'b : 标记a所在的行 到标记b所在的行。
% : 所有行(与 1,$ 等价)。
?chapter? : 从当前位置向上搜索,找到的第一个chapter所在的行。(
其中chapter可以是任何字符串或者正则表达式。
/chapter/ : 从当前位置向下搜索,找到的第一个chapter所在的行。(
其中chapter可以是任何字符串或者正则表达式。
下面做一些示例。
光标所在行:
:s/hello/hey/g
指定行:
:233s/hello/hey/g # 指定单行:第233行的所有hello替换为hey
:1,.s/hello/hey/g # 指定多行:第1行到光标所在行的所有hello替换为hey
:.,+2s/hello/hey/g # 指定多行:光标所在行到其后两行的所有hello替换为hey
选区:
在Visual
模式下(在Normal
模式下按v
或V
或ctrl+v
即可进入)选择区域后输入:
,vim
即可自动补全为:'<,'>
。
:'<,'>s/hello/hey/g # 选区内的所有hello替换为hey
所有行:
:%s/hello/hey/g
替换标志(flags)
替换标志有:
[flags] 有以下一些表示方法:
无 : 只对指定范围内的第一个匹配项进行替换。
g : 对指定范围内的所有匹配项进行替换。
c : 在替换前请求用户确认。
e : 忽略执行过程中的错误。
i/I : 大小写不敏感/敏感
这里所有的flags都可以组合使用。举个例子:
:%s/Hello/hey/gIc # 大小写敏感替换全文所有Hello为hey,替换前请求确认
若设置了c
的标志,则会在每一次匹配到Hello
后,提示:
replace with hey (y/n/a/q/l/^E/^Y)?
按下y
表示替换,n
表示不替换,a
表示替换所有,q
表示退出查找模式, l
表示替换当前位置并退出。^E
与^Y
是光标移动快捷键,参考: Vim中如何快速进行光标移动。
参考
- 优雅地在
vim
中查找替换:https://harttle.land/2016/08/08/vim-search-in-file.html vim
文本替换命令:https://www.cnblogs.com/david-wei0810/p/6385988.htmlvim
之快速查找:https://blog.csdn.net/ballack_linux/article/details/53187283