玩转VIM编辑器-强力搜索
搜索导航
导航键 | 描述 |
/ | 向前搜索,前向 |
? | 向后搜索,反向 |
|
|
n | 跳转到下一个搜索词所在位置 |
N | 跳转到前一个搜索词所在位置 |
//或?? | 重复前面的搜索或反向搜索 |
跳转到下一个/上一个当前光标所在的字符
使用该技巧可以不用使用/pattern可以直接跳转到光标所在的字符。
导航键 | 描述 |
* | 跳转到光标所在字符的下一个匹配处 |
# | 跳转到光标所在字符的上一个匹配处 |
上面的搜索方式是精确匹配的,比如光标在字符hell上,就不会搜索到hello上,但是我们可以使用下面描述的可以使得光标在hell上时,也能搜索到hello或者shell等包含hell的单次。
导航键 | 描述 |
g* | 跳转到下一个局部匹配的单词处 |
g# | 跳转到上一个局部匹配的单词处 |
PS:可以使用[I来列出所有符号光标处单次的行。
在一行中搜索字符
导航键 | 描述 |
fX | 在一行中向前搜索字符X并跳转 |
FX | 在一行中向后搜索字符X并跳转 |
tX | 在一行中向前搜索字符X并跳转到X前面一个字符 |
TX | *****没有测试出来 |
; | 向前重复上述操作 |
, | 向后重复上述操作 |
12个实用的强力搜索和替换实例
Vim编辑器中文本替换命令的语法为:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
其中有3个可能的flags,分别为:
• [c]每次替换都确定一下
• [g]替换当前行中所有符合的
• [i] 忽略模式匹配的大小写
1替换整个文件中所有符合模式的文本
其中%s指定了所有的行,而其中%的含义为替换整个文件;
其中g的含义为指定行中所有的匹配项,如果没有g将只是替换行中发现的第一个。
2在一行中替换文本
:s/old-text/new-text/gi
上述命令中没有指定range范围,将默认为当前行。
3在指定行中替换文本
:1,10s/I/We/g
上述命令将把从第1行到第10行的I替换为We。
4在指定块中替换文本
在使用CTRL+V时,可以替换选定的文本,在输入:时,就会自动变为:’<,’>,这是就可以输入命令了:
:'<,'>s/helo/hello/g
该命令将把指定块中的helo替换为hello。
5在接下来的N行中替换文本
:s/helo/hello/g N
该命令将替换从当前行开始的共N行。
6只替换整个单词而不是部分匹配
标准替换:
原始文本: This is his idea
:s/his/her/g
替换文本:Ther is her idea
完整单词替换:
原始文本: This is his idea
:s/\<his\>/her/
替换文本: This is her idea
所以,如果需要完整替换,需要在关键词前后添加<>,对于一些新手而言,可能会希望使用空格来代替,殊不知,这样可能会导致开始和结束的字符不符合条件。
7使用正则表达式来替换多个文本
原始文本: Linux is good. Life is nice.
:%s/\(good\|nice\)/awesome/g
替换文本: Linux is awesome. Life isawesome.
8交互式地查找替换
可以在命令行中使用c-flag来交互式地查找替换,比如
:%s/awesome/wonderful/gc
将会提示如下信息:
replace with wonderful (y/n/a/q/l/^E/^Y)?
• y:替换当前高亮显示的单词,并高亮显示下一个匹配的词;
• n:不替换当前高亮显示的单词,然后高亮显示下一个匹配的词;
• a:将不再出现提示而替换掉所有剩下匹配的词;
• l:替换当前高亮显示的词,并且中断操作。
9将行号写到文件中
:%s/^/\=line(".") . ". "/g
该命令将会把显示的行号写到文件中去。这个与:set number不同,set number只是显示行数而不会对文件内容有所影响。
10使用等价值来替换一个特殊字符
原始文本: Current file path is ~/test/
:%s!\~!\= expand($HOME)!g
替换文本: Current file path is /home/leo/test/
11在插入一个新的条目时更改所有其他的条目
比如我们有下面的图书列表:
Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
Article 3: 5 Awesome Examples For Automatic Word Completion Using CTRL-X
Article 4: Vi and Vim Macro Tutorial: How To Record and Play
Article 5: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
Article 6: How To Add Bookmarks Inside Vim Editor
Article 7: Make Vim as Your Bash-IDE Using bash-support Plugin
Article 8: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
Article 9: 8 Essential Vim Editor Navigation Fundamentals
Article 10: Vim Editor: How to Correct Spelling Mistakes Automatically
Article 11: Transfer the Power of Vim Editor to Thunderbird for Email
Article 12: Convert Vim Editor to Beautiful Source Code Browser
忘记了3rd Article “Make Vim as Your Perl IDE Using perl-support.vim Plugin” ,现在我们要做的就是插入3rd Article “Make Vim as Your Perl IDE Using perl-support.vim Plugin”并且需要把后面的数目需要逐次增加1。
那么我们可以使用命令:
:4,$s/\d\+/\=submatch(0) + 1/
其中:
范围:4,$为从第4行到最后;
\d\表示一个数字的字符串;
\=submatch(0) + 1 取到数字并且加1;
由于这里没有flag,所以默认只会替换第一个吻合的单词。
更换后变为:
Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
Article 3: Make Vim as Your Perl IDE Using perl-support.vim Plugin
Article 4: 5 Awesome Examples For Automatic Word Completion Using CTRL-X
Article 5: Vi and Vim Macro Tutorial: How To Record and Play
Article 6: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
Article 7: How To Add Bookmarks Inside Vim Editor
Article 8: Make Vim as Your Bash-IDE Using bash-support Plugin
Article 9: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
Article 10: 8 Essential Vim Editor Navigation Fundamentals
Article 11: Vim Editor: How to Correct Spelling Mistakes Automatically
Article 12: Transfer the Power of Vim Editor to Thunderbird for Email
Article 13: Convert Vim Editor to Beautiful Source Code Browser
12将每个句子的首字母大写
:%s/\.\s*\w/\=toupper(submatch(0))/g
该命令将把每个句子的首字母大写。
\.\s*\w --搜索模式,在句点后跟零个或多个空格,然后一个单词;
toupper – 将给定的文本改为大写字母;
submatch(0) –返回匹配的模式
使用vimgrep在多个文件中搜索
:vimgrep leo *.txt --可以使用该命令在当前所有txt文件中搜索leo,如果有多个匹配项,可以使用:cn来跳转到下一个。
命令 | 描述 |
:vimgrep pattern * | 在多个文件中搜索pattern |
:cn | 跳转到下一个vimgrep搜索到的项 |
:cN | 跳转到上一个vimgrep搜索到的项 |
:clist | 列出所有vimgrep搜索到的项 |
:cc number | 直接跳转到number对应的项 |
高亮显示搜索结果
:set hlsearch 该选项将高亮显示搜索的结果
:set nohlsearch 该选项将不高亮显示搜索的结果
:nohlsearch 清除高亮显示的结果
Vim增量搜索
:set incsearch该增量搜索模式将在你输入字符的时候就立即定位符合你输入的pattern,同样禁用该选项为:set noincsearch
给力的:match
:match ErrorMsg /Error/
将文件中所有的Error用ErrorMsg配色方案来显示;
比如::match ErrorMsg /printf/将显示如下:
其中,配色方案主要有:
• ErrorMsg
• WarningMsg
• ModeMsg
• MoreMsg
关于配色方案,我们也可以自己设定。