谁难帮我解释一下下面这几个vim的操作

下面的关于vim删除的内容摘自网络:

:%s= *$== 删除行尾空白
:g/^s*$/d 删除所有空行
:g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行
:v/./.,/./-1join 压缩空行
:g/^$/,/./-j 压缩空行
第一行,看了下vim的帮助,=是显示最后一行行号的意思,s后面也没有"/",最后双出现个==,没看明白。

第二行删除所有空行的那个是我搜索的原因,证实可行,可是我不懂了,查了一下:[范围]g/{pattern}/[cmd],表示在[范围]内符合{pattern}的行执行[cmd](默认:print)。问题就出在这个{pattern}上,我觉得应该是符合正则表达式的,可是^s*$是表示空行么?我试了下直接改成^$也能成功。只是不明白原式是什么意思。

第三行还凑合明白点儿,四五行就不明白了,好像涉及到joinspace,我也没看明白,望高手帮我解释一下。

作者: dchwlinux   发布时间: 2010-06-22

/是分隔符,如果字符串中有/,那可用其他的分隔符,而此时/只是做为普通字符处理
'
#
@
好像都能做分隔符,我没试过,也没找到相关教程

不知是不是要读源码或英文文档才能知道具体作用

作者: 相思爱文   发布时间: 2010-06-23

本帖最后由 相思爱文 于 2010-6-24 11:43 编辑

Delete all blank lines (^ is start of line; \s* is zero or more whitespace characters; $ is end of line)
删除所有空白行(^是行的开始,\s*是零个或者多个空白字符;$是行尾)
:g/^\s*$/d

经实验,可以删除包括空白,Tab,空白和Tab交错的所有空行。
http://bbs.chinaunix.net/thread-510754-1-1.html


查了下:g/^s*$/d
好像都是出自一个地方,是作者笔误
应为:g/^\s*$/d

可试一下,用vim编辑下面的文件
  1. ssss

  2. 1111

  3. ssssss

  4. 22222

  5. ssssssssssssss

  6. sssssssssss
复制代码
用:g/^s*$/d,除了删除空行外,还会删除只包含一个或多个这母s的行。

作者: 相思爱文   发布时间: 2010-06-23

:v/./.,/./-1join 压缩空行
:g/^$/,/./-j 压缩空行
这两行不清楚,如果是应用的话,强行记住就行了,以下是我的理解,不保证准确
:g/^$/,/./-j   搜索,空行与空行之间执行合并操作,结果是有多个相联空行最后只剩一个
:v/./.,/./-1join (v与g作用相同,就是不匹配某些字符)
:v/./.,/./-0 join

作者: 相思爱文   发布时间: 2010-06-24

哦,我也没查出个所以然来,我试了:g/^$/d也行。期待更好的解释吧

作者: dchwlinux   发布时间: 2010-06-25

:g/^$/d是纯空行,:g/^\s*$/d还包括有空白符的行,原文中有处笔误

作者: 相思爱文   发布时间: 2010-06-25

看不懂,阿
  1. :0w5ty(1
复制代码

作者: hhjs_lxx@163.co   发布时间: 2010-12-17