Vim进阶技术:搜索和替换

行内搜索,也就是在当前行内进行搜索和移动,通常都与编辑命令一起使用。

fx -- 移动到下一个字符x的位置,光标停留在x字符上面 tx -- 移动到下一个字符x的位置,光标停留在x前一个字符上 Fx -- 移动到前一个字符x的位置,光标停留在x字符上面 Tx -- 移动到前一个字符x的位置,光标停留在x后一个字符上 ; -- 重复前一个搜索,向着同一方向,即原来向前就向前,原来向后就向后 , -- 重复前一个搜索,向着反方向

行内搜索通常与编辑一起使用:

dfx/dtx -- 删除到下一个字符x yfx/ytx -- 复制到下一个字符x 全局搜索

搜索,分为二个部分:一个是搜索命令,另一个是模式匹配;搜索命令就是各个编辑器所支持的启动搜索的方式,比如Windows的各种编辑器都是以对话框的形式。模式就是在对话框中输入的要匹配的字串集。本身字串的匹配功能有限,所以就有了专门用于模式匹配的正则表达式,它描述了模式匹配的一些规则,使用这些规则可以让匹配更加的强大和精准,多数编辑器都支持正则表达式,Vim也不例外,先讲一下搜索命令,然后再讲对正则表达式的支持。

基本搜索命令 /pattern -- 向前搜索pattern,光标停留在第一个匹配的第一个字符上面。向前的意思是向下,或者向着行数增加的方向。Vim会亮显示所有的匹配,并将光标停留在当前位置的下一个匹配的首字符上 / -- 当不提供pattern时,会向前重复搜索上一个pattern,也就是向前重复搜索的意思,光标会跳到下一个匹配上面 ?pattern -- 与/pattern类似,只不过它是向后搜索,向着行数减少的方向。 ? -- 与/类似,是不过是向后重复搜索 n -- 向着同一方向重复搜索,原来向前就继续向前,原来向后就继续向后(当向前搜索时与/一样,当向后搜索时与?一样) N -- 向着反方向重复搜索,原来向前就向后,原来向后就向前(向前时?一样,向后时/一样) * -- 向前搜索光标所在的单词,只匹配整个单词,单词的定义是一串连续的字母,数字,标点,空白都是单词的分隔符。 # -- 向后搜索光标所在的单词,只匹配整个单词 /?+上下方向键 -- 像其他的命令提示符一样,方向键可以方便的引用历史搜索记录如,搜索记录为error, grape, that,那么按了/后,再按向上方向键:/that,再向上:/grape,向下:/that,再次按回车就可以搜索了。 正则表达式

如前提及,模式匹配在搜索当中有重要的作用。正则表达式(Regular Expression)是专门用于描述搜索中的(Pattern)模式的。使用正则表达式来构建pattern可以让搜索更加强大和精准。有关正则表达式的详细内容可以参阅《Mastering Regular Expression》这本书。正则表达式仅是一种规范,但是各种常用的工具和编程语言都对正则表达式有不同程度的支持。正则表达式有二类:一是正常的字符,仅匹配自身,如"that",只能匹配"that";另一类就是具有特殊意义的元字符。不像基本字符,元字符具有特殊的含义,如.(句点)可以匹配任意除换行符外的单个字符。正则表达式就是学习各种元字符的使用。

Vim对正则表达式有很好的支持,它的常用元字符有:

通用匹配: . -- 匹配任何除换行符外的单个字符 \s -- 匹配一个空白符(space或tab) \S -- 一个非空白符 ^ -- 仅匹配行首,也即必须以模式开头 $ -- 仅匹配行尾,也即必须以模式结尾 \< -- 匹配词首,单词定义为一连串的字母,标点空白和数字均视为分隔符 \> -- 匹配词尾。 \<...\> -- 匹配整个单词(前面命令中的*和#就是用这个来只匹配单词)。当然\<和\>不必一起使用,可以分开使用 限量符: * -- 前一个字符出现0次或多次,如a*,可以匹配'', 'a', 'aa'或'aaa'等 \+ -- 前一个字符出现1次或多次 \= -- 前一个字符出现0次或1次 \{n,m} -- 前一个字符出现n到m,如a\{3,5},则可以匹配'aaa', 'aaaa'或'aaaaa' \{n} -- 前一个字符出现n次 \{n,} -- 前一个字符出现n次到最多次数(32000) \{} -- 0次或多次,与*一致 操作符: \| -- 或,如ab\|ba,则匹配'ab'或'ba' 其他:

[...] -- 字符集,表达一组字符的集合,匹配其中任何一个字符

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21049.html