Contagem do comprimento da string realçada no VIM

21

Gostaria de saber como contar os símbolos destacados em vim (incluindo espaços em branco)?

UPDATE

Ele mostra a contagem de linhas se minha seleção estiver em várias linhas. Eu preciso de símbolos para contar.

    
por Nemoden 27.05.2011 / 06:49

5 respostas

23

A menos que eu esteja sentindo falta de algo, o Vim já faz isso. Se eu destacar algum texto usando o mouse ou digitando v e movendo o cursor, eu vejo na parte inferior da tela

-- VISUAL --                                        12

em que o número à direita é o número de caracteres destacados. Isso só funciona se a seleção estiver em uma única linha, caso contrário, mostrará a contagem de linhas.

Você também pode visualmente selecionar alguma região de texto e digitar g Ctrl-G que mostrará o número de linhas, palavras e bytes selecionados.

    
por 27.05.2011 / 08:52
5

O Vim alterna entre a exibição da contagem de caracteres e a contagem de linhas para o texto visualizado, dependendo do que e como você visualiza (vim 7.4 corrigido para setembro de 2015)

V will display line count
v$ will display character count

Se você visualizar mais de uma linha, ela exibirá apenas a contagem de linhas

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
    
por 11.12.2015 / 12:18
2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. Primeiro você puxa a seleção atual (para o buffer x)

  2. Em seguida, você exibe o tamanho desse buffer: strlen(@x)
    (O - VISUAL - exibido na linha de status obscurece isso, então temos que adicionar uma nova linha)

  3. Realce o intervalo visual anterior: gv

Isso não leva em conta se o modo visual era modo de linha, de caractere ou de bloco, mas é o suficiente para a maioria dos casos.

    
por 27.05.2011 / 08:03
2

Eu vejo na sua captura de tela que você está executando no Windows, então essa resposta pode não ajudar muito. Mas para os outros ...

Um recurso subutilizado (IMO) do Vim é permitir que comandos externos façam o trabalho pesado.

Neste caso, se você estiver em um sistema semelhante ao UNIX, poderá usar o comando wc para fazer isso.

A maneira mais simples é substituir o texto selecionado pela saída do comando, digitando (com o texto selecionado):

:!wc

(depois pressione enter).

Isto irá aparecer na sua linha de comando como:

'<,'>!wc

Depois de ler as informações, você pode desfazer com u para voltar ao ponto de partida.

Nota: Este processamento é feito apenas em linhas inteiras . Se você quiser linhas parciais, acho que o g_CTRL-G do @garyjohn é a sua melhor aposta.

Você pode evitar a necessidade de desfazer, executando:

:w !wc

Isso "grava" as linhas selecionadas na entrada padrão do comando, e a saída do comando será exibida em um novo buffer temporário, deixando o original intocado. Veja :help :write_c para mais informações.

Observação: recebi as informações de :write_c de: link

Agora, mais geralmente:

Este exemplo com wc é bastante simplista, mas você pode imaginar como essa é uma abordagem poderosa. O UNIX tem muitos comandos de processamento de texto já disponíveis, e você pode usá-los dentro do Vim facilmente, sem precisar tocar no Vimscript (yech).

Além disso, qualquer programa de linha de comando que você escreve que lida com stdin / stdout agora pode não apenas beneficiar você no seu terminal, mas também dentro do Vim.

Eu me encontro, por exemplo, executando tidy e json-format de dentro do vim para tornar os arquivos que eu estou vendo mais legíveis.

Você pode fazer o mesmo no Windows, mas o Windows não possui um conjunto tão rico de comandos embutidos. Você sempre pode instalar o GNUWin32 ou similar para obter esses benefícios, no entanto.

    
por 22.02.2017 / 23:37
1

Para uma forma programática no vimscript, isso funcionou para mim quando a seleção está limitada a uma linha:

let amount = virtcol("'>") - virtcol("'<")

(Usando virtcol(..) em vez de col(..) , de forma que funcione como esperado quando :set ve=all estiver ativo.)

    
por 13.07.2015 / 17:15

Tags