Respuestas:
A menos que me falte algo, Vim ya lo hace. Si resalto algo de texto usando el mouse o escribiendo v
y moviendo el cursor, veo en la parte inferior de la pantalla
- VISUAL - 12
donde el número a la derecha es el número de caracteres resaltados. Esto solo funciona si la selección está en una sola fila, de lo contrario, muestra el recuento de filas.
También puede seleccionar visualmente alguna región de texto y tipo g Ctrl-Gque mostrará el número de líneas, palabras y bytes seleccionados.
set showcmd
a su vimrc
para habilitarlo.
Vim cambia entre mostrar el recuento de caracteres y el recuento de líneas para el texto visualizado dependiendo de qué y cómo visualiza (vim 7.4 parcheado a septiembre de 2015)
V will display line count
v$ will display character count
Si visualiza más de una línea, solo muestra el recuento de líneas
g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
v
cambios normales de recuento de caracteres a recuento de líneas si la selección abarca varias líneas. Sin embargo, g CTRL-G
hace bien el trabajo.
:function VisualLength()
: exe 'normal "xy'
: echo "Visual: " . strlen(@x) . "\n"
: exe 'normal gv'
:endfunction
:map ,q "xy:call VisualLength()<CR>
Primero tira la selección actual (en el búfer x)
Luego, muestra la longitud de ese búfer: strlen(@x)
(El - VISUAL - que se muestra en la línea de estado lo oculta, por lo que debemos agregar una nueva línea)
Resalta el rango visual anterior: gv
Esto no tiene en cuenta si el modo visual era el modo de línea, carácter o bloque, pero es suficiente para la mayoría de los casos.
Veo en su captura de pantalla que está ejecutando en Windows, por lo que esta respuesta puede no serle tan útil. Pero para otros ...
Una característica infrautilizada (IMO) de Vim es dejar que los comandos externos hagan el trabajo pesado.
Para este caso, si está en un sistema similar a UNIX, puede usar el wc
comando para hacerlo.
La forma más simple es reemplazar el texto seleccionado con la salida del comando, escribiendo (con el texto seleccionado):
:!wc
(luego presione enter).
Esto se mostrará en su línea de comando como:
'<,'>!wc
Una vez que haya leído la información, puede deshacerla u
para volver a donde comenzó.
Nota: Este procesamiento se realiza solo en líneas completas . Si quieres líneas parciales, creo que @ garyjohn's g_CTRL-G
es tu mejor opción .
Puede evitar la necesidad de deshacer ejecutando en su lugar:
:w !wc
Esto "escribe" las líneas seleccionadas en la entrada estándar del comando, y la salida del comando se mostrará en un nuevo búfer temporal, dejando intacto el original. Ver :help :write_c
para más información.
Nota: Recibí la :write_c
información de: /programming/1237780/vim-execute-shell-command-without-filtering
Ahora, más generalmente:
Este ejemplo con wc
es bastante simplista, pero puedes imaginar cómo este es un enfoque poderoso. UNIX ya tiene muchos comandos de procesamiento de texto disponibles, y puede usarlos dentro de Vim con bastante facilidad, sin necesidad de tocar Vimscript (yech).
Además, cualquier programa de línea de comandos que escriba que trate con stdin / stdout ahora no solo puede beneficiarlo en su terminal, sino también dentro de Vim.
Me encuentro, por ejemplo, corriendo tidy
y json-format
desde adentro de vim para hacer que los archivos que estoy viendo sean más legibles.
Puede hacer lo mismo en Windows, pero Windows no tiene un conjunto de comandos tan rico incorporado. Sin embargo, siempre puede instalar GNUWin32 o similar para obtener esos beneficios.
Para una forma programática dentro de vimscript, esto funcionó para mí cuando la selección se limita a una sola línea:
let amount = virtcol("'>") - virtcol("'<")
(Utilizando en virtcol(..)
lugar de col(..)
, de modo que funcione como se espera cuando :set ve=all
está activo).