VIM小技巧_3


好久没有更新和Vim相关的内容了,一方面是之前收集的一些技巧已经够用了(80/20原则),另一方面是因为自己认识到,即使Vim使用的再熟练,但是如果代码写得不好(功能无法完善,容错性较低,健壮性较低……)这一切又有什么意义呢?还是想办法去提高代码能力吧,编辑器这档子事可以先缓缓了,够用就行,别偏执。下面的内容是在逛简书的时候看到的和Vim使用相关的文章,其中有些是之前没怎么注意or不知道的,收集备用:

Vim的正则表达式

元字符

可理解为关键字或保留字,这些字符做特殊用途

字符 解释
. 匹配换行符以外的任意字符
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
* 匹配前面的子表达式零次或多次,等价于{0,}
+ 匹配前面的子表达式一次或多次,等价于{1,}
? 匹配前面的子表达式零次或一次,等价于{0,1}
转义符,将特殊字符进行转义
[] [abc]字符集合,匹配所包含的任意一个字符
[^abc]负值字符集合,匹配未包含的任意字符
[a-z] 字符范围,匹配指定范围内的任意字符
() 两个字符一起使用,用于创建一个用于匹配的子串,也叫分组
{} {n}匹配确定的n次
{n,}至少匹配n次,等价于”*”
{n,m}最少匹配n次且最多匹配m次(其中n<=m)

还有 | 交替匹配,符号两边的任意一项

预设字符
字符 解释
b 单词边界,同<
B 非单词边界,同 >
d 数字字符,同 [0-9]
D 非数字字符,同[^0-9]
s 空白字符,同 [ tnrfv]
S 非空白字符,同 [^tnrfv]
w 字母数字字符,同 [a-zA-Z0-9_]
W 非字母数字字符,同 [^a-zA-Z0-9_]
t Tab,同0x09
r 回车符,同0x0D
n 换行符,同0x0A
f 换页符
v 垂直制表符,同0x0b
x 十六进制,例如“x41”匹配“A”
u Unicode字符。例如,u00A9匹配版权符号
POSIX字符类
字符 解释
[:alnum:] 匹配任意一个字母或数字字符
[:alpha:] 匹配任意一个字母字符(包括大小写字母)
[:blank:] 空格与制表符(横向和纵向)
[:digit:] 匹配任意一个数字字符
[:lower:] 匹配小写字母
[:upper:] 匹配大写字母
[:punct:] 匹配标点符号
[:space:] 匹配一个包括换行符、回车等在内的所有空白符
[:graph:] 匹配任何一个可以看得见的且可以打印的字符
[:xdigit:] 任何一个十六进制数(即:0-9,a-f,A-F)
[:cntrl:] 任何一个控制字符(ASCII字符集中的前32个字符)
[:print:] 任何一个可以打印的字符
数字相关
  • 正整数^[1-9]d*$
  • 负整数 ^-[1-9]d*$
  • 整数 ^-?[1-9]d*$
  • 非负整数(正整数 + 0) ^[1-9]d*|0$
  • 非正整数(负整数 + 0) ^-[1-9]d*|0$
  • 正浮点数 ^[1-9]d*.d*|0.d*[1-9]d*$
  • 负浮点数 ^-([1-9]d*.d*|0.d*[1-9]d*)$
  • 浮点数 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$
  • 非负浮点数(正浮点数 + 0) ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
  • 非正浮点数(负浮点数 + 0) ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
格式检查
  • 匹配中文字符 [u4e00-u9fa5]
  • 限定只能输入中文字符:^[u4e00-u9fa5],{0,}$
  • 匹配Email地址:^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
  • 匹配URL地址:^http(s)://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
  • 匹配国内电话号码:^((d{3,4})|d{3,4}-)?d{7,8}$
  • 匹配国内邮政编码:[1-9]d{5}(?!d)
  • 匹配国内身份证号: ^d{15}|d{18}$
  • 匹配首尾空白字符 ^s*|s*$
  • 匹配Email地址 w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
  • 匹配网址URL [a-zA-z]+://[^s]*
  • 匹配ip地址:d+.d+.d+.d+
RegularExpressionValidator表单验证
  • 只能输入数字:^[0-9]*$
  • 只能输入n位的数字:^d{n}$
  • 只能输入至少n位数字:^d{n,}$
  • 只能输入m-n位的数字:^d{m,n}$
  • 只能输入零和非零开头的数字:^(0|[1-9][0-9]*)$
  • 只能输入有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
  • 只能输入有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
  • 只能输入非零的正整数:^+?[1-9][0-9]*$
  • 只能输入非零的负整数:^-[1-9][0-9]*$
  • 只能输入长度为3的字符:^.{3}$
  • 只能输入由26个英文字母组成的字符串:^[A-Za-z]+$
  • 只能输入由26个大写英文字母组成的字符串:^[A-Z]+$
  • 只能输入由26个小写英文字母组成的字符串:^[a-z]+$
  • 只能输入由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  • 只能输入由数字、26个英文字母或者下划线组成的字符串:^w+$
  • 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 验证月数:^(0?[1-9]|1[0-2])$正确格式为:“01”-“09”和“1”“12”
  • 验证天数:^((0?[1-9])|((1|2)[0-9])|30|31)$

在vim中使用正则表达式

基本表达式: [range]s/from/to/[flags]

  • range:搜索范围,如果没有指定范围,则作用于当前行。
:1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换;
:10s/from/to/ 表示只在第10行搜索替换;
:%s/from/to/ 表示在所有行中搜索替换;
:1,$s/from/to/ 同上。
  • flags 有如下四个选项
c confirm,每次替换前询问;
e error, 不显示错误;
g global,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
i ignore,忽略大小写。
例子
  1. 将foo(a,b,c) 改为foo(b,a,c)
    :%s/foo(([^,]*),([^,]*),([^)]*))/foo(2,1,3)/g
  2. 将abcdef abcedg 都替换为 abc asd
    :%s/abc.*/abc asd/g
  3. 删除以数字开头的行
    %s/^d.*$//g
  4. 删除以[a,b,c]开头的行
    :%s/^[a|b|c].*$//g
  5. 替换windows换行符
    :%s/<c-v><c-m>//g
  6. 将url替换为html链接
    :s/(http://[-a-z._~+%/]+)/<a href="1">1</a>/
  7. 将各行的 id 字符串替换为行号
    id 123
    id 456
    :%s/<id>/=line(".")
  8. 将多个空格替换为1个
    :%s/ */ /g
  9. 删除行尾空格
    :%s/ *$//g
  10. 删除行首空格
    :%s/^ *//g
  11. 删除所有空白行
    :g/^s*$/d
  12. 删除所有出现有string的行
    :g/string/d
  13. 删除所有不包含string的行
    :v/string/d
  14. 删除所有HTMl标签,保留文本
    :%s#<{FNXX==XXFN}+>##g
  15. 删除重复行
    :%s/^(.*)n1$/1/g
  16. 每行开头加一个空格
    :%s/^/ /g
  17. 修改错误拼写,例如文本中出现了beg,bssg,big都替换成bug
    :%s/b[e|s|i].*g/bug/g
  18. 批量添加注释
    :%s/^/#/每行开头添加#号
    :3,10s/^/#/ 3-10行每行开头添加#号

原文地址:有效使用vim之正则表达式


  •  Vim中的标记

标记又称为书签,在某个位置打上标记后,在别处编辑完,通过命令可以回到标记处(在命令模式中执行)

命令 作用
mx 将当前位置标记为x(x为26个大小写字母中的任一个)
‘x (单引号)只移到标记所在行的行首
`x (反引号)跳转到标记所在行列位置
(双反引号)来回切换
(双单引号)来回切换
:marks 取得所有的标记的列表,vim自身的记录也会包含在内
:delmarks x 删除指定标记
:delmarks! 删除所有标记
visualmark.vim 该插件可实现标记功能,且标记可见

 

  • 列编辑
命令 作用
<c-v> ctrl-v 进入VISUAL BLOCK模式,即列编辑
<c-v> 1h3j 选中两列三行
<c-v> d 删除选中的列
<c-v> c <esc> 编辑选中的列,按ESC后生效
<c-v> A; <esc> 在选中的列后插入;,按ESC后生效
<c-v> I// <esc> 在选中的列行首插入//,按ESC后生效

 

  • 缩进
命令 作用
>> normal/visual模式下,当前行增加缩进
<< normal/visual模式下,当前行减少缩进

 

参考链接:有效使用Vim之使用技巧

扩展链接:Vim入门基础

, ,

《 “VIM小技巧_3” 》 有 2 条评论

  1. Vim目录说明
    `
    ~/.vimrc – 用户设置
    ~/.vim/
    after/ – 存放在最后进行加载
    autoload/ – 存放自动加载的脚本
    colors/ – 存放用户自定义配色
    doc/ – 存放插件相关文档
    ftdetect/ – 存放文件类型检测脚本
    ftplugin/ – 存放文件类型相关脚本
    indent/ – 存放缩进相关脚本
    plugin/ – 存放插件
    syntax/ – 存放语法相关脚本
    `

回复 a-z 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注