Como capturar o resultado de um comando alimentado por regex no modo normal do Vim?

2

Eu quero encontrar o número de vezes que 'x' está presente no meu arquivo, então eu envio %s/x//gn e recebo a resposta correta.

Como posso capturar a contagem resultante em uma variável usando vimscript na linha de comando?

A seguinte solução foi sugerida por uma resposta abaixo:

:let cnt=0
:g/x/let cnt=cnt+1
:echo cnt

No entanto, cnt é feito para armazenar o número total de linhas no buffer que têm x , não quantos x s existem no arquivo inteiro.

Então, a questão original ainda permanece.

    
por drapkin11 30.03.2011 / 16:03

3 respostas

0

O seguinte faz o truque:

:echo eval(join(map(range(1, line('$')), 'len(substitute(getline(v:val),"[^x]","","g"))')," + "))

Isso substitui todos os caracteres que não são x por nada, conta o número de caracteres restantes (deve ser x s) e adiciona esse resultado para cada linha no arquivo.

Eu tenho a ideia para essa técnica usando a função map de Dennis Williamson , em outro post no script Vim.

    
por 31.03.2011 / 00:52
1
por 30.03.2011 / 19:23
0

Você pode tentar isso

:let cnt=0
:g/^.*may/let cnt=cnt+1
:echo cnt

Então, você verá quantas linhas têm a palavra 'may' nelas pelo menos uma vez. Então, o texto a seguir será contado como 1:

Your mileage may vary. You may have already won.

Fácil.

    
por 30.03.2011 / 23:39