====== Outras funcionalidades do Vim ====== ===== 1. Undo Tree (Árvore de Desfazer) ===== O Vim mantém um histórico detalhado de mudanças, que vai além do simples desfazer (undo). - **:undotree**: Exibe a árvore de desfazer, permitindo visualizar diferentes versões do arquivo e restaurar um estado anterior com precisão. - **:earlier e :later**: Permitem navegar no histórico de mudanças do arquivo com base em tempo ou número de operações. Exemplo: :earlier 10m # Volta o arquivo para o estado de 10 minutos atrás :later 5u # Avança 5 operações no histórico de mudanças ### **2. Modo Ex (Comandos do Editor)** O Vim tem uma camada de comandos conhecida como **modo Ex**, onde você pode interagir diretamente com o editor. - **`:!`**: Executa comandos de shell diretamente do Vim. - Exemplo: `:!ls` executa o comando `ls` no shell. - **`:read ![comando]`**: Insere a saída de um comando de shell no arquivo. - Exemplo: `:read !date` insere a data e hora atuais no arquivo. --- ### **3. Registro e Macro** As **macros** no Vim permitem automatizar tarefas repetitivas gravando uma sequência de comandos. - **`q[a-z]`**: Inicia a gravação de uma macro. Por exemplo, `qa` grava uma macro no registro 'a'. - **`@a`**: Executa a macro gravada no registro 'a'. - **`@@`**: Repete a última macro executada. --- ### **4. Personalização com `.vimrc`** O **arquivo de configuração do Vim (`.vimrc`)** permite personalizar o comportamento do editor. Aqui estão algumas opções úteis para adicionar: - **`set number`**: Exibe a numeração das linhas automaticamente. - **`set relativenumber`**: Mostra números de linha relativos para facilitar a navegação. - **`syntax on`**: Ativa a **sintaxe colorida** automaticamente ao abrir arquivos. - **`set expandtab`**: Converte tabs em espaços. - **`set tabstop=4`**: Define o número de espaços que um tab ocupa. Exemplo básico de `.vimrc`: ```vim set number set relativenumber syntax on set expandtab set tabstop=4 set shiftwidth=4 ``` --- ### **5. Trabalhando com Marcadores (Marks)** Marcadores permitem que você salve e retorne rapidamente a locais específicos no arquivo. - **`m[a-zA-Z]`**: Marca a posição atual do cursor. Usar letras minúsculas marca posições locais ao arquivo atual, enquanto letras maiúsculas podem ser usadas entre arquivos. - Exemplo: `ma` marca a posição atual como 'a'. - **``a**: Retorna à posição marcada com 'a'. - **`'`**: Move o cursor para a linha da marcação, enquanto o caractere `\`` move para a posição exata da marcação. --- ### **6. Splits e Navegação entre Arquivos** Você já viu alguns comandos de splits, mas o Vim também tem comandos poderosos para abrir e trabalhar com múltiplos arquivos em diferentes modos de janela. - **`:split [arquivo]`**: Abre um arquivo em uma nova janela dividida horizontalmente. - **`:vsplit [arquivo]`**: Abre um arquivo em uma nova janela dividida verticalmente. Navegação entre janelas: - **`CTRL + w + w`**: Alterna entre janelas. - **`CTRL + w + [hjkl]`**: Move para a janela à esquerda, para baixo, para cima ou à direita, respectivamente. ===== 7. Registros de Corte e Copia (Yank e Delete) ===== No Vim, tudo que você copia ou deleta é armazenado em **registros**. Você pode acessar diferentes registros para colar conteúdo específico. - **"aY**: Copia (yank) a linha atual para o registro 'a'. - **"ap**: Cola o conteúdo do registro 'a'. - **"bd**: Deleta o texto selecionado para o registro 'b'. Os registros do Vim também incluem o registro de corte, yank, e registros anônimos. Continuando com as funcionalidades avançadas do **Vim**, vamos explorar mais algumas funcionalidades poderosas, como busca avançada com substituição, integração com plugins e manipulação de múltiplos arquivos. --- ===== 8. Busca Avançada com Substituição (Substitute) ===== * **:%s/palavra/nova_palavra/g**: Substitui todas as ocorrências de "palavra" por "nova_palavra" no arquivo inteiro. Exemplo: `:%s/erro/acerto/g` substitui todas as ocorrências da palavra "erro" por "acerto" no arquivo. * **:%s/palavra/nova_palavra/gc**: Substitui todas as ocorrências com **confirmação interativa**. Exemplo: `:%s/erro/acerto/gc` perguntará para cada ocorrência se você deseja substituir. * **:%s/\(foo\)\(bar\)/\2\1/g**: Usa grupos de captura e referências na substituição. Exemplo: `:%s/\(foo\)\(bar\)/\2\1/g` troca todas as ocorrências de "foobar" para "barfoo". * **:%s/^/inicio:/g**: Adiciona "inicio:" no começo de cada linha. Exemplo: `:%s/^/inicio:/g` adiciona o prefixo no início de todas as linhas. ===== 9. Integração com Plugins ===== * **vim-plug**: Um gerenciador de plugins popular. Exemplo de configuração no `.vimrc`: ```vim call plug#begin('~/.vim/plugged') Plug 'preservim/nerdtree' " Gerenciador de arquivos Plug 'junegunn/fzf.vim' " Fuzzy Finder Plug 'tpope/vim-fugitive' " Integração com Git Plug 'vim-airline/vim-airline' " Status bar avançada call plug#end() ``` * **NERDTree**: Gerenciador de arquivos com árvore de diretórios. Exemplo: `:NERDTreeToggle` abre/fecha a árvore de diretórios. * **fzf.vim**: Fuzzy Finder para busca rápida de arquivos. Exemplo: `:Files` abre a janela de busca de arquivos. * **vim-fugitive**: Integração com Git. Exemplo: `:Gstatus` exibe o status do repositório Git. ===== 10. Registros Avançados ===== * **"ayy**: Copia (yank) a linha atual para o registro 'a'. Exemplo: `"ayy"` copia a linha para o registro 'a'. * **"ap**: Cola o conteúdo do registro 'a'. Exemplo: `"ap"` cola o conteúdo do registro 'a'. * **:reg**: Exibe o conteúdo de todos os registros. Exemplo: `:reg` lista todos os registros disponíveis. * **"+p**: Cola o conteúdo do clipboard do sistema. Exemplo: `"+p` cola o conteúdo do clipboard do sistema no Vim. ===== 11. Navegação por Tags ===== * **ctags**: Ferramenta que gera um arquivo de tags para facilitar a navegação. Exemplo: `ctags -R .` gera tags para todos os arquivos do diretório atual. * **CTRL + ]**: Vai para a definição da tag sob o cursor. Exemplo: Pressione `CTRL + ]` para saltar para a definição da função. * **CTRL + t**: Retorna ao ponto anterior após seguir uma tag. Exemplo: Pressione `CTRL + t` para voltar à posição anterior. * **:tselect [nome]**: Lista todas as definições de uma tag e permite escolher uma. Exemplo: `:tselect main` exibe todas as definições de "main". ===== 12. Abreviações Automáticas ===== * **:ab [atalho] [expansão]**: Cria uma abreviação que será expandida automaticamente. Exemplo: `:ab brb be right back` faz com que "brb" se expanda para "be right back". * **:iab [atalho] [expansão]**: Cria uma abreviação apenas no modo de inserção. Exemplo: `:iab eml MyEmail@example.com` expande "eml" para "MyEmail@example.com". * **:unab [atalho]**: Remove uma abreviação. Exemplo: `:unab brb` remove a abreviação definida anteriormente para "brb". ===== Conclusão ===== O Vim possui uma enorme variedade de funcionalidades que podem ser usadas para personalizar o ambiente de edição e automatizar tarefas repetitivas. Com o uso de registros, tags, macros e plugins, o Vim se torna uma ferramenta extremamente poderosa e flexível, capaz de atender a diferentes estilos de trabalho e necessidades de desenvolvimento.