correspondência exata no regrex ao usar vim, man ou less

5

ao usar vim, man ou less, quero fazer uma correspondência exata no regrex

por exemplo, ao usar man, quero verificar o argumento '-c'

se eu usar

  /'-c'

a correspondência pode ser -cim -coberto ...... blabla

mas só quero corresponder a '-c'

como fazer a correspondência exata? obrigado!

    
por user138126 06.03.2013 / 17:21

2 respostas

5

Uma expressão vim mais curta para garantir que nenhum caractere preceda ou siga

/\(^\|\s\)\@<=-c\>

O homem / menos equivalente:

/(^|\s)-c\b

Explicação adicional (Vim):

Provavelmente, a parte mais útil da expressão regular do Vim é -c\> , que simplesmente diz "Procure por '-c', mas somente se nenhuma letra aparecer logo após". Na maior parte do tempo, você pode provavelmente apenas procurar com /-c\> , mas por questão de integridade, incluí uma expressão para verificar o que vem antes do '-c'. Essa expressão é \(^\|\s\)\@<= , o que parece complicado apenas porque a sintaxe da expressão regular do Vim é um pouco mais detalhada (no sentido de que você evite parênteses de agrupamento e o 'ou' canal). A expressão \(^\|\s\) significa "O início de uma linha ou um caractere de espaço em branco". Quando você coloca \@<= depois, significa "Não corresponde exatamente a isso, apenas certifique-se de que ele vem antes da próxima parte da expressão regular" (que é realmente útil apenas para operações de pesquisa e substituição). Na prática, você provavelmente não precisa da parte \@<= . Você poderia encurtá-lo ainda mais, omitindo isso e adicionando \v , que diz ao Vim que você não estará escapando da sintaxe sofisticada. Isso seria parecido com /\v(^|\s)-c> .

Explicação do homem / menos equivalente:

Muito mais simples. Para a sintaxe da expressão regular usada por menos (que é o paginador padrão), \b é o mesmo que \> do Vim e você não precisa escapar dos parênteses ou do caractere de barra. Ele apenas procura a string '-c' que ocorre no começo da linha ou imediatamente depois de um caractere de espaço em branco e garante que nenhuma outra letra venha depois.

    
por 07.03.2013 / 01:00
2

Em vim , use

/\(^\|\s\)-c\($\|\s\)

Em less :

/(^|\s)-c($|\s\)

Você pode usar isk e limites de palavras no vim, mas isso também corresponderia a outras coisas que podem ser opções; é mais seguro procurar explicitamente espaços em branco.

    
por 06.03.2013 / 17:28