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{\nnunca 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}