Tengo un archivo lleno de texto (por ejemplo, Markdown o LaTeX). Me gustaría contar la cantidad de palabras en una parte de este archivo.
Sé que puedo hacer :! wc -w %para ejecutar wc -w en el búfer actual. Y sé que puedo arrastrar la sección de interés a un registro con nombre. Supongo que hay una manera de enviar un registro con nombre al sistema operativo para su uso en un comando o canalización, pero no he podido encontrar uno. ¿O hay una mejor manera de contar las palabras en un registro?
Mi caso de uso es que escribo mucho sin programación (notas, tesis, etc.) en vim, y me gustaría contar cuántas palabras he agregado a una sección determinada del archivo en medio de una edición sesión.
fuente
g<C-g>
esa manera. ¡Increíble!Hay dos maneras en que esto se puede lograr, la forma pura de vimscript y la
wc
forma.El camino puro vim
Puede usar el comando de búsqueda y reemplazo para hacer esto. Por ejemplo:
Lo que esto hace es en lugar de reemplazar un patrón dado con algo, solo cuenta las ocurrencias del patrón. Esto se debe a la
n
bandera. Para contar las palabras en una sección específica (en este caso, líneas 5 a 15), puede hacer algo como esto:Esto elimina la necesidad de tirar del contenido de una selección a un registro. Para ver más posibilidades de lo que se puede poner en su lugar
5-15
, lea el tema de ayudacmdline-ranges
. Si desea hacer esto a menudo, probablemente sea bueno crear una asignación (o comando) para ello. Además, si hahlsearch
habilitado, es posible que desee ejecutar:nohlsearch
después para borrar el resaltado.El
wc
caminoLo mismo se puede lograr con
wc
. De la misma manera que puede usarcmdline-ranges
para seleccionar el área con el:s
comando, puede usarlos con comandos externos. Por ejemplo:Esto ejecuta las líneas 5 a 15 a través del
wc
comando. La desventaja de esto es que reemplaza ese rango de líneas con la salida del comando. Puede deshacer este cambio presionandou
. También tenga en cuenta que la solución vimscript puede no funcionar con diferentes idiomas, ya\w
que no coincide con lo que normalmente serían caracteres de palabras en otros idiomas.wc
puede hacerlo mejor en esto que\w
. Además, aquí hay un comando sofisticado para hacerlo más rápido:Tenga en cuenta que esto cambia el
a
registro.Nota
Parece que esto también se puede lograr en modo visual con la
g<C-g>
combinación de teclas. Vea la respuesta de Carpetsmoker para una explicación de esto.fuente
\w
sonidos parece una buena idea al principio, pero después de probarlo encontré una serie de problemas. Lo más importante es que no coincidirá con caracteres que no sean ascii, por lo que una palabra comoüber
simplemente se omite ( ayer hubo una pregunta sobre esto ). Además, una palabra comoe-mail
se cuenta como 2 palabras, ya-
que no está en\w
(usar a-
es algo poco común en inglés, pero muy común en holandés, por ejemplo). Puede haber otros personajes que se ignoran de esta manera, lo que nos lleva a mi último punto: las convenciones sobre lo que se considera una "palabra" pueden diferir ...wc
pueden aparecer en la configuración regional (no sé si GNUwc
realmente se ocupa de esto por cierto, las herramientas GNU no son bien conocidas por su excelente soporte Unicode).wc
solución.Para palabras use:
.
denota la línea actual.También pongo lo siguiente en mi archivo .vimrc:
Puedo teclear:
y
zzcw
se expandirá as/\i\+/&/g
El
zzcw
es solo un nombre extraño que no coincidirá con nada (para mí).Un efecto secundario es que todo el archivo está seleccionado y resaltado.
Quería poder escribir tweets de varias líneas en un archivo, asegurarme de que no hubiera demasiados caracteres y pegar el tweet en Twitter.
fuente