vim: usando uma variável for-loop-iterator em um padrão de pesquisa

2

Estou tentando usar uma variável de iterador de loop for em um padrão de pesquisa vim para determinar, para um intervalo de palavras, como as horas de uso ocorrem em um arquivo. O que eu faço até agora é:

for i in range(1,40) | %s/SiTg//gn | endfor

Eu preciso que a variável do iterador i no padrão de pesquisa %s/S\iTg//gn seja vinculada pelo loop for. Como posso conseguir isso no vim?

    
por lord.garbage 18.03.2015 / 11:33

2 respostas

7

O vimscript é avaliado exatamente como os comandos Ex digitados na linha de comando : . Não havia variáveis em ex , então não há como especificá-las. Ao digitar um comando de forma interativa, você provavelmente usaria <C-R>= para inserir o conteúdo da variável:

:sleep <C-R>=timetowait<CR>m<CR>

... mas em um script, :execute deve ser usado. Todas as partes literais do comando Ex devem ser citadas (aspas simples ou duplas) e, em seguida, concatenadas com as variáveis:

execute 'sleep' timetowait . 'm'

No seu exemplo, você deseja colocar a variável i no comando :%s :

for i in range(1,40) | execute '%s/S' . i . 'Tg//gn' | endfor
    
por 18.03.2015 / 14:18
0

Se você não estiver usando o for loop para outras finalidades, sempre poderá expandir seu regex para abranger todo o intervalo de números:

:%s/S\([1-4]0\|[1-3]*[1-9]\)Tg//gn
    
por 18.03.2015 / 11:59