网站建设 技术 哪些内容,wordpress模板UI,建设机械官方网站,网店目录 正则表达式1.特殊字符2.字符类(character-classes)3.规则4.交替和分组5.量词(quantifier)和重数(multi)贪婪模式(greedy)非贪婪模式(non-greedy) 6.魔法(magic)详解6.1.基本魔法(magic)6.2.无魔法(no magic)6.3.深度魔法(very magic) 7.正则表达式举例7.1.精确匹配单词7.2… 目录 正则表达式1.特殊字符2.字符类(character-classes)3.规则4.交替和分组5.量词(quantifier)和重数(multi)贪婪模式(greedy)非贪婪模式(non-greedy) 6.魔法(magic)详解6.1.基本魔法(magic)6.2.无魔法(no magic)6.3.深度魔法(very magic) 7.正则表达式举例7.1.精确匹配单词7.2.变量,方法或类的重命名 7.3.函数参数的重排列 用参数列表处理多个文件命令举例update 行内搜索替换字符串 搜索命令1.grep2.vimgrep3.ack 替换命令命令形式举例转义 正则表达式
1.特殊字符
符号说明注释.任意字符,但不包括行尾^行首$行尾\_任意字符,包括行尾\单词开始\单词结尾
#完整列表
:help ordinary-atom2.字符类(character-classes)
符号说明注释\s一个空白字符(包括Tab和Space)\d一个数字\w一个单词\l一个小写字符\u一个大写字符\a一个字母
大写反类:help character-classes
3.规则
[] - 字符集合,例如[A-Z0-9],[,4abc][^] - 补集,例如[^0-9A-Za-z]
4.交替和分组
符号说明注释|交替(alternation)或\(\)分组(grouping)将多个字符放在一组
#同时匹配carrot和parrot
carrot\|parrot
#分组和其他正则表达式组合使用
\(c\|p\)arrot#分组匹配到的字符串还可以在后面的替换中重用
#cat hunting mice替换成mice hunting cat
:s/\(cat\) hunting \(mice\)/\2 hunting \1/
5.量词(quantifier)和重数(multi)
字符或字符区间后面接量词,也称为重数.
符号说明注释*0或多个贪婪匹配模式\1或多个贪婪匹配模式\{-}0或多个非贪婪匹配模式\?或\0或1个贪婪匹配模式\{n,m}n~m个贪婪匹配模式\{-n,m}n~m个非贪婪匹配模式
#量词的完整列表
:help multi贪婪模式(greedy)
尽可能多地匹配字符
非贪婪模式(non-greedy)
尽可能少地匹配字符
#匹配一个或多个单词
\w\#匹配2-4个连续的字符a
a\{2,4}#对于字符串foo2bar2#匹配foo2bar2
\w\2#匹配foo2
\w\{-1,}26.魔法(magic)详解
6.1.基本魔法(magic)
默认模式.和*之外,大部分特殊字符都需要转义显式设置:在正则表达式字符串前加上\m,例如/\mfoo或者:s/\mfoo/bar.
6.2.无魔法(no magic)
所有特殊字符都需要转义,例如:在基本魔法时/^.*$,无魔法时为/\^\.\*\$显式设置:在正则表达式字符串前加上\M.vimrc中设置:set nomagic,最好不要这样设置
6.3.深度魔法(very magic)
将数字,字母,下划线之外的字符都视为特殊字符显式设置:在正则表达式前加上\v使用场合:特殊字符比较多
#将cat hunting mice替换成mice hunting cat#基本魔法
:%s/\(cat\) hunting \(mice\)/\2 hunting \1/g
#深度魔法
:%s/\v(cat) hunting (mice)/\2 hunting \1/g7.正则表达式举例
7.1.精确匹配单词
#精确匹配单词
#搜索animal
# / - 正向搜索
# \ - 单词开始
# animal - 搜索的单词
# \ - 单词结尾
/\animal\7.2.变量,方法或类的重命名
#1.
:arg **/*.py#2.把光标移动到需要重命名的类上#3.
#[ctrlr,ctrlw]是快捷键,将光标下的单词插入当前命令中
:argdo %s/\[ctrlr,ctrlw]\/Pitbull/gec | update
#或者
:argdo %s/\Dog\/Pitbull/gec | update#4.
#y同意,n拒绝:args#先查看文件
:vimgrep /\Dog\/ **/*.py
:cn
:cp
:copen7.3.函数参数的重排列
:arg **/*.py
#\vact\( 完整匹配 act(
#(\w{-1,}), ([^,]{-1,})\) 匹配 group1, group2)
:argdo %s/\vact\((\w{-1,}), ([^,]{-1,})\)/act(\2, \1)/gec |update用参数列表处理多个文件
(argument list, arglist)
支持多个文件执行同一操作.
每个参数列表项都在缓冲区列表中,但不是每个缓冲区都在参数列表中.
命令
命令说明注释:arg定义参数列表:argdo对参数列表中的所有文件执行一条命令:args显示参数列表中的文件列表
举例
:arg **/*.py
#update 等价于 :write,用于保存被修改过的缓冲区
:argdo %s/\animal\/creature/ge | update
:argsupdate
vim切换缓冲区时推荐保存当前缓冲区.
另一种方案
#隐藏警告
:set hidden
#保存所有
:wa行内搜索
命令说明注释t后面接一个字符,用于当前行内搜索,光标在字符之前untilTT反向f后面接一个字符,用于当前行内搜索,光标在字符之上findFF反向;重复下一个,重复上一个
替换字符串
vim中替换字符串的方法有哪些
:%s/str1/str2/g搜索命令
命令说明注释/关键字正向搜索?关键字反向搜索n下一个nextN上一个*搜索光标下的单词:nohlsearch关闭搜索高亮单次:grep跨文件搜索:vimgrep跨文件搜索:ack跨文件搜索
1.grep
2.vimgrep
:vimgrep 模式 路径#参考2.5.2 用/和?搜索
#当路径为**时,表示对目录进行递归
:vimgrep animal **/*.py#在不打开 quickfix,快速浏览quickfix
#下一个
:cn
:cnext
#上一个
:cp
:cprevious
:cN#打开quickfix列表
:copen
jk #上下移动
enter #打开
#退出quickfix
:q
ctrlw,q3.ack
sudo apt install ack-grepBeyond grep: https://beyondgrep.com/
#递归搜索所有包含Animal的python文件
ack --python Animal#安装插件ack.vim后,在vim中执行,搜索结果显示在quickfix中
:Ack --python Animal
#注意第一个字母需要大写替换命令
命令形式
#搜索和替代
:substitute
:作用范围s/find-this/replace-with-this/flags#flags:可以结合起来使用(除了i和I之外)
# g - 全局替换
# c - 每次替换前需要确认
# e - 没有匹配项时不显示错误
# i - 忽略大小写
# I - 区分大小写#作用范围
# % - 整个文件,替换完后,在状态栏显示多少个被替换
# 数字 - 表示行号
# $ - 最后一行
# /search-pattern/ - 搜索结果所在的行
# ?backwards-search-pattern? - 反向搜索结果行
# ; - 区间范围组合起来,例如17;$表示从17行到最后一行
举例
#使用cat代替首个dog
#没有指定范围
:s/cat/dog#整个文件全部匹配项代替,忽略大小写
:%s/cat/dog/gi#整个文件全部匹配项代替
:%s/java/python/g#作用范围:12行开始 - 搜索到dog为止
#此范围内匹配项全部替换
:12;/dog/s/animal/creature/g#可视模式下,选择区域作为作用范围
#此范围内匹配项全部替换
:s/cat/dog/g转义
转义 - 避免与替换命令的分隔符混淆修改替换命令的分隔符 - 避免混淆
#两种方式等价
#1.替换命令分隔符被修改为
:spath/to/dirpath/to/other/dirgc
#2.使用\/转义
:s/path\/to\/dir/path\/to\/other\/dir/gc