Esta pergunta provavelmente deve estar no site vi e vim ...
Seu regex tem muitos problemas.
-
Há espaço em branco após o primeiro caractere
{
, portanto, a parte{\n
nunca será igual. Tente excluir este espaço em branco ou adicionar\s*
-
Você provavelmente não deseja usar
.\+
, pois isso corresponderá a mais do que o necessário, provavelmente causando alguns falsos positivos. Você provavelmente deseja.\{-}
, porque esse é um qualificador não-voraz , o que significa que sempre corresponderá o mínimo possível. Sem isso, você irá combinar linhas como\defn{[34,\cite{Lint:1998:ICT:552386 \hello world \here's a bunch of random crap you don't want to match ]}]} }]}
-
Você definitivamente não deseja usar
\_.\+
porque isso corresponderá a tudo até o final do arquivo. De:h \_.
*/\_.* \_. Matches any single character or end-of-line. Careful: "\_.*" matches all text to the end of the buffer!
Mais uma vez, você quer o quantificador não ganancioso,
\_.\{-}
-
Por que você está tentando corresponder 2
}
caracteres no final? Seu texto claramente só termina com um. -
Você não precisa escapar de um caractere
}
.
Juntando tudo, tente usar esse regex:
{.*\n.*\defn{\[\d\+,\s*\cite{.\{-}}]}\_.\{-}\n}