Vim - como aumentar cada número no bloco visual?

5

Eu tenho o seguinte SQL:

update am.PERMISSIONS set PRM_ORDER = 35 PRM_VISIBLE = b'1' where PRM_ID = 3;
update am.PERMISSIONS set PRM_ORDER = [35] PRM_VISIBLE = b'1' where PRM_ID = 7;
update am.PERMISSIONS set PRM_ORDER = [40] PRM_VISIBLE = b'1' where PRM_ID = 10;
update am.PERMISSIONS set PRM_ORDER = [45] PRM_VISIBLE = b'1' where PRM_ID = 11;
...

com colchetes eu seleciono o bloco visual, onde eu quero aumentar cada número em 5. Como faço isso?

    
por J-unior 11.04.2013 / 11:25

2 respostas

11

Destaque visualmente o texto entre colchetes:

Ctr+V2jl

Incremente cada número por cinco:

:norm 5Ctr+V Ctr+A Explanation:

:norm executa o comando inteiro no modo normal. O Ctr + V é necessário, caso contrário o cursor retornaria ao início da linha. Ctr + Um aumenta um número em 1, e isto é feito 5 vezes. O intervalo visual é inserido automaticamente depois que você pressionou o cólon.

EDITAR: Como Stephane apontou corretamente, o código anterior incrementa o primeiro número encontrado em qualquer linha. Aqui está uma solução melhor:

%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)

Acrescenta cinco a todos os inteiros entre parênteses. Os \zs e \ze são usados para excluir os colchetes da correspondência e submatch retorna o número correspondente.

    
por 11.04.2013 / 12:04
2

Não precisamos deixar o modo visual para aumentar números, basta usar g

5 g Ctrl-a

5 ......... 5 times
g ......... globally
Ctrl-a .... increase numbers

Na verdade, aprendi esse truque em um desafio vingolf .

    
por 30.09.2017 / 12:26

Tags