VIM学习笔记 查找文本 (Find)

查找字符

命令f用于在本行内向前搜索。例如fx是向前(Forward)搜索字母x。而命令F是向后(Backward)搜索。例如Fx是向后搜索字母x。与f和F这两个相类似的是t和T命令。t命令类似于f向前搜索命令,所不同的是t搜索到时并不是将光标停在目标字符上,而是停在目标字符的前一个字符上。而T命令类似于F向后搜索命令,所不同的是T搜索到时并不是将光标停在目标字符上,而是停在目标字符的后一个字符上。

在搜索的过程中,我们可以使用ESC键来退出搜索并返回到常规模式。

对于以上四个查找命令,我们可以重复执行这些操作。命令;是按照前一次的查找方向继续查找,如果要向相反的方向查找可以使用,命令。但是这些查找只是在行本行内进行,并不会将光标移动到其它的行。

查找字符串

使用/string命令,可以向前(Forward)查找字符串string,按下回车后,光标就能跳转到匹配处。如果在整个文件中有多处匹配的内容,那么可以使用/命令,然后按下回车键继续刚才的查找。我们还可以使用n命令来继续刚才的查找命令。这两个命令都能达到同样的效果。

我们也可以使用?string命令向后(Backward)查找。N也是逆向查找命令,他可以实现立即反向查找。

如果我们想要停止这一查找,可以使用ctrl+C命令,如果是在Windows系统中,则要使用ctrl+Break命令。

Vim具有自动记录查找命令历史的功能,这样就不用重复输入查找命令了。例如你刚才做过的三次查找分别是:/one,/two,/three。而现在输入/,然后按上下方向键,就可以在屏幕底部看到刚才查找命令,这时只要按下回车就能够再次执行之前的查找命令了。

指定光标放置位置

在默认情况下,Vim会将光标放在第一个匹配结果的开始处。例如你查找字符串set,光标将会停留在字母s之上。我们可以在命令中指定查找结束后光标停留的位置。

对于向前查找的命令,可以在斜线后用数字来指明光标所处的位置,例如/set/2/set/+2命令都会在查找结束后将光标放在第一个set字符串之后第二行的开始处。命令中的数字可以是正数也可以是负数。如果仅是一个简单的数字,光标会被放在第一个匹配字符串之后或之前的数字所指定的行的开始处。正数表示是向后,而负数表示是向前。

参数b(begin)或s(start)会使得光标放在第一个匹配字符串的开头处。如果斜线后是b和数字,那么在查找结束后,光标将会放在第一个匹配字符串的开始处,然后向左或是右移动n个字符,这里的n即为数字所指定的数。如果为正数则是向右移动,如果是负数则是向左移动。例如/set/b2/set/s+2命令,将使光标在查找结束后放在第一个匹配字符的开始处,然后向右移动两个字符,也就是说最后光标会位于第一个匹配字符串中的t的位置。将b改为s也是一样的效果。

而参数e会使得光标放在第一个匹配字符串的结尾处。同样我们也可以用数字来指定向右还是向左移动光标以及移动的字符数。例如/set/e命令会使光标放在第一个匹配字符处的结尾处。如果命令改为/set/e2,会将光标放在第一个匹配字符串的结尾处,然后向右移动2个字符。这里的数字如果是正数则向右移,如果为负数则向左移。

我们还可以在命令中指定偏移量。例如命令/set/e+2是在查找set字符串结束后,将光标放在第一个匹配字符串的结尾处,然后向右移动两个字符。/命令,将使用相同的偏移量重复前一次的查找。如果要重复前一次的查找,但是需要不同的偏移量,那么可以使用//5命令。如果不使用偏移量,则可以指明一个空的偏移量,如//命令。

查找命令?也可以实现类似的功能。例如?set?b5命令,是将光标放在最后一个匹配字符串的开头部分,然后向右移动5个字符。??-2命令,则继续前一次的查找命令,但是使用新的偏移量。??命令,是继续前一次的查找命令,但是不使用偏移量。

立时查找字符串

如果我们想快速查找当前光标下的字符串,可以使用命令*,这个命令可以向前查找与当前光标下的字符精确匹配的字符串。而命令#,则向后查找与当前光标下的字符串精确匹配的结果。

如果当前光标下的字符串为word,在执行*命令查找时并不会与Word相匹配。如果使用相类似的g*命令,来查找word,则不会要求严格的精确匹配,那么就有可能和Word相匹配。而g#命令与其相同,只不过他是向相反的方向进行查找匹配。

大小写敏感

在默认情况下,Vim是大小写敏感的。如果文件中包含有include,INCLUDE,Include等多个字符串。当我们使用命令/include来查找时,则只有include字符会被高亮显示。但是如果我们使用:set ignorecase命令,设置为忽略大小写,则include,INCLUDE,Include所有字符串都会被高亮显示。当然我们也可以使用:set noignorecase命令,重新设置为大小写敏感。

在设置了ignorecase选项后,我们查找字符串word,则会同时匹配word、Word,WORD等;如果我们查找字符串WORD,匹配的结里也是一样的。但是如果设置了:set ignorecase:set smartcase两项之后,就会执行不同的匹配模式:如果输入的是小写字符,那么就会匹配各种可能的组合,与ignorecase选项的情况相同;但是如果在输入中有一个大写字符,那么这时就会转变为精确查找,与noignorecase选项的情况相同。

我们也可以在执行查找命令时,使用修饰符来控制大小写敏感。在命令中加入修饰符\C将执行大小写敏感的查找,比如?\Cword命令就只匹配单词word。而在命令中加入修饰符\c则执行忽略大小写的查找。

设置查找选项

我们可以使用:set hlsearch命令设置高亮显示查找的文本,而:set nohlsearch命令则会关闭高亮显示。

如果想要立刻清除上次查找产生的高亮显示,可以使用:nohlsearch命令。

使用:set incsearch命令,将打开自动匹配选项。在进行查找时就会显示出不断匹配的过程。例如你想查找的内容是include,在打开这个选项后,当你输入/i,光标定位在i上,再继续输入n光标定位在in上,以此类推自动显示匹配的结果。我们也可以使用:set noincsearch命令,来关闭自动匹配选项。

在默认情下,输入查找的字符串之后,vim是从当前光标处向前查找,直到文件的结尾;如果没有找到,则会从文件的开头开始查找,直到光标所处的位置。通过:set nowrapscan命令,可以禁止这种循环查找的方式。如果已经查找到文件的结尾仍未发现匹配结果时,就会在底部显示出一条错误信息。如果想要重新启用循环查找方式,可以使用:set wrapscan命令进行设置。

Ver: 1.0<上一篇 | 目录 | 下一篇>


Originally published at yyq123.blogspot.com on March 16, 2017.

Show your support

Clapping shows how much you appreciated Anthony Yuan’s story.