关于vim模式匹配的澄清

时间:2011-06-01 11:14:50

标签: regex vim

我想将python文件中的5个空格缩进转换为4个空格缩进。我希望命令执行以下操作

删除所有行中的单个空格,该空格以空格开头,后跟字符。

我发出命令%s / ^ \ [a-zA-Z] * // ,这似乎有效。后来我发现命令实际应该是

删除所有行中的单个空格,以空格开头,后跟任意数量的空格,后跟字符。

但是我仍然无法弄清楚命令(上面)是如何工作的。它应该基本上报告错误,因为找不到以下说明模式,但仍然有效。

class H:
     def __init__():
         hell()

1 个答案:

答案 0 :(得分:2)

它有效,因为*表示“匹配前一个原子的零或更多”。在你的情况下,它匹配零。您可能想要使用\+代替,这意味着“匹配前一个原子中的一个或多个”。

实际上,您可能完全放弃*,因为只有一个空格后面跟一个字符匹配您最初搜索的内容。对于你想要完成的事情,有更好的正则表达式,但这不是你在这里要求的。

编辑(澄清):

您的正则表达式(^\ [a-zA-Z]*)转换为:

  • ^:从行的开头
  • \:匹配空格
  • [a-zA-Z]:后跟一封信
  • *:零次或多次(前一个原子 - 一封信)