Contexto
Lo uso vifm
como mi administrador de archivos (eso está fuera de tema aquí, lo sé, pero sigo leyendo) lo que me permite editar nombres de archivos dentro de un vim
búfer.
Un problema que me molestó son los archivos numerados donde quiero mantener los ceros a la izquierda (por ejemplo movie0001.webm
). No puedo obtener vim para formatearlos correctamente.
La pregunta
Tengo un vim
buffer que contiene:
mov70.webm
mov71.webm
mov72.webm
mov73.webm
mov74.webm
mov75.webm
mov76.webm
mov77.webm
mov78.webm
mov79.webm
Y mi cursor comienza en el m
en la primera línea. Luego hago VG
para marcar todo y 69<C-x>
transformarlo en:
mov1.webm
mov2.webm
mov3.webm
mov4.webm
mov5.webm
mov6.webm
mov7.webm
mov8.webm
mov9.webm
mov10.webm
Pero realmente me gustaría llegar a esto en su lugar:
mov01.webm
mov02.webm
mov03.webm
mov04.webm
mov05.webm
mov06.webm
mov07.webm
mov08.webm
mov09.webm
mov10.webm
Lo que he intentado
El problema con los números con ceros a la izquierda es que vim
los tratará como octal
, por lo tanto, cambié nrformats
a una cadena vacía:
:set nrformats=
Sin embargo, eso no ayudó. He buscado alrededor :h nrformats
sin encontrar nada útil.
fuente
:subsitute
+printf
Respuestas:
Esto se puede hacer en dos pasos relativamente simples:
ctrl-x
'[,']s/\d\@<!\d\>/0\0/
Podría convertirlo en un comando / función si cree que tendrá que hacer esto con frecuencia.
Otra forma es hacer lo que muru mencionó y usar
substitute
+printf
, que puede preservar la longitud de la cadena de los dígitos reemplazados:Esto también podría convertirse en un comando reutilizable:
Con el que puedes correr
:'<,'>Decr 69
para disminuir las líneas visuales en 69.fuente
viscript
perolen(submatch(0))
es un gran truco. Lo agregó a mivimrc
, y también agregó unIncr
comando.Si bien definitivamente iría con
:s
+printf
para reemplazos complejos, puedo obtener el efecto que deseas si empiezo00
y tengoset nrformats-=octal
. Es decir:Seleccione los números en un bloque visual:
Tenga en cuenta que he agregado
mov76.webm
: en realidad no tiene diez archivos en su lista de ejemplos.Reemplace con ceros y seleccione la misma región nuevamente:
r0gv
Uso
g<c-a>
:Sin
set nrformats-=octal
, verá010
,011
, etc.fuente
0
ojos parecen ojos. Siniestro.mov76.webm
, usé un directorio incorrecto. Edité la pregunta. Yay, por la fuente andale .