1. 查找字符
如何在文本编辑中,快速的查找到想要的字符呢?有几个命令可以帮助我们来完成这样的工
作:f 是向前搜索的命令。例如 fx 是向前(Forward)搜索字母 x。利用 f 向前搜索的命令我们
也可以快速的移动到指定的位置。而 F 是向左搜索的命令,也就是向后(Backward)搜索。例
如 Fx 是向后搜索字母 x。与 f 和 F 这两个命令相类似的是 t 和 T 这两个命令。t 命令类似于 f 向
前搜索命令,所不同的是 t 搜索到时并不是将光标停在目标字符上,而是停在目标字符的前一
个字符上。当然这几个命令都可以和数字组合来形成新的命令。在搜索的过程中,我们可以使
用 ESC 来退出搜索而开始新的工作。
查找字符串
在 vi 的编辑操作中,我们可以使用/string 命令来查找字符串 string,按下回车后,光标就能跳到
正确的地方。在这个命令中,/后的字符是我们想要查找的字符,而回车键则表明了命令的结
束。
有时想要查找的内容并不仅在一处,我们想要做的是在整个文章中进行查找。那么又如何来查
找呢?我们可以这样的来做:/可以继续刚才的查找操作。我们还可以使用 n 命令来继续刚才的
查找命令。这两个命令都能达到同样的效果。
一般来说,在进行查找时总是在向前查找。我们也可以使用?命令向后查找。而还有一个命令 N
是逆向查找的命令,他可以实现立即反向查找。
如果我们正处在查找过程中,而想要停止这一查找,可以使用 ctrl+C 命令,如果是在 Windows
系统中,则要使用 ctrl+Break 命令。
vi 具有记录查找命令历史的功能,这样就不用重复输入查找命令了,而只要在记录的命令进行
一下查找就可以了。例如你刚才做过的三次查找分别是:/one,/two,/three。而现在输入/,然
后按方向键的上或是下就看到刚才查找的内容显示在 vi 的下面,这时只要按下回车就会找到想
要的内容了。
指定光标放置位置
在默认的情况下,查找时 Vim 会将光标放在第一个匹配的结果的开始处。我们也可以指定查找结
束后,光标所处的位置。对于向前查找的命令我们可以斜线后用数字来指明光标所处的位置,
例如/set/2,这个命令会在查找结束后将光标放在第一个 set 字符串后第二行的开始处。在这个
命令中这个数字可以是正数也可以是负数。如果仅是一个简单的数字,光标会被放在第一个匹
配字符串处后或是前的数字所指定的行的开始处。正是向后,负数是向前。如果斜线后是 b 和
数字,那么在查找结束后,光标将会放在第一个匹配字符串的开始处,然后向左或是右移动 n
个字符,这里的 n 即为数字所指定的数。如果为正数则是向右移动,如果是负数,则是向左移
动。例如/set/b2,这个命令使光标在查找结束后放在第一个匹配字符的开始处,然后向右移动
两个字符,也就是说最后光标会位于第一个匹配字符串中的 t 的位置。将 b 改为 s 也是一样的效
果。与参数 b 或是 s 相类似是 e 参数,这个参数会使得光标放在第一个匹配字符串的结尾处。同
样我们也可以用数字来指定向右还是向左移动光标以及移动的字符数。例如/set/e,这个命令会
使光标放在第一个匹配字符处的结尾处。如果命令改为/set/e2,会将光标放在第一个匹配字符
串的结尾处,然后向右移动 2 个字符。这里的数字如果是正数则向右移,如果为负数则向左
移。
我们再来看命令/set/e+2,这个命令是在查找 set 字符串结束后,将光标放在第一个匹配字符串
2. 的结尾处,然后向右移动两个字符。在这里我们将这个数字称为偏移量。如果我们要重复上一
次的查找,但是需要不同的偏移量,可以用//5 命令。不使用偏移量时,可以指明一个空的偏移
量,如//命令。/命令,重复前一次的查找,使用相同的偏移量。
查找命令?也可以实现类似的功能。例如?set?b5 命令,是将光标放在最后一个匹配字符串的开
头部分,然后向右移动 5 个字符。??-2 命令,则继续前一次的查找命令,但是使用新的偏移
量。??命令,是继续前一次的查找命令,但是不使用偏移量。
立时查找字符串
如果我们想快速查找当前光标下的字符串,可以使用命令*,这个命令可以向前查找与当前光标
下的字符精确匹配的字符串。而命令#,则向后查找与当前光标下的字符精确匹配的字符串。如
果当前光标下的字符串为 word,在执行*命令查找时并不会与 Word 相匹配。与这个立时查找命
令相类似的就是 g*命令。他不会进行严格的匹配。如果用这个命令来查找 word,那么就有可能
和 Word 相匹配。而 g#命令与其相同,只不过他是向相反的方向进行查找匹配。
设置查找选项
在 vi 中还有其他的查找选项,例如我们可选择高亮的显示查找的文本,命令为::set hlsearch,
关闭高亮显示的命令为::set nohlsearch。如果想关掉刚才高亮显示的结果,可以用这样的命
令::nohlsearch。
我们可以使用:set incsearch 命令,打开匹配查找选项。在进行查找时就会显示出不断匹配的过
程。例如你想查找的内容是 include,在打开这个选项后,当你输入/i,光标定位在 i 上,再继续
输入 n 光标定位在 in 上,如此直到查打到所要求的内容。关闭这个选项的命令为::set
noincsearch。
在默认的情况下,Vim 大小写敏感的。如果一个文件中有这样几个字符串:
include,INCLUDE,Include。当我们使用命令/include 来查找字符串时,只有 include 字符会被高
亮显示。但是如果我们用:set ignorecase 命令打开 ignorecase 选项后,所有的类似的字符都会被
高亮显示。如果这样的查找结果并不是我们想要的,可以使用:set noignorecase 命令关闭这个选
项。
如果设置了 ignorecase 选项后,我们想要查找字符串 word,而匹配的则可能是
word、Word,WORD。如果我们要查找字符串 WORD,匹配的结里也是一样的。但是如果设
置了:set ignorecase 和:set smartcase 两项后,执行结果就会变得不一样了:如果我们输入的是小
写字符,那么就会匹配各种可能的组合,这时与设置了 ignorecase 的情况相同,但是如果我们
在输入中有一个大写字符,那么这时就变成了精确查找,与设置了 noignorecase 的情况相同。
在默认的情下,我们输入要查找的字符串,vim 是从当前光标处向前查找,直到文件的结尾,
如果没有找到,那么就会从文件的开头开始查找,直到光标所处的位置。我们可以通过:set
nowrapscan 命令,来禁止这种循环查找的方式,这样如果已经查找到文件的底部时,就会在底
部显示出一条错误信息。如果我们想要回到正常的状态,可以使用:set wrapscan 命令。
命令小结
f 向前搜索并将光标停留在目标字符上
F 向后搜索并将光标停留在目标字符上
t 向前搜索并将光标停留在目标字符的前一个字符上
T 向后搜索并将光标停留在目标字符的后一个字符上