我正在使用vim进行搜索并替换为此命令:
%s/lambda\s*{\([\n\s\S]\)*//gc
我试图在a之后匹配所有单词,endline和whitespace字符{.例如,此行的整体应匹配:
lambda {
FactoryGirl.create ...
Run Code Online (Sandbox Code Playgroud)
相反,它只匹配换行符,之前没有空格FactoryGirl.我之前尝试过手动替换所有空格,以防万一有替代字符,但没有骰子.任何人都可以解释为什么这不起作用?
Ing*_*kat 15
这\s是一个空白的原子; \n虽然看起来很相似,但语法上是换行符的转义序列.在集合原子内部[...],你不能包含其他原子,只能包括一些特殊的字符(如:\n来自:help /[]:
- 当'l'标志未包含在'cpoptions'{Vi in Vi}中时,接受以下翻译:
\e <Esc>
\t <Tab>
\r <CR> (NOT end-of-line!)
\b <BS>
\n line break, see above |/[\n]|
\d123 decimal number of character
\o40 octal number of character up to 0377
\x20 hexadecimal number of character up to 0xff
\u20AC hex. number of multibyte character up to 0xffff
\U1234 hex. number of multibyte character up to 0xffffffff
Run Code Online (Sandbox Code Playgroud)
注意:上面提到的其他反斜杠代码在[]内不起作用!
因此,要么按字面指定空白字符[ \t\n...],请使用相应的字符类表达式[[:space:]...],或者通过逻辑或组合原子与集合\%(\s\|[...]\).