vim-水木-正则表达式实例

__开始__
------------------------------------------------------------------------------
"搜索
/joe/e:设置光标到匹配"joe"的末尾
/joe/e+1:设置光标到匹配"joe"的末尾再后移一位
/joe/s-2:设置光标到匹配"joe“的开头再前移两位
/^joe.*fred.*bill/:匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
/^[A-J]\+/:搜索'A'到’J‘重复两次以上的开头行
/begin\_.*end:多行匹配
/fred\_s*joe/i:可以是任何空白字符包括\n,\t等等
/fred\|joe:搜索fred或者joe
/.*fred\&.*joe:搜索同时包括fred跟joe的行
/\/i:搜索独立的单词fred
/\<\d\d\d\d\>:搜索独立的4位数字
/\D\d\d\d\d\D:搜索6位字符串中间4位数字前后两位不能为数字
/\<\d\{4}\>:同/\<\d\d\d\d\>
"查找空行
/^\n\{3}:匹配三连续的空行
"使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1
"正则表达式重复
/^\([^,]*,\)\{8}
"visualsearching
:vmap//y/":visually模式下的键盘映射,把//映射成匹配当前选中的文本
:vmap//y/=escape(@",'\\/.*$^~[]'):包括空白字符
"\zs和\ze匹配原:h/\zs
/<\zs[^>]*\ze>:匹配尖括号中的内容
"零宽度匹配:h/\@=
/<\@<=[^>]*>\@=:searchfortagcontents,ignoringchevrons
/<\@<=\_[^>]*>\@=:searchfortagsacrosspossiblemultiplelines
"多行查找\_的意思是包括换行符
/:匹配结尾的所有内容
/fred\_s*joe/i:匹配fred开始到joe,之间一定得是空白字符
/bugs\(\_.\)*bunny:匹配所有bugs到bunny的字符串
:h\_:help
"查找函数声明,nmap为normal模式下的键盘映射
:nmapgxyiw/^\(sub\function\)\s\+"
"查找多个文件
:bufdo/searchstr/:在多个文件缓冲区里执行查找
"更好的多文件查找定位方法
:bufdo%s/searchstr/&/gic:在多个文件缓冲区里查找,按下n停止
"怎样不使用/来查找网址
?http://www.vim.org/:向后查找
"查找指定字符以外的字符串
/\c\v([^aeiou]&\a){4}:查找4个辅音字母
----------------------------------------
#替换
:%s/fred/joe/igc:普通替换命令
:%s/\r//g:删除DOS的换行符^M
"你的文本文件是否乱七八糟的排成一行?使用如下命令
:%s/\r/\r/g:转换DOS回车符^M为真正的回车符
:%s=*$==:删除行尾空白
:%s=\+$==:同上
:%s#\s*\r\?$##:删除尾部空白和dos换行符
:%s#\s*\r*$##:同上
"删除空行
:%s/^\n\{3}//:删除连续3个空行
:%s/^\n\+/\r/:压缩空行,多个替换为一个
%s#<[^>]\+>##g:删除html的tag部分
"IFYOUONLYWANTTOKNOWONETHING
:'a,'bg/fred/s/dick/joe/igc:非常有用
#译释:''a,''b指定一个范围:marka~markb
#g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
#看后面,g//是一个全局显示命令
#s/dick/joe/igc则对于这些满足条件的行进行替换
"复制列
:%s=[^]\+$=&&=:复制最后一列
:%s=\f\+$=&&=:一样
:%s=\S\+$=&&:晕,还一样!
"记忆(反向引用)
:s/\(.*\):\(.*\)/\2:\1/:将两个字段颠倒
:%s/^\(.*\)\n\1$/\1/:删除重复行
"非贪婪匹配\{-}
:%s/^.\{-}pdf/new.pdf/:删除第一个pdf
"useofoptionalatom\?
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc:lowercasewithoptionalleadingcharacters
"跨越尽量多的行
:%s///:删除多行注释
:help/\{-}:查看非贪婪匹配的更多帮助
"使用寄存器替换
:s/fred/a/g:将fred替换为寄存器a里的内容
:s/fred/asome_texts/g
:s/fred/\=@a/g:betteralternativeasregisternotdisplayed
"在一行里写多种命令
:%s/\f\+\.gif\>/\r&\r/g|v/\.gif$/d|%s/gif/jpg/
:%s/a/but/gie|:update|:next:当使用@:来重复
"或运算
:%s/suck\|buck/loopy/gc:替换suck或者buck(这里|不是管道)
"调用vim函数
:s/__date__/\=strftime("%c")/:将__date__替换成当前日期,使用strftime函数
"处理列,替换所有在第三列中的str1
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
"交换第一列跟第四列
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
"过滤form中的内容放在寄存器里
:redir@*|silexec'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redirEND
:nmap,z:redir@*silexec'g@<\(input\select\textarea\/\=form\)\>@p'redirEND
"两位以上的数字减三(带进位。这个命令挺有趣)
:%s/\d\+/\=(submatch(0)-3)/
"包含loc或者functions的行中的数字加6
:g/loc\|function/s/\d/\=submatch(0)+6/
"比上面更好的方法
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h/\zs查看帮助
"前缀为gg的数字加6
:%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
:hzero-width查看帮助
"替换一个特定字符串为数字
:leti=10|'a,'bg/Abc/s/yy/\=i/|leti=i+1#将yy转换成10,11,12等等
"比上面的更精确
:leti=10|'a,'bg/Abc/s/xx\zsyy\ze/\=i/|leti=i+1#将xxyy转换成xx11,xx12,xx13
"findreplacementtext,putinmemory,thenuse\zstosimplifysubstitute
:%s/"\([^.]\+\).*\zsxx/\1/
"PullwordundercursorintoLHSofasubstitute
:nmapz:%s#\<=expand("")\>#
"PullVisuallyHighlightedtextintoLHSofasubstitute
:vmapz:%s/\<*\>/
----------------------------------------
"allfollowingperformingsimilartask,substitutewithinsubstitution
"Multiplesinglecharactersubstitutioninaportionoflineonly
:%s,\(all/.*\)\@<=/,_,g:replaceall/with_AFTER"all/"
"Samething
:s#all/\zs.*#\=substitute(submatch(0),'/','_','g')#
"Substitutebysplittingline,thenre-joining
:s#all/#&^M#|s#/#_#g|-j!
"Substituteinsidesubstitute
:%s/.*/\='cp'.submatch(0).'all/'.substitute(submatch(0),'/','_','g')/
----------------------------------------
"全局显示命令
:g/gladiolli/#:查找并显示匹配的行号
:g/fred.*joe.*dick/:显示所有含有fred,joe&dick的行
:g/\/:显示单一单词fred
:g/^\s*$/d:删除所有空行
:g!/^dd/d:删除不含字符串''dd''的行
:v/^dd/d:同上
:g/fred/,/joe/d:删除所有的从fred到joe
:g/-------/.-10,.d:以-------为标记删除之前的10行
:g/{/,/}/-s/\n\+/\r/g:删除{...}之间的空行
:v/\S/d:Deleteemptylines(bothtypes)
:v/./,/./-j:压缩空行
:g/^$/,/./-j:同上
:g/ :g/^/put_:双倍行宽(pu=put)
:g/^/m0:颠倒文件(m=move)
:'a,'bg/^/m'b:颠倒选中的a到b
:g/^/t.:重复行
:g/fred/t$:拷贝行从fred到结尾
:g/stage/t'a:拷贝行从stage到markera(a为标记的位置)
:g/\(^I[^^I]*\)\{80}/d:删除最少包含80个tab的行
"performasubstituteoneveryotherline
:g/^/ifline('.')%2|s/^/zz/
"matchalllinescontaining"somestr"betweenmarkersa&b
"copyafterlinecontaining"otherstr"
:'a,'bg/somestr/co/otherstr/:co(py)ormo(ve)
"asabovebutalsodoasubstitution
:'a,'bg/str1/s/str1/&&&/|mo/str2/
:%normjdd:隔行删除
"增加数字(键入)
:.,$g/^\d/exe"norm!\":增加从当前行首到结尾的数字
:'a,'bg/\d\+/norm!^A:增加数字
"保存全局命令的结果(注意必须使用添加模式)你需要使用qaq清空寄存器a.
"saveresultstoaregister/pastebuffer存储结果到寄存器/粘贴到a
:g/fred/yA:添加配备行到寄存器到a
:g/fred/yA|:let@*=@a:放入复制缓冲区
:let@a=''|g/Barratt/yA|:let@*=@a
:'a,'bg/^Error/.w>>errors.txt
"复制每一行,然后在复制出来的每一行两侧加上一个print'复制出来的内容'
:g/./yank|put|-1s/'/"/g|s/.*/Print'&'/
"用文件中的内容替换字符串,-d表示删除“标记”
:g/^MARK$/rtmp.ex|-d
"displayprettily
:g//z#.5:displaywithcontext
:g//z#.5|echo"==========":displaybeautifully
"Combiningg//withnormalmodecommands
:g/|/norm2f|r*:replace2nd|withastar
"sendoutputofpreviousglobalcommandtoanewwindow
:nmap:redir@a:g//:redirEND:new:put!a
----------------------------------------
"全局命令和替换命令联姻(强大的编辑能力)
:'a,'bg/fred/s/joe/susan/gic:可以使用反向引用来匹配
:g/fred/,/joe/s/fred/joe/gic:non-linebased(ultra)
----------------------------------------
"先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
"createanewfileforeachlineoffileeg1.txt,2.txt,3,txtetc
:g/^/exe".w".line(".").".txt"
----------------------------------------
"Absolutelyessential
----------------------------------------
*#g*g#:查找当前光标下的单词(单个单词)()(向前/向后)
%:匹配括号{}[]()
.:重复上次操作
@::重复上次的命令
matchit.vim:适%能匹配

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部