Regex 关于vim模式匹配的澄清
我想将python文件中的5个空格缩进转换为4个空格缩进。我希望命令执行以下操作 删除所有行中以空格开头,后跟字符的单个空格 我发出了命令%s/^\[a-zA-Z]*/,这似乎有效。后来我发现这个命令实际上应该是 在所有行中删除一个空格,该空格以空格开头,后跟任意数量的空格,后跟字符 然而,我仍然无法理解(上面的)命令是如何工作的。基本上,它应该报告以下声明模式的错误,但它仍然有效Regex 关于vim模式匹配的澄清,regex,vim,Regex,Vim,我想将python文件中的5个空格缩进转换为4个空格缩进。我希望命令执行以下操作 删除所有行中以空格开头,后跟字符的单个空格 我发出了命令%s/^\[a-zA-Z]*/,这似乎有效。后来我发现这个命令实际上应该是 在所有行中删除一个空格,该空格以空格开头,后跟任意数量的空格,后跟字符 然而,我仍然无法理解(上面的)命令是如何工作的。基本上,它应该报告以下声明模式的错误,但它仍然有效 class H: def __init__(): hell() 它之所以起作用是因为
class H:
def __init__():
hell()
它之所以起作用是因为
*
的意思是“匹配上一个原子的零个或多个”。在你的情况下,它匹配零。您可能想改用\+
,这意味着“匹配前面的一个或多个原子”
实际上,您可以完全删除*
,因为只有一个空格后跟一个字符,就可以匹配您最初搜索的内容。有更好的正则表达式来表示您要实现的目标,但这不是您在这里要问的
编辑(澄清):
当前的正则表达式(^\[a-zA-Z]*
)转换为:
:从行首开始^
:匹配空格\
:后跟一个字母[a-zA-Z]
:零次或多次(前一个原子-一个字母)*
:设置hlsearch
,然后/^\[a-zA-Z]*
。这将显示正则表达式匹配的内容,以及替换命令删除的内容。也许这有助于解释我的答案。@Randy Morris:-我遇到了以下错误:E486:找不到模式:^[a-zA-Z]您使用的是上面的相同代码段吗?有了这个精确的代码段和我从上面进行的精确搜索,我突出显示了第2行和第3行上的第一个空格。@Randy Morris:-我使用的是同一个代码段,但我仍然无法删除它。