No Vim, tenho o seguinte texto:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Eu gostaria de adicionar "," no final de cada linha. O texto anterior se tornará o seguinte:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Alguém sabe como fazer isso? É possível usar o modo de bloqueio visual para fazer isso?
Respostas:
Isso fará com que todas as linhas do arquivo:
Se você quiser fazer um subconjunto de linhas em vez de todo o arquivo, pode especificá-los no lugar de
%
.Uma maneira é fazer uma seleção visual e digitar o
:
. Ele irá preencher:'<,'>
para você, então você digita o resto (observe que você só precisa adicionars/$/,/
)fonte
'
, deveria ser:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
corresponde apenas uma vez de qualquer maneira.Na verdade, existe uma maneira de fazer isso usando o modo de bloqueio visual. Basta pressionar
$A
no modo de bloqueio visual para anexar ao final de todas as linhas na seleção. O texto anexado aparecerá em todas as linhas assim que você pressionar Esc.Portanto, esta é uma solução possível:
Ou seja, no modo Normal, selecione um parágrafo
vip
, mude para o modo de bloqueio Visual CTRLV, acrescente$A
uma vírgula a todas as linhas,
e pressione Escpara confirmar.A documentação está em
:h v_b_A
. Há até mesmo uma ilustração de como funciona na seção de exemplos::h v_b_A_example
.fonte
C-V
) e mova o cursor para o final da linha$
e acrescente a todas elasA
. Você vai adorar:h v_b_A
, o que é realmente completo.<C-V>ip
no lugar devip<C-V>
.'virtualedit'
- eu testei isso.) Confirmo que não funciona em um vim limpo. Obrigado pela nota!Outra solução, usando outro ótimo recurso:
Veja
:help :normal
.fonte
:normal
. Achei informativo!o modo ex é o mais fácil:
fonte
O comando substituto pode ser aplicado a uma seleção visual. Faça um bloco visual sobre as linhas que você deseja alterar e digite :e observe que a linha de comando é inicializado como este:
:'<,'>
. Isso significa que o comando substitute operará na seleção visual, assim:E esta é uma substituição que deve funcionar para o seu exemplo, supondo que você realmente queira a vírgula no final de cada linha como mencionou. Se houver espaços à direita, pode ser necessário ajustar o comando de acordo:
Isso substituirá qualquer quantidade de espaço em branco anterior ao final da linha por uma vírgula, removendo efetivamente os espaços em branco à direita.
Os mesmos comandos pode operar numa gama de linhas, por exemplo, para as seguintes 5 linhas:
:,+5s/$/,/
, ou para todo o tampão::%s/$/,/
.fonte
Se você quiser adicionar ',' no final das linhas começando com 'chave', use:
fonte
:g/key/s/$/,
. Veja:help :global
.Eu tenho
<M-DOWN>
(alt seta para baixo) mapeados para<DOWN>.
para que eu possa repetir o último comando em uma série de linhas muito rapidamente. com este mapeamento posso:E então segure alt enquanto pressiona repetidamente para adicionar a vírgula ao final de cada linha.
Isso funciona bem para mim porque permite um controle muito bom sobre o que as linhas recebem e não recebem a alteração.
(Eu também tenho as outras setas mapeadas de forma semelhante para permitir uma fácil repetição
.
)Aqui está a linha de mapeamento para colar em seu vimrc:
fonte
$ corresponde ao fim da linha
fonte
$
a linha também, não apenas,
./g
é usado para realizar a substituição em todas as ocorrências em uma linha. Porque há apenas um$
em uma linha, você pode descartá-lo com segurança.A macro a seguir também pode ser usada para realizar sua tarefa.
fonte