Post

Guia Completo: Manipulação de Texto entre Delimitadores no Vim

Guia Completo: Manipulação de Texto entre Delimitadores no Vim

Sumário

Comandos Básicos e Avançados para Manipulação de Texto entre Delimitadores no Vim

Manipular texto entre delimitadores no Vim é uma das habilidades que mais aumenta a produtividade em edições de código e texto estruturado. O Vim oferece comandos específicos para trabalhar com delimitadores comuns, como aspas, parênteses, colchetes e chaves. Esses comandos permitem desde operações simples, como seleção e deleção, até substituições e edições complexas.

Comandos Básicos para Manipulação de Texto entre Delimitadores

Os comandos básicos para manipular texto entre delimitadores no Vim seguem a mesma estrutura, usando i (inner) ou a (around) para especificar se queremos incluir ou excluir os delimitadores. Abaixo, detalhamos esses comandos para os delimitadores mais comuns.

Comando Descrição Exemplo de Uso
ci" Change Inside: Apaga o texto entre aspas e entra no modo de inserção. Com o cursor dentro de "texto", ci" remove texto e permite digitar algo novo.
di( Delete Inside: Deleta o conteúdo entre parênteses sem remover os parênteses. Em (conteúdo), di( apaga conteúdo e mantém ().
yi] Yank Inside: Copia o conteúdo entre colchetes. Em [exemplo], yi] copia exemplo.
cit Change Inside Tag: Remove conteúdo entre tags HTML/XML e inicia o modo de inserção. Em <tag>texto</tag>, cit apaga texto e permite digitar novo conteúdo.
dat Delete Around Tag: Apaga uma tag HTML inteira, incluindo o conteúdo e as tags. Em <tag>conteúdo</tag>, dat remove tudo.
vi{ Visual Inside: Seleciona o conteúdo entre chaves no modo visual. Em {exemplo}, vi{ seleciona exemplo.

Exemplos Práticos de Comandos

  1. Substituir texto entre aspas: Imagine a string "Olá, mundo!" e você quer modificar o texto entre as aspas sem alterar as aspas. Coloque o cursor dentro das aspas e pressione ci". O texto será deletado, e você pode começar a digitar um novo conteúdo.

  2. Excluir conteúdo entre colchetes: Em uma expressão como [valor], posicione o cursor dentro dos colchetes e pressione di]. O conteúdo valor será apagado, enquanto os colchetes permanecem.

  3. Selecionar texto entre parênteses: Para selecionar o conteúdo entre parênteses (exemplo), posicione o cursor dentro dos parênteses e pressione vi(. Isso coloca exemplo no modo visual, permitindo copiar, cortar ou substituir.

Uso de Text Objects e Motions para Edição Precisa

No Vim, text objects e motions são ferramentas essenciais para navegação e edição precisa. Text objects permitem manipular blocos de texto com base em padrões, como palavras, frases e delimitadores. Motions são movimentos que controlam a posição do cursor, permitindo alcançar diferentes partes do texto de maneira rápida e flexível.

Text Objects para Manipulação de Texto entre Delimitadores

O uso de text objects com os delimitadores mais comuns permite editar blocos de texto de forma precisa e rápida. Vamos revisar alguns comandos úteis:

Comando Descrição Exemplo de Uso
ci(, ca( Change Inside e Change Around Parênteses: Substitui o texto entre parênteses, com ou sem parênteses. Em (texto), ci( altera texto, ca( altera (texto).
di", da" Delete Inside e Delete Around Aspas: Deleta o conteúdo entre aspas, com ou sem aspas. Em "exemplo", di" apaga exemplo, da" apaga "exemplo".
yi[, ya[ Yank Inside e Yank Around Colchetes: Copia o conteúdo entre colchetes com ou sem eles. Em [texto], yi[ copia texto, ya[ copia [texto].
cit, dat Change Inside Tag e Delete Around Tag: Manipula o conteúdo de uma tag HTML ou XML. Em <tag>texto</tag>, cit altera texto, dat deleta tudo.

Dica Prática: Esses comandos funcionam para diferentes tipos de delimitadores, substituindo apenas o delimitador entre () e {}, [], ou <> conforme necessário.

Combinando Text Objects com Motions

No Vim, combinar text objects com motions amplia a precisão e a eficiência da manipulação de texto. Abaixo, alguns motions comuns que ajudam a alcançar diferentes partes do texto:

Comando de Motion Descrição Exemplo de Uso
w Move o cursor para o início da próxima palavra. Facilita posicionar-se em novas palavras entre delimitadores.
b Move o cursor para o início da palavra anterior. Ajuda a mover-se para o início de blocos delimitados.
% Move o cursor entre delimitadores pares. Em (exemplo), da( + % remove exemplo e alterna o cursor entre os parênteses.
) ou ( Move o cursor para o próximo ou anterior parágrafo ou bloco. Útil para navegar entre blocos de código ou texto formatado.

Exemplo de Combinação: Suponha que você precise substituir o conteúdo entre aspas de várias frases rapidamente. Posicione o cursor dentro das aspas, pressione ci", substitua o texto e, com w, mova-se para a próxima ocorrência.

Exemplo Prático de Uso Combinado

  1. Modificar conteúdo entre chaves { exemplo }:
    • Posicione o cursor dentro das chaves.
    • Use ca{ para substituir o conteúdo incluindo { }, ou ci{ para manter as chaves enquanto edita o conteúdo.
  2. Navegar entre tags HTML e manipular texto <tag>texto</tag>:
    • Coloque o cursor dentro da tag.
    • Use cit para alterar apenas o texto ou dat para excluir a tag e o conteúdo.
  3. Alternar e substituir valores numéricos entre delimitadores:
    • Se tiver (valor1, valor2), use ci( para alterar todos os valores entre parênteses. Para apenas valor2, mova o cursor com w e aplique o comando ci, para alteração mais precisa.

Automatização de Edições com Comandos Customizados no Vim

Para aumentar ainda mais a eficiência no Vim, podemos criar comandos customizados no arquivo .vimrc para manipulação de texto entre delimitadores. Esses comandos personalizados agilizam tarefas repetitivas e adicionam funções que podem ser ativadas com um simples atalho, tornando o fluxo de trabalho mais produtivo.

Criando Comandos Customizados no .vimrc

O arquivo .vimrc é onde você pode definir mapeamentos (atalhos personalizados) e funções para automatizar operações. Abaixo, veremos algumas automações úteis para manipular texto entre delimitadores.

Exemplo 1: Mapear um Atalho para Apagar Texto entre Parênteses

Um dos comandos comuns no Vim é di( para apagar texto entre parênteses sem remover os parênteses. Podemos criar um atalho para essa operação com uma tecla rápida:

1
2
" Apaga texto entre parênteses com Shift + P
nnoremap <S-P> di(

Esse comando mapeia a combinação Shift + P para o comando di(, facilitando o processo de deleção em parênteses.

Exemplo 2: Mapear um Comando para Trocar Texto entre Aspas

Outro mapeamento útil é trocar o texto dentro de aspas duplas. O comando ci" permite realizar essa tarefa, e você pode criar um atalho para tornar a edição mais rápida:

1
2
" Troca texto entre aspas duplas com Shift + "
nnoremap <S-"> ci"

Agora, ao pressionar Shift + ", o comando ci" será executado automaticamente para substituir o conteúdo entre aspas.

Funções para Manipulação Complexa de Delimitadores

No Vim, você também pode definir funções personalizadas para manipular delimitadores específicos ou executar operações complexas. Vamos ver como criar uma função para trocar conteúdo entre quaisquer delimitadores.

Exemplo 3: Função para Editar Texto Entre Delimitadores Específicos

Suponha que você precise alternar entre os delimitadores ( ), [ ] e { }. A função a seguir permite alternar facilmente entre eles:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function! SwapDelimiter(delimiter)
    if a:delimiter == "("
        normal! ci(
    elseif a:delimiter == "["
        normal! ci[
    elseif a:delimiter == "{"
        normal! ci{
    endif
endfunction

" Mapear teclas para invocar a função com delimitadores específicos
nnoremap <leader>( :call SwapDelimiter('(')<CR>
nnoremap <leader>[ :call SwapDelimiter('[')<CR>
nnoremap <leader>{ :call SwapDelimiter('{')<CR>

No exemplo acima, os atalhos \<leader>(, \<leader>[ e \<leader>{ chamam a função SwapDelimiter para permitir a substituição de conteúdo entre parênteses, colchetes e chaves, respectivamente. Você pode personalizar o delimitador desejado alterando o argumento.

Nota: O líder (<leader>) é uma tecla especial que você pode definir no .vimrc (normalmente configurada como \).

Automatizando Edição de Tags HTML

Para manipulação frequente de tags HTML ou XML, mapeie um comando específico para cit (alterar conteúdo entre tags) ou dat (deletar conteúdo e as tags).

1
2
" Mapear Shift + T para editar dentro de uma tag HTML/XML
nnoremap <S-T> cit

Testando e Salvando Alterações no .vimrc

Após adicionar comandos no .vimrc, salve o arquivo e recarregue-o com:

1
:source ~/.vimrc

Essas automações tornam as operações entre delimitadores rápidas e adaptáveis, aumentando significativamente a eficiência no Vim.


Manipulação de Delimitadores Aninhados e Específicos no Vim

Delimitadores aninhados, como múltiplos parênteses e chaves dentro de blocos de código, ou tags HTML e XML em arquivos de marcação, exigem comandos mais específicos no Vim para garantir a seleção precisa do bloco correto. Nesta seção, veremos como manipular esses delimitadores, mantendo a precisão necessária para evitar edições indesejadas.

1. Manipulação de Delimitadores Aninhados

Para trabalhar com delimitadores aninhados, o comando % é um recurso valioso, pois permite que o cursor alterne entre o delimitador de abertura e o de fechamento correspondente. Em combinação com text objects, isso permite navegar por níveis de aninhamento.

Comando Descrição Exemplo de Uso
% Move o cursor entre delimitadores pares, navegando para o delimitador correspondente. Em ((a + b) * (c - d)), % alterna entre parênteses.
va{ Visual Around: Seleciona o conteúdo e os delimitadores ao redor do cursor. Em { {aninhado} }, va{ seleciona ``.
vi{ Visual Inside: Seleciona o conteúdo interno do bloco delimitado, sem os delimitadores. Em { {aninhado} }, vi{ seleciona aninhado.

Exemplo Prático: Em uma estrutura aninhada como ((texto1) texto2), posicione o cursor no ( mais interno e use vi( para selecionar texto1. Em seguida, pressione % para mover para o ( externo, onde vi( selecionará texto2.

2. Manipulação de Tags HTML e XML

Para trabalhar com tags HTML ou XML no Vim, utilize comandos específicos para editar, excluir ou copiar conteúdo entre tags.

Comando Descrição Exemplo de Uso
cit Change Inside Tag: Substitui o conteúdo entre tags, mantendo as tags intactas. Em <tag>conteúdo</tag>, cit apaga conteúdo.
dat Delete Around Tag: Apaga a tag inteira, incluindo o conteúdo e as tags. Em <tag>conteúdo</tag>, dat remove tudo.
vit Visual Inside Tag: Seleciona o conteúdo entre as tags no modo visual. Em <tag>conteúdo</tag>, vit seleciona conteúdo.
vat Visual Around Tag: Seleciona a tag e o conteúdo. Em <tag>conteúdo</tag>, vat seleciona tudo.

Exemplo Prático: Para substituir o texto entre tags HTML como <div>exemplo</div>, posicione o cursor no conteúdo e use cit. Para apagar tudo, incluindo as tags, utilize dat.

3. Manipulação de Delimitadores Específicos no Markdown

No Markdown, os delimitadores geralmente são * ou _ para ênfase (itálico ou negrito). Manipular esses delimitadores com precisão no Vim ajuda a ajustar estilos sem afetar o texto ao redor.

Comando Descrição Exemplo de Uso
ci* Change Inside: Substitui o conteúdo entre asteriscos (negrito/itálico). Em **texto**, ci* remove texto entre **.
da_ Delete Around: Remove o delimitador sublinhado (ou itálico) e o conteúdo. Em _texto_, da_ remove _texto_.
vi* Visual Inside: Seleciona o conteúdo entre delimitadores no modo visual. Em *texto*, vi* seleciona texto.

Exemplo Prático: Em **texto importante**, posicione o cursor no t de “texto” e use ci* para substituir o conteúdo, mantendo o delimitador **. Para remover tudo, incluindo os asteriscos, utilize da*.

Essas técnicas para manipulação de delimitadores aninhados e específicos em HTML, XML e Markdown ampliam ainda mais a precisão e o poder de edição no Vim. Na próxima parte, vamos consolidar todo o aprendizado com uma tabela resumo dos comandos e funções, facilitando a consulta para diferentes cenários de manipulação de delimitadores no Vim.

Tabela Resumo dos Comandos e Funções para Manipulação de Delimitadores no Vim

Esta tabela resume os comandos apresentados para manipulação de texto entre delimitadores no Vim, categorizando-os de acordo com as principais funções: seleção, edição e manipulação específica de delimitadores, incluindo exemplos práticos.

Tabela 1: Comandos para Manipulação de Delimitadores Comuns (Parênteses, Colchetes, Aspas, Chaves)

Comando Delimitador Descrição Exemplo de Uso
ci" Aspas Substitui o conteúdo entre aspas, mantendo as aspas. Em "texto", ci" remove texto e permite novo conteúdo.
di( Parênteses Apaga o conteúdo entre parênteses sem remover os parênteses. Em (texto), di( apaga texto.
yi] Colchetes Copia o conteúdo entre colchetes. Em [exemplo], yi] copia exemplo.
ci{ Chaves Substitui o conteúdo entre chaves, mantendo as chaves. Em {dados}, ci{ remove dados.
va" Aspas Seleciona o conteúdo e as aspas no modo visual. Em "texto", va" seleciona "texto".

Tabela 2: Comandos para Manipulação de Tags HTML e XML

Comando Descrição Exemplo de Uso
cit Remove o conteúdo dentro das tags, mantendo as tags. Em <tag>texto</tag>, cit remove texto.
dat Apaga a tag completa, incluindo conteúdo e delimitadores. Em <tag>texto</tag>, dat remove tudo.
vit Seleciona o conteúdo dentro das tags no modo visual. Em <tag>texto</tag>, vit seleciona texto.
vat Seleciona a tag e o conteúdo no modo visual. Em <tag>texto</tag>, vat seleciona <tag>texto</tag>.

Tabela 3: Comandos de Navegação e Manipulação com Delimitadores Aninhados

Comando Delimitador Descrição Exemplo de Uso
% Todos Alterna entre delimitadores correspondentes. Em (a (b)), % move o cursor entre parênteses.
va{ Chaves Seleciona conteúdo com delimitadores no modo visual. Em { {aninhado} }, va{ seleciona { {aninhado} }.
vi( Parênteses Seleciona o conteúdo sem parênteses no modo visual. Em (texto), vi( seleciona texto.
va[ Colchetes Seleciona conteúdo com delimitadores. Em [dados], va[ seleciona [dados].

Tabela 4: Comandos para Delimitadores Específicos no Markdown

Comando Delimitador Descrição Exemplo de Uso
ci* Asteriscos Substitui o conteúdo entre asteriscos. Em **texto**, ci* remove texto.
da_ Sublinhado Remove o conteúdo e delimitador sublinhado. Em _texto_, da_ remove _texto_.
vi* Asteriscos Seleciona o conteúdo entre asteriscos no modo visual. Em *exemplo*, vi* seleciona exemplo.

Conclusão

Esta tabela resumo dos comandos oferece uma visão abrangente para consulta rápida, cobrindo os principais comandos e funções para manipulação de delimitadores no Vim. Com o domínio desses comandos, você terá ferramentas suficientes para realizar edições complexas com rapidez e precisão, tanto em códigos quanto em textos formatados.

This post is licensed under CC BY 4.0 by the author.