将VS 2010与VsVim结合使用。
我发现搜索引用的文字,例如
/["][^"]\{0,\}["]
这是我为查找引号而做出的几项不同努力之一,可能是一些不包括引号的内容,后跟另一个引号,例如"stuff"
或""
(空字符串),或者其他其他引用的字符串。
此搜索不一定仅限于一行。我还没有进行任何详尽的分析,以确定所有这些多行匹配是否存在共同点,尽管转义引号(\"
)似乎相当普遍。
我尝试了一些限制性添加内容,但直到我将\n
添加到排除集后才停止这样做。
在gVim中,默认情况下,搜索仅限于一行。
我可以看到搜索跨线端边界的优势,但这不是我想要的默认值。
我错过了一个设置吗?
以下是来自该正则表达式的匹配示例:
oss << "bonus game conditions \"" << index << "\" not found for bonus game \""
<< bonusGameID << "\"";
这两行代码,包含五个匹配项。
"bonus game conditions \"
" << index << "
" not found for bonus game \"
然后
"
<< bonusGameID << "
和
""
我们感兴趣的比赛就是这个:
"
<< bonusGameID << "
因为那是跨越换行符的那个。
这是另一个,第一个引用是在撇号之间单引号:
CharReplace( *it, wchar_t( '"' ), L"<DQ>" );
if ( !arg.empty() )
{
args.push_back( arg );
}
}
it++;
}
// Re-compose the string from words
WordsToString( words, delimiters, _str );
// Replace newlines with ICU specifiers (NOTE: CS3 uses '\r' instead of '\n' for a newline)
CharReplace( _str, wchar_t( '\n' ), L"<NL>" ) || CharReplace( _str, wchar_t( '\r' ), L"<NL>" );
第一场比赛从'"'
在第一行开始,直到L"
之前的<DQ>
,第二场比赛在{{1}之后获得"
并继续直到最后一行<DQ>
的开头引号。
发生的事情并不是一个谜。令人费解的是,默认情况下决定允许匹配包含换行符。
好的,所以我做了一些实验。这就是我认为正在发生的事情。
它是"<NL>"
子表达式,就像我所知道的那样。我开始表达的内容并不重要,如果我写[^"]
我得到类似的行为,新行就是字面意思 - &#34;不是只有下划线的成员&#34 ;。 (或者,它隐含地是&#34;所有不是下划线的成员&#34;。)
在普通搜索(/_[^_]_/
中,搜索两个下划线之间的任何内容),搜索保持在一行(或者更准确地说,不会跨越换行符) ,因为换行实际上并不是&#34;零或更多的任何东西&#34;
因此,换行符不是/_.*_/
的成员,但 是.*
或[^_]
的成员,或者选择任何内容你想排除。
为确保搜索不会跨越换行边界,排除集必须明确包含[^"]
(换行符)。
我已经确认gVim隐含地排除了&#34;不是其中一个&#34;组。为了让gVim包含行尾,必须在\n
前加上集合括号,因此:\_
(或在集合中包含\_[]
)。
结论:如果这是&#34;功能&#34;在VsVim中,它应该是你可以打开和关闭的东西。如果是意外行为,那么它可能是一个错误吗?
答案 0 :(得分:0)
所以看起来您的解决方案是升级到最新版本。