Como você descobriu, os padrões de pesquisa do vim são interpretados
com \& vinculando mais que \|
(ou seja, \& tem precedência maior que \| ),
e não parece haver nenhuma maneira de ignorar isso.
No entanto, a propriedade distributiva diz que
(P∧(Q∨R)) ⇔ ((P∧Q)∨(P∧R))
onde “∧” representa AND (ou seja, \& ) e “∨” representa OR (ou seja, \| ).
Substituindo
- P = a & b
- Q = c
- R = d
podemos deduzir que
a&b&(c|d) = (a&b&c) | (a&b&d)
para que você possa fazer a pesquisa "a & b & (c | d)"
com o regex .*a\&.*b\&.*c\|.*a\&.*b\&.*d .
Claro, isso não é ideal.
Nota: Esta solução foi identificada pelo OP.