VIM中的搜索和替换(zz)
⾏内搜索。
1. f命令可以进⾏⾏内搜索。输⼊fx可以到下⼀个x字符。
2. F命令可以在反⽅向进⾏⾏内搜索,输⼊Fx可以到上⼀个x字符。
3. t命令同样是进⾏⾏内搜索,但是光标停留在符合条件的字符的前⾯。输⼊tx使光标停留在下⼀个x字符的前⾯。
4. T命令可以在反⽅向进⾏⾏内搜索,但是光标停留在符合条件的字符的下⼀个字符上。输⼊tx使光标停留在上⼀个x的后⾯的字符上。
5. %可以搜索与之匹配的对应的()[]{}。这个功能对于书写程序特别有⽤。
全⽂的搜索。键⼊/后,光标进⼊VIM底部的命令⾏,这时就可以输⼊以/为开始的/搜索命令了。
1. 最简单的查。输⼊/string就可以查string字符串。
2. 继续查。在第⼀次搜索后输⼊n将会继续进⾏上⼀次搜索,如果输⼊3n那么会到后⾯第三个符合的
字符串。⼤写的N会在反⽅向,也就是向上进⾏搜索。
3. 向上搜索。输⼊?可以向上搜索。随后的n命令将会继续向上搜索,N向下搜索,其他和/⼀样。
4. 对⼤⼩写的匹配。
1. 在命令⾏输⼊:set ignorecase可以设置搜索以忽略⼤⼩写的⽅式进⾏。输⼊:set noignorecase可以设置搜索以匹配⼤⼩写的⽅式进⾏。默认的,将匹配⼤⼩
写。这个默认设置可以在.vimrc中修改。
2. ⼤⼩写智能匹配模式。输⼊命令:set ignorecase smartcase可以设置为智能⼤⼩写匹配模式。在这种模式下,如果你输⼊的字符串中⾄少包含⼀个⼤写字母,
那么就会以⼤⼩写敏感模式进⾏搜索,否则以忽略⼤⼩写模式进⾏搜索。
3. 在搜索命令中指定⼤⼩写。在⼏种⼤⼩写搜索模式中进⾏转换总要输⼊长长的⼀串指令,如果需要不断地转换模式,确实有些⿇烦。所以你可以直接在搜索命
令中指定⼤⼩写匹配模式。\c表⽰忽略⼤⼩写,⽽\C表⽰对⼤⼩写敏感。
5. 查当前词。⼀个简单的⽅法可以让你查下⼀个和当前词⼀样的词,你不⽐输⼊/currentword,你可以直接按下*就可以查下⼀个currentword。#可以让你向上查
同⼀个单词。
6. 调整查后的光标位置。
1. 使⽤/string/3会使在光标转到到string字符串的⾏下⾯的第3⾏。第1⾏从包含string的⾏算起。同样可以使⽤/string/-2来使光标停留在包含string的⾏的前⾯2
⾏。
2. 使⽤/string/e可以使光标停留在string字符串的末尾⽽不是默认的第⼀个字符位置。/string/b则表⽰停留在string第⼀个字符的位置,不过默认就是如此,我们不
⽐多此⼀举。但是/string/b+2却可以使光标停留在string字符串的第⼆个字符的位置,这⾥是r。在e或者b的后⾯+或者-数字,可以进⼀步调整光标的位置。7. 特殊字符。在搜索命令中, .*[]^%/?~$这10个字符有着特殊意义,所以在使⽤这些字符的时候要在前⾯加上⼀个反斜杠/。⽽\e表⽰<esc>;\t表⽰<tab>;\r表⽰
<cr>;\b表⽰<bs>。
8. 匹配换⾏或空格。使⽤\n可以表⽰⼀个换⾏;⽽\s表⽰匹配空⽩,注意是空⽩不是空格。\_s表⽰匹配换⾏或者空格;\_a表⽰匹配换⾏或者⼀个字母。⽐
如:/the\nword查以the结束并且下⼀⾏以word开始的⾏的位置。/the\_sword查the和word之间以空⽩或者换⾏分割的位置。/the\_s\+word表⽰the和word之间可以有多个空⽩。\+的含义可以在后⾯到。
9. 限定词⾸或者词尾。\<;可以限定到是以指定字符串开始的单词。⽐如/\<the可以到以the开始在字符串,但是会忽略在单词中间包含the的字符串。⽽\>则是限定必
须是以指定字符串结尾的单词。
10. ⾏⾸和⾏尾。输⼊/^string查以string开始的⾏,并且光标停留在这个string的第⼀个字符。输⼊/string$则查以string结束的⾏,并将光标停留在这个string的第⼀
个字符。这个模式不会忽略前导或者后置的空格。
11. 匹配任何⼀个字符。句号.可以匹配任何⼀个字符。例如/t.e可以到the或者tae或者tue。
更加复杂的匹配模式。实际上,/搜索可以使⽤⾮常复杂的匹配模式。下⾯列出了其中⼀些复杂的匹配模式。
vim命令替换字符
1. 可重复的字符。
1. 使⽤*表⽰它前⾯的字符可以重复多次或者0次。⽐如/be*可以匹配b,be,bee,beee等等。但是这也会包含b,因为e重复0后是空。如果要匹配诸如
be,bebe,bebebe的字符串可以使⽤\(和\)把他们包括起来,形如:/\(be\)*。
2. 使⽤\+来限定为重复⾄少⼀次到⽆数次。如:/be\+可以匹配be,bee,bee等等。
3. 重复0次或者⼀次。\=可以指定重复0次或者⼀次。/strings\=表⽰匹配string或者strings。这在查单词的复数形式特别有⽤.
4. 指定重复的次数。\{n,m}可以指定重复n到m次。⽐如:/be\{2,4}将会匹配bee,beee,beeee。同样可以使⽤\{,4}表⽰匹配0到4次;\{4,}表⽰4次到⽆数次;\{4}表
⽰重复4次。
2. 匹配列表中的⼀个。使⽤⼀个以\|分割的列表,可以表⽰匹配列表中任何⼀项。⽐如/one\|two表⽰查one或者two;/one\|two\|three表⽰查one或者two或者three。
1. ⼀个复杂的实例:/end\(if\|while\|for\)将会查endif,endwhile以及endfor。
2. 字符列表。使⽤[0-9]可以表⽰⼀个0到9范围的字符。⽐如/string[1-5]表⽰查string1,string2,string3,string4,string5。当然也可以使⽤[a-z]表⽰字符a到z中间的
⼀个。
3. 特殊的字符集合。使⽤\d也可以表⽰0到9的数字,这个选项可以代替[0-9]。\D表⽰⾮数字代替[^0-9];\x表⽰⼗六进制数代替[0-9a-fA-F];\X表⽰⾮⼗六进制数
代替[^0-9a-fA-F];\s表⽰空⽩字符代替[ ] (<Tab> 和<Space>);\S表⽰⾮空⽩字符代替[^ ] (除<Tab> 和<Space>之外);\l表⽰⼩写字母代替[a-z];\L表⽰⾮⼩写字母代替[^a-z];\u表⽰⼤写字母代替[A-Z];\U表⽰⾮⼤写字母代替[^A-Z]
搜索并替换。输⼊:[range]s/from/to/[flags]命令可以搜索匹配的字符串并且替换为指定的字符串。这是⼀个稍微复杂的命令。其中[range]是⼀个可选项,⽤来指定搜索替换的范围。[flags]也是⼀个可选项,⽤来指定搜索替换的处理⽅式。所以这个命令的简单形式是:s/from/to/。
1. 搜索替换的范围。如果没有指定范围,则只在当前⾏进⾏搜索替换。
1. 在所有⾏进⾏搜索替换。范围符号%表⽰在所有⾏进⾏搜索替换。:%s/from/to/就是在全⽂查from并替换为to。
2. 在指定的⾏上进⾏搜索替换。:1,50s/from/to/表⽰在第1⾏和第50⾏之间(包括1和50⾏)进⾏搜索和替换。:45s/from/to/表⽰仅仅在第45⾏进⾏搜索和替换。
⽽"1,$"⾏号范围和“%“是等价的。
2. 处理⽅式。我现在使⽤的VIM默认的⽅式是⽆须确认。不过好像不同版本的默认的处理⽅式是不同的。
1. ⽆须确认。⽅式符号g表⽰直接替换⽆须进⾏确认。:%s/from/to/g表⽰在全⽂中查from并且直接全部替换为to。
2. 列印。处理⽅式符号p表⽰在替换时列出每个被改变的⾏。⼿册中这么说,但是实际效果却让我很迷惑。
3. 确认后处理。处理⽅式符号c表⽰在进⾏替换前需要⽤户进⾏确认。这时你可以选择(y/n/a/q/1/^E/^Y):y表⽰同意当前替换;n表⽰不同意当前替换;a表⽰替
换当前和后⾯的并且不再确认;q表⽰⽴即结束替换操作;1表⽰把当前的替换后结束替换操作;^E向上滚屏^Y向下滚屏,⽤来帮助查看前后内容以决定进⾏操作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论