Respostas:
A menos que eu esteja perdendo alguma coisa, o Vim já faz isso. Se destacar algum texto usando o mouse ou digitando v
e movendo o cursor, vejo na parte inferior da tela
- VISUAL - 12
onde o número à direita é o número de caracteres destacados. Isso funciona apenas se a seleção estiver em uma única linha, caso contrário, mostra a contagem de linhas.
Você também pode selecionar visualmente alguma região de texto e tipo g Ctrl-Gque mostrará o número de linhas, palavras e bytes selecionados.
set showcmd
ao seu vimrc
para habilitá-lo.
O Vim alterna entre exibir a 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, ele exibirá apenas a contagem de linhas
g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
v
muda de contagem de caracteres para contagem de linhas se a seleção abranger várias linhas. No entanto, g CTRL-G
faz o trabalho bem.
:function VisualLength()
: exe 'normal "xy'
: echo "Visual: " . strlen(@x) . "\n"
: exe 'normal gv'
:endfunction
:map ,q "xy:call VisualLength()<CR>
Primeiro você puxa a seleção atual (no buffer x)
Em seguida, você exibe o comprimento desse buffer: strlen(@x)
(O VISUAL - exibido na linha de status oculta isso, então precisamos adicionar uma nova linha)
Destaque o intervalo visual anterior: gv
Isso não leva em consideração se o modo visual era modo de linha, caractere ou bloco, mas é suficiente para a maioria dos casos.
Vejo na sua captura de tela que você está executando no Windows, portanto, esta resposta pode não ajudá-lo tanto. Mas para outros ...
Um recurso subutilizado (IMO) do Vim é permitir que comandos externos façam o trabalho pesado.
Nesse caso, se você estiver em um sistema semelhante ao UNIX, poderá usar o wc
comando 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).
Isso será exibido na sua linha de comando como:
'<,'>!wc
Depois de ler as informações, você pode desfazer u
para voltar para onde começou.
Nota: Esse processamento é feito apenas em linhas inteiras . Se você quer linhas parciais, acho que a @ garyjohn's g_CTRL-G
é 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.
Nota: Eu obtive as :write_c
informações em: /programming/1237780/vim-execute-shell-command-without-filtering
Agora, de maneira mais geral:
Este exemplo com wc
é bastante simplista, mas você pode imaginar como essa é uma abordagem poderosa. O UNIX já possui muitos comandos de processamento de texto, e você pode usá-los no Vim com bastante facilidade, sem precisar tocar no Vimscript (yech).
Além disso, qualquer programa de linha de comando que você escreva que lide com stdin / stdout agora pode não apenas beneficiar você no seu terminal, mas também dentro do Vim.
Eu me pego, por exemplo, executando tidy
e json-format
de dentro do vim para tornar os arquivos que estou vendo mais legíveis.
Você pode fazer o mesmo no Windows, mas o Windows não possui um conjunto de comandos tão rico incorporado. Você sempre pode instalar o GNUWin32 ou similar para obter esses benefícios.
Para uma maneira programática no vimscript, isso funcionou para mim quando a seleção é limitada a uma linha:
let amount = virtcol("'>") - virtcol("'<")
(Usando em virtcol(..)
vez de col(..)
, para que funcione conforme o esperado quando :set ve=all
estiver ativo.)