Vim: Como faço para procurar uma palavra que não é seguido por outra palavra?

StackOverflow https://stackoverflow.com/questions/96826

  •  01-07-2019
  •  | 
  •  

Pergunta

pergunta básica bonita, eu estou tentando escrever um regex no Vim para combinar com qualquer frase que começa com "abc " diretamente seguido por outra coisa senão "defg".

Eu usei "[^defg]" para corresponder a qualquer caractere único que não seja d, e, f ou g.

Meu primeiro instinto foi tentar /abc [^\(defg\)] ou /abc [^\<defg\>] mas nem uma daquelas obras.

Foi útil?

Solução

Aqui está a seqüência de pesquisa.

/abc \(defg\)\@!

O conceito que você está procurando é chamado de afirmação look-ahead negativo. Tente isto no vim para mais informações:

:help \@!

Outras dicas

precedido ou seguido de?

Se é qualquer coisa que começa com 'abc' que não é (imediatamente), seguido por 'DefG', você quer bmdhacks solução .

Se é qualquer coisa que começa com 'abc' que não é (imediatamente) precedido por 'DefG', você quer um lookbehind negativo:

/\%(defg\)\@<!abc /

Este irá corresponder a qualquer ocorrência de 'abc', desde que ele não faz parte do 'defgabc'. Veja :help \@<! para mais detalhes.

Se você deseja corresponder 'abc', desde que ele não é parte de, em seguida, basta adicionar um .* 'DefG * abc.':

/\%(defg.*\)\@<!abc /

Matching 'abc' apenas em linhas onde 'DefG' não ocorrer é semelhante:

/\%(defg.*\)\@<!abc \%(.*defg\)\@!/

Embora, se você está apenas fazendo isso para uma substituição, você pode tornar isso mais fácil, combinando :v// e :s//

:%v/defg/s/abc /<whatever>/g

Isto irá substituir '' para 'abc' em todas as linhas que não contêm 'DefG'. Veja :help :v para mais.

Aqui vamos nós, este é um cabeludo:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*

(substitua XXXXXX com a palavra de pesquisa). Isto irá procurar tudo o que faz não conter XXXXXX. I imagine se você fez:

/abc \%(\%(.\{-}\)\@<=defg\zs\)*

Isso pode funcionar como você deseja que ele. Espero que isso ajude um pouco!

/ abc \ [^ d] [^ e] [^ f] [^ g]

É muito complicado para as palavras maiores, mas funciona como um encanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top