VIM: can't fully understand this substitution
我从一本书中获取了这行代码,将html代码格式化为字符串连接形式,以便在vim中使用javascript。 我似乎无法理解数字'1'和'2代表什么,以及在正则表达式结束时问号是什么。 我习惯于看到像%s / foo / bar / g这样的替换,所以没有正斜线会让我感到困惑。 总结一下,我不理解'1'和'2',美元符号之后和回车之前的问号,以及为什么不使用正斜杠。
1 | vmap <silent> ;q :s?^\(\s*\)\(.*\)\s*$? \1 + '\2'?<CR> |
正斜杠通常用作分隔符,但替换命令使用's'之后的第一个字符作为分隔符,允许将其更改为任何东西。似乎作者认为所有斜杠都可能令人困惑,因此将其改为"?"。这是命令与更传统的正斜杠一起出现的方式:
1 | :s/^\(\s*\)\(.*\)\s*$/ \1 + '\2'/<CR> |
所以上面的意思是,向前搜索,找到以任意数量的空格开头的行,后跟任意数量的任何字符,以及任何数量的空格,然后将其替换为
正如在其他答案中所说的那样,
...
1 2 | :s?^\(\s*\)\(.*\)\s*$? \1 + '\2'? \s* --> note that this part can't be reached, it's useless |
,