VSCode: como encontrar e substituir múltiplas linhas (multi-line find and replace)
Gostaria de compartilhar uma dica de VSCode caso você esteja procurando como encontrar e substituir múltiplas linhas em todos os arquivos da sua base de código, incluindo como ignorar quebras de linha e espaços em branco que podem variar conforme a indentação que as linhas que você quer substituir possam se encontrar.
Contexto
Estou neste exato momento trabalhando numa branch no repositório do TabNews que irá remover as propriedades parent_title
, parent_slug
e parent_username
do objeto content
, onde o problema é que temos vários testes automatizados de integração que esperam que estas 3 propriedades estejam presentes na resposta da API, nem que seja com o valor null
(selecionei ali ao final do JSON
):
E novamente, isto está espalhado por toda bateria de testes relacionados aos conteúdos e a questão que fica é: como fazer o replace de várias linhas ao mesmo tempo? Ainda mais considerando que, novamente, a indentação (quantidade de espaços na esquerda destas linhas), pode variar de arquivo para arquivo.
Ótima pergunta e é agora que o Visual Studio Code, junto com uma RegEx, (Regular Expression) vai nos ajudar muito nessa tarefa.
Como buscar e substituir incluindo as quebras de linha
Para substituir todos os arquivos ao mesmo tempo, utilize a função Replace in Files que pode ser acessada pelas teclas de atalho:
Ctrl
+Shift
+H
no WindowsCmd
+Shift
+H
no Mac.
Após o menu na lateral se abrir, preencha o campo Search
com a primeira linha que quer buscar e para considerar na busca uma quebra de linha com espaços que podem variar, utilize a RegEx [\s\S\n]+?
e em seguida digite a segunda linha, e assim por diante. Para o meu caso foi o seguinte:
parent_title: null,[\s\S\n]+?parent_slug: null,[\s\S\n]+?parent_username: null,
Importante: Não se esqueça de, nas opções da busca, habilitar a opção Use Regular Expression
que possui o ícone de um "ponto e asterisco" .*
, do contrário a RegEx não terá efeito.
Então veja na imagem abaixo o resultado da busca destacado, onde identificou mesmo no caso de forçar espaços adicionais ali na segunda parte do JSON
de retorno:
Conclusão
Espero sinceramente que isso economize o seu tempo e reduza a margem de erro nas suas substituições de código 🤝
🛑 Um pedido sincero
Estamos realmente tentando construir um pedaço de internet mais massa aqui no TabNews, então você poderá nos ajudar DE VERDADE se compartilhar o link desta publicação em outros lugares, pode ser 1 grupo de Facebook, ou grupo de Discord, Whatsapp, onde for que você acredite que faça sentido e as pessoas de lá vão gostar de aprender sobre essa novidade, combinado? Valeu demais 🤝