In regexp operation,
\v and \V, in contrast with \c, \C, \m and \M, disable the preceding '$' (end-of-line) atom.
This seems to be inconsequence.
" matching end-of-line
echo 'hoge' =~# 'hoge$\m' | " Expect 1, Result 1
echo 'hoge' =~# 'hoge$\M' | " Expect 1, Result 1
echo 'hoge' =~# 'hoge$\v' | " Expect 1, Result 0 <- ?
echo 'hoge' =~# 'hoge$\V' | " Expect 1, Result 0 <- ?
" matching start-of-line
echo 'hoge' =~# '\v^hoge' | " Expect 1, Result 1
echo 'hoge' =~# '\V\^hoge' | " Expect 1, Result 1
echo 'hoge' =~# '\m^hoge' | " Expect 1, Result 1
echo 'hoge' =~# '\M^hoge' | " Expect 1, Result 1
" with parentheses
" end-of-line
echo 'hoge' =~# '\(hoge$\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(hoge$\m\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(hoge$\M\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(hoge$\c\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(hoge$\C\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(hoge$\v)' | " Expect 1, Result 0 <- ?
echo 'hoge' =~# '\(hoge$\V\)' | " Expect 1, Result 0 <-?
" start-of-line
echo 'hoge' =~# '\(^hoge\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(\v^hoge)' | " Expect 1, Result 1
echo 'hoge' =~# '\(\V\^hoge\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(\c^hoge\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(\C^hoge\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(\m^hoge\)' | " Expect 1, Result 1
echo 'hoge' =~# '\(\M^hoge\)' | " Expect 1, Result 1
This patch checks the existence of \v and \V after '$', and sets 'magic_all' temporarily.
Thanks.
- Ozaki Kiichi
Shouldn't you need to escape the $ with a \ when using \V?
Ah, you're right. I was expecting it to act like \c and \C:
*/\c* */\C*
When "\c" appears anywhere in the pattern, the whole pattern is handled like
'ignorecase' is on. The actual value of 'ignorecase' and 'smartcase' is
ignored. "\C" does the opposite: Force matching case for the whole pattern.
{only Vim supports \c and \C}