Contexto
Eu uso vifm
como meu gerenciador de arquivos (que está fora do tópico aqui, eu sei, mas continue lendo), o que me permite editar nomes de arquivos dentro de um vim
buffer.
Um problema que me incomodou são os arquivos numerados nos quais quero manter os zeros à esquerda (por exemplo movie0001.webm
). Não consigo obter o vim para formatá-los corretamente.
A questão
Eu tenho um vim
buffer contendo:
mov70.webm
mov71.webm
mov72.webm
mov73.webm
mov74.webm
mov75.webm
mov76.webm
mov77.webm
mov78.webm
mov79.webm
E meu cursor começa na m
primeira linha. Faço então VG
para marcar tudo e 69<C-x>
transformá-lo em:
mov1.webm
mov2.webm
mov3.webm
mov4.webm
mov5.webm
mov6.webm
mov7.webm
mov8.webm
mov9.webm
mov10.webm
Mas eu realmente gostaria de alcançar isso:
mov01.webm
mov02.webm
mov03.webm
mov04.webm
mov05.webm
mov06.webm
mov07.webm
mov08.webm
mov09.webm
mov10.webm
O que eu tentei
O problema com números com zeros à esquerda é que vim
eles serão tratados como octal
, portanto, mudei nrformats
para uma string vazia:
:set nrformats=
No entanto, isso não ajudou. Eu procurei :h nrformats
sem encontrar nada útil.
visual-block
number-formatting
grochmal
fonte
fonte
:subsitute
+printf
Respostas:
Isso pode ser feito em duas etapas relativamente simples:
ctrl-x
'[,']s/\d\@<!\d\>/0\0/
Você pode transformar isso em um comando / função se achar que precisará fazer isso com frequência.
Outra maneira é fazer como o muru mencionado e usar
substitute
+printf
, que pode preservar o comprimento da string dos dígitos substituídos:Isso também pode ser transformado em um comando reutilizável:
Com o qual você pode executar
:'<,'>Decr 69
para diminuir as linhas visuais em 69.fonte
viscript
maslen(submatch(0))
é um ótimo truque. Adicionado ao meuvimrc
e também adicionou umIncr
comando.Embora eu prefira
:s
+ comprintf
substituições complexas, posso obter o efeito que você deseja se eu começar00
e tiverset nrformats-=octal
. Isso é:Selecione os números em um bloco visual:
Observe que eu adicionei
mov76.webm
- você realmente não tem dez arquivos na sua lista de exemplos.Substitua por zeros e selecione a mesma região novamente:
r0gv
Use
g<c-a>
:Sem
set nrformats-=octal
, você verá010
,011
etc.fonte
0
parece olhos. Arrepiante.mov76.webm
, eu usei um diretório ruim. Eu editei a pergunta. Yay, para a fonte andale .