Vim: conta todas as ocorrências (incluindo múltiplas na mesma linha) de char ou word

0

Eu tento contar todas as ocorrências de um caractere ou palavra em um arquivo com o Vim. Isso significa que várias ocorrências da mesma palavra na mesma linha também devem ser levadas em consideração. Isso foi discutido em vários posts antes: Contando as ocorrências no Vim sem marcando o buffer alterado , Procure por string e obtenha contar no editor vi , Existe uma maneira de contar o número de correspondências no Vim usando: g? . Minha estratégia padrão era usar:

%s/PATTERN//gn

para chars e

%s/\<PATTERN\>//gn

para palavras. Isso é mencionado na página do Vim. No entanto, parece que as duas soluções ignoram várias ocorrências na mesma linha. Aqui está um exemplo:

UTg    UTg    D1U1K1    UTg    D1U1K2    UTg    D1U1TW01    UTg    D1U1TW02    UTg    D1U1TW03    UTg    D1U1TW04    UTg    D1U1TW05    UTg    D1U1TW06    UTg    D1U1TW07    UTg    D1U1TW08    UTg    D1U1TW09    UTg    D1U1TW10    UTg
UTg    UTg    D1U2K1    UTg    D1U2K2    UTg    D1U2TW01    UTg    D1U2TW02    UTg    D1U2TW03    UTg    D1U2TW04    UTg    D1U2TW05    UTg    D1U2TW06    UTg    D1U2TW07    UTg    D1U2TW08    UTg    D1U2TW09    UTg    D1U2TW10    UTg
UTg    UTg    D1U3K1    UTg    D1U3K2    UTg    D1U3TW01    UTg    D1U3TW02    UTg    D1U3TW03    UTg    D1U3TW04    UTg    D1U3TW05    UTg    D1U3TW06    UTg    D1U3TW07    UTg    D1U3TW08    UTg    D1U3TW09    UTg    D1U3TW10    UTg
UTg    UTg    D1U4K1    UTg    D1U4K2    UTg    D1U4TW01    UTg    D1U4TW02    UTg    D1U4TW03    UTg    D1U4TW04    UTg    D1U4TW05    UTg    D1U4TW06    UTg    D1U4TW07    UTg    D1U4TW08    UTg    D1U4TW09    UTg    D1U4TW10    UTg

ao usar %s/UTg//gn , ela gerará 4 em vez de 56 . Então, como posso contar todas as ocorrências, incluindo várias ocorrências na mesma linha no Vim?

    
por lord.garbage 07.04.2015 / 16:26

1 resposta

2

É possível habilitar o sinalizador /g nas substituições :s por padrão, definindo

set gdefault

em .vimrc . Se isso for definido usando

:%s/PATTERN/gn

fará com que o Vim conte ocorrências de caracteres ou palavras uma vez por linha e ignore todas as outras ocorrências. Use

:%s/PATTERN/n

neste caso, ou remova set gdefault de .vimrc .

    
por 07.04.2015 / 17:14