玩转VIM编辑器强力搜索

玩转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/old-text/new-text/g

其中%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 is awesome.

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/

将文件中所有的ErrorErrorMsg配色方案来显示;

比如::match ErrorMsg /printf/将显示如下:

clip_image002

其中,配色方案主要有:

    ErrorMsg

    WarningMsg

    ModeMsg

    MoreMsg

关于配色方案,我们也可以自己设定。

原文地址:https://www.cnblogs.com/shaoguangleo/p/2806050.html