15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
08.10.2024

Como Usar o Editor Vi/Vim no Ubuntu: Uma Referência Técnica Completa

Vi e Vim (Vi Improved) são editores de texto modais, orientados por teclado, que operam inteiramente no terminal, tornando-os indispensáveis para administração de servidores, edição remota de configurações e fluxos de trabalho de scripting no Ubuntu e outras distribuições Linux. O Vim estende o Vi com realce de sintaxe, desfazer em múltiplos níveis, janelas divididas, suporte a plugins e uma camada de configuração programável — tudo isso consumindo recursos mínimos do sistema.

Se você gerencia um ambiente de VPS Hosting ou um servidor bare-metal, a fluência no Vim não é opcional — é uma habilidade fundamental. As sessões SSH nem sempre têm acesso a GUI, e o Vim está disponível de forma quase universal em todos os sistemas baseados em Unix que você utilizará.

Por Que o Vim Ainda Domina os Ambientes de Servidor

As IDEs modernas são poderosas, mas são irrelevantes quando você está conectado a um servidor Ubuntu headless via SSH às 2 da manhã depurando uma configuração Nginx quebrada. O design modal do Vim significa que cada tecla pressionada é um comando — não há dependência de mouse, sem sobrecarga de renderização e sem latência introduzida por uma camada gráfica.

Principais razões pelas quais os administradores de sistemas dependem do Vim:

  • Zero dependências externas: Funciona em qualquer conexão SSH, incluindo links de baixa largura de banda ou alta latência
  • Disponibilidade consistente: Pré-instalado ou facilmente instalável no Debian, Ubuntu, CentOS, Alpine e praticamente em todas as distribuições Linux
  • Velocidade em escala: Editar arquivos de configuração, arquivos de log ou scripts com milhares de linhas é mais rápido no Vim do que em qualquer editor GUI, uma vez estabelecida a memória muscular
  • Programabilidade: A linguagem de script integrada do Vim (Vimscript) e o suporte a Lua (no Neovim) permitem a automação completa de tarefas de edição repetitivas

Instalando o Vim no Ubuntu

O Ubuntu vem com um pacote `vim-tiny` mínimo, que não possui realce de sintaxe, suporte a múltiplos arquivos e muitos recursos avançados. Para funcionalidade completa, instale o pacote completo:

“`bash

sudo apt update

sudo apt install vim -y

“`

Para verificar a versão instalada e confirmar o suporte completo de recursos:

“`bash

vim –version

“`

Procure por `+syntax`, `+clipboard`, `+python3` e `+multi_byte` nos sinalizadores de recursos. Um prefixo `-` significa que esse recurso foi compilado fora do binário. Se você precisar desses recursos e eles estiverem ausentes, instale `vim-gtk3` ou `vim-nox` em vez disso:

“`bash

sudo apt install vim-nox -y # Headless full-feature build

sudo apt install vim-gtk3 -y # GTK3 build with clipboard integration

“`

Caso extremo crítico: Em imagens mínimas do servidor Ubuntu — como as usadas em contêineres Docker ou Servidores Dedicados inicializados com cloud-init — até mesmo `vi` pode estar ausente. Nesse caso, instale `vim` explicitamente antes de tentar qualquer edição de arquivo de configuração.

Abrindo, Criando e Recuperando Arquivos

“`bash

vim filename.txt # Open existing file or create new one

vim /etc/nginx/nginx.conf # Open a system configuration file (use sudo if needed)

sudo vim /etc/ssh/sshd_config # Edit privileged files

vim +42 filename.txt # Open file and jump directly to line 42

vim +/searchterm file.txt # Open file with cursor on first match of searchterm

“`

Recuperação de arquivo swap: O Vim cria automaticamente um arquivo swap oculto (`.filename.txt.swp`) durante a edição. Se sua sessão travar ou a conexão SSH cair, reabra o mesmo arquivo e o Vim solicitará que você recupere as alterações não salvas. Sempre escolha `(R)ecover` primeiro, salve o conteúdo recuperado e, em seguida, exclua o arquivo swap com `:e` seguido de `:!rm ~/.filename.txt.swp` ou executando `vim -r filename.txt`.

Esse mecanismo de recuperação é particularmente valioso ao editar arquivos de configuração críticos em servidores de produção — uma conexão interrompida não significa trabalho perdido.

Entendendo a Arquitetura Modal do Vim

O design modal do Vim é o conceito mais importante a ser internalizado. Ao contrário dos editores padrão, onde cada tecla pressionada insere um caractere, o Vim separa a navegação, edição e execução de comandos em modos distintos.

ModoAtivaçãoPropósito Principal
**Normal**`Esc` (padrão ao abrir)Navegação, exclusão, cópia, colagem, execução de macros
**Insert**`i`, `a`, `o`, `O`, `I`, `A`Digitação e inserção de texto
**Visual**`v` (caractere), `V` (linha), `Ctrl+v` (bloco)Seleção de intervalos de texto
**Visual Block**`Ctrl+v`Seleção e edição baseada em colunas
**Command-Line**`:`Operações de arquivo, pesquisa/substituição, configurações, comandos externos
**Replace**`R`Substituição de caracteres existentes
**Ex**`Q`Execução de comandos em lote (raramente usado de forma interativa)

O erro mais comum de iniciantes é pressionar teclas no modo Normal esperando que o texto apareça, entrando em pânico quando `dd` exclui uma linha ou `gg` salta para o início do arquivo. Sempre confirme seu modo atual verificando o canto inferior esquerdo da tela — o modo Insert exibe `– INSERT –`, o modo Visual exibe `– VISUAL –` e o modo Normal não mostra nada.

Comandos de Navegação no Modo Normal

A navegação eficiente é o que separa um usuário do Vim que é meramente funcional de um que é genuinamente rápido. Aprenda-os em ordem de prioridade:

Movimento Básico do Cursor

TeclaAção
`h`Mover um caractere para a esquerda
`l`Mover um caractere para a direita
`j`Mover uma linha para baixo
`k`Mover uma linha para cima
`w`Saltar para o início da próxima palavra
`b`Saltar para o início da palavra anterior
`e`Saltar para o fim da palavra atual
`0`Saltar para o início da linha
`^`Saltar para o primeiro caractere não-espaço da linha
`$`Saltar para o fim da linha
TeclaAção
`gg`Saltar para a primeira linha do arquivo
`G`Saltar para a última linha do arquivo
`:42`Saltar para a linha 42
`Ctrl+f`Rolar uma página completa para frente
`Ctrl+b`Rolar uma página completa para trás
`Ctrl+d`Rolar meia página para baixo
`Ctrl+u`Rolar meia página para cima
`%`Saltar para o colchete, parêntese ou chave correspondente
`*`Saltar para a próxima ocorrência da palavra sob o cursor
`#`Saltar para a ocorrência anterior da palavra sob o cursor

Dica para usuários avançados: Prefixe qualquer comando de movimento com um número para repeti-lo. `5j` move 5 linhas para baixo. `3w` salta 3 palavras para frente. `10dd` exclui 10 linhas. Este multiplicador numérico se aplica a praticamente todos os comandos do modo Normal e é a chave para editar com velocidade.

Entrando e Saindo do Modo Insert

TeclaComportamento
`i`Inserir antes do cursor
`a`Acrescentar após o cursor
`I`Inserir no início da linha
`A`Acrescentar no fim da linha
`o`Abrir nova linha abaixo e entrar no modo Insert
`O`Abrir nova linha acima e entrar no modo Insert
`s`Excluir o caractere sob o cursor e entrar no modo Insert
`S`Excluir a linha inteira e entrar no modo Insert
`Esc` ou `Ctrl+[`Retornar ao modo Normal

Hábito crítico: Desenvolva o reflexo de pressionar `Esc` imediatamente após terminar uma inserção de texto. Permanecer no modo Insert quando você pretende navegar é a origem da maioria das edições acidentais.

Salvar, Sair e Gerenciamento de Arquivos

Estes comandos são executados a partir do modo Command-Line (pressione `:` primeiro):

ComandoAção
`:w`Salvar (gravar) o arquivo atual
`:w filename.txt`Salvar com um novo nome de arquivo
`:q`Sair (somente se não houver alterações não salvas)
`:q!`Forçar saída, descartando todas as alterações não salvas
`:wq` ou `:x`Salvar e sair
`ZZ`Salvar e sair (atalho do modo Normal)
`ZQ`Sair sem salvar (atalho do modo Normal)
`:w !sudo tee %`Salvar um arquivo aberto sem privilégios sudo

O truque `:w !sudo tee %` é um conhecimento essencial para administradores de servidores. Quando você abre um arquivo de sistema como `/etc/fstab` sem sudo e faz alterações, não é possível salvar com `:w`. Este comando canaliza o conteúdo do buffer através de `sudo tee` para gravar o arquivo com privilégios elevados — sem precisar fechar e reabrir o Vim.

Operações de Edição: Excluir, Copiar, Colar e Desfazer

O modelo de edição do Vim é construído sobre operadores + movimentos. Um operador (como `d` para excluir ou `y` para yank/copiar) combinado com um movimento (como `w` para palavra ou `$` para fim de linha) cria uma ação de edição precisa.

Comandos de Edição Principais

ComandoAção
`x`Excluir o caractere sob o cursor
`X`Excluir o caractere antes do cursor
`dd`Excluir (recortar) a linha atual inteira
`D`Excluir do cursor até o fim da linha
`dw`Excluir do cursor até o fim da palavra
`d$`Excluir do cursor até o fim da linha
`d0`Excluir do cursor até o início da linha
`yy` ou `Y`Yank (copiar) a linha atual inteira
`yw`Yank do cursor até o fim da palavra
`p`Colar após o cursor (ou abaixo da linha atual para yanks de linha)
`P`Colar antes do cursor (ou acima da linha atual)
`u`Desfazer a última alteração
`Ctrl+r`Refazer a última alteração desfeita
`.`Repetir a última alteração (um dos comandos mais poderosos do Vim)
`~`Alternar maiúsculas/minúsculas do caractere sob o cursor
`>>`Indentar a linha atual um nível
`<<`Desindentar a linha atual um nível

O comando `.` (ponto) é indiscutivelmente o recurso mais subutilizado do Vim entre iniciantes. Ele repete sua última ação composta — se você excluiu uma palavra com `dw`, pressionar `.` exclui a próxima palavra. Se você alterou uma palavra com `cw` e digitou uma substituição, `.` aplica a mesma substituição à próxima ocorrência. Isso elimina edições manuais repetitivas em arquivos grandes.

Modo Visual: Seleção Precisa de Texto

O modo Visual fornece três granularidades de seleção:

  • `v` — Seleção visual por caractere
  • `V` — Seleção visual por linha (seleciona linhas inteiras)
  • `Ctrl+v` — Seleção visual por bloco (edição de colunas)

Após fazer uma seleção, aplique operadores:

TeclaAção na Seleção
`d`Excluir o texto selecionado
`y`Yank (copiar) o texto selecionado
`c`Alterar (excluir e entrar no modo Insert)
`>`Indentar a seleção
`<`Desindentar a seleção
`~`Alternar maiúsculas/minúsculas da seleção
`:`Entrar no modo Command-Line com o intervalo pré-preenchido

Caso de uso real do modo visual de bloco (`Ctrl+v`): Você tem um arquivo de configuração onde precisa comentar 15 linhas consecutivas adicionando `#` no início. Selecione a primeira coluna dessas linhas com `Ctrl+v`, navegue para baixo com `j`, pressione `I` (i maiúsculo), digite `#` e pressione `Esc`. O Vim aplica a inserção em todas as linhas selecionadas simultaneamente. Esta é uma tarefa que exigiria uma regex ou repetição manual na maioria dos outros editores.

Pesquisa e Substituição

Pesquisando

“`

/pattern Search forward for pattern (regex supported)

?pattern Search backward for pattern

n Jump to next match

N Jump to previous match

  • Search forward for word under cursor

Search backward for word under cursor

:noh Clear search highlighting

“`

Sintaxe de Pesquisa e Substituição

“`

:%s/old/new/g Replace all occurrences in entire file

:%s/old/new/gc Replace all with confirmation prompt for each

:%s/old/new/gi Case-insensitive replace across entire file

:10,20s/old/new/g Replace only within lines 10 through 20

:'<,'>s/old/new/g Replace within visually selected range

:%s/bwordb/new/g Replace whole word only (word boundary anchors)

“`

Suporte a regex: O Vim usa seu próprio dialeto de regex. O limite de palavra `b`, `d` para dígitos, `s` para espaços em branco e `+` (um ou mais) estão disponíveis. Para sintaxe de regex estendida, prefixe com `v`: `:%s/v(foo|bar)/baz/g` corresponde a “foo” ou “bar” e substitui por “baz”.

Trabalhando com Múltiplos Arquivos, Buffers e Janelas Divididas

É aqui que o poder do Vim se torna mais evidente para sessões de edição complexas.

Buffers

Um buffer é uma representação em memória de um arquivo. O Vim pode manter muitos buffers abertos simultaneamente.

“`

:e filename Open a file into a new buffer

:ls or :buffers List all open buffers

:b2 Switch to buffer number 2

:bnext or :bn Switch to next buffer

:bprev or :bp Switch to previous buffer

:bd Delete (close) current buffer

“`

Janelas Divididas

“`

:split filename Horizontal split, open file in upper pane

:vsplit filename Vertical split, open file in right pane

Ctrl+w h/j/k/l Navigate between split panes

Ctrl+w = Equalize split pane sizes

Ctrl+w q Close current pane

“`

Abas

“`

:tabnew filename Open file in a new tab

:tabnext or gt Switch to next tab

:tabprev or gT Switch to previous tab

:tabclose Close current tab

“`

Cenário prático: Ao editar a configuração de um servidor web em um VPS com cPanel, pode ser necessário fazer referência cruzada ao `nginx.conf` principal enquanto edita um arquivo de host virtual. Abra ambos em uma divisão vertical com `:vsplit /etc/nginx/nginx.conf` e navegue entre os painéis com `Ctrl+w l` e `Ctrl+w h` — sem necessidade de fechar um arquivo para consultar o outro.

Configurando o Vim com .vimrc

O arquivo `.vimrc` no seu diretório home é a configuração persistente do Vim. Ele é executado como Vimscript toda vez que o Vim inicia.

“`bash

vim ~/.vimrc

“`

Configuração Recomendada para Servidor de Produção

“`vim

" Display settings

set number " Show absolute line numbers

set relativenumber " Show relative line numbers (great for jump commands)

set cursorline " Highlight the current line

set scrolloff=8 " Keep 8 lines visible above/below cursor when scrolling

" Indentation

set autoindent " Copy indent from current line on new line

set smartindent " Context-aware indentation for code

set expandtab " Convert tabs to spaces

set tabstop=4 " Tab width = 4 spaces

set shiftwidth=4 " Indentation width for >> and <<

" Search behavior

set hlsearch " Highlight all search matches

set incsearch " Show matches as you type

set ignorecase " Case-insensitive search

set smartcase " Override ignorecase if search contains uppercase

" Usability

set mouse=a " Enable mouse in all modes

syntax on " Enable syntax highlighting

set encoding=utf-8 " Default encoding

set clipboard=unnamedplus " Use system clipboard for yank/paste

set undofile " Persist undo history across sessions

set undodir=~/.vim/undo " Directory for persistent undo files

" Visual

set showmatch " Briefly jump to matching bracket

set laststatus=2 " Always show status line

set wildmenu " Enhanced command-line completion

“`

Importante: A diretiva `set undofile` cria um histórico de desfazer persistente armazenado em disco. Isso significa que você pode fechar um arquivo, reabri-lo dias depois e ainda desfazer alterações da sessão anterior. Crie o diretório de desfazer antes de habilitar isso:

“`bash

mkdir -p ~/.vim/undo

“`

Isso é particularmente valioso ao fazer alterações incrementais em arquivos de configuração em sistemas de produção — por exemplo, ao ajustar configurações do PHP-FPM ou parâmetros SSL em um servidor que executa Certificados SSL para múltiplos domínios.

Macros: Automatizando Edições Repetitivas

As macros são um dos recursos mais poderosos e menos utilizados do Vim. Uma macro grava uma sequência de teclas pressionadas e as reproduz.

“`

qa Start recording macro into register 'a'

[actions] Perform any sequence of Normal/Insert mode commands

q Stop recording

@a Replay macro stored in register 'a'

@@ Replay the last executed macro

10@a Replay macro 'a' ten times

“`

Exemplo do mundo real: Você tem um arquivo CSV com 200 linhas e precisa envolver o segundo campo de cada linha entre aspas duplas. Grave a macro na primeira linha, reproduza-a 199 vezes com `199@a` e a transformação estará concluída em menos de um segundo. Sem necessidade de scripting.

Marcas e Saltos

As marcas permitem que você marque posições dentro de um arquivo e salte de volta para elas instantaneamente.

“`

ma Set mark 'a' at current cursor position

'a Jump to the line of mark 'a'

`a Jump to the exact position of mark 'a'

'' Jump back to position before last jump

Ctrl+o Jump to previous position in jump list

Ctrl+i Jump to next position in jump list

:marks List all current marks

“`

Vim vs. Nano vs. Emacs: Escolhendo o Editor de Terminal Certo

RecursoVimNanoEmacs
**Curva de aprendizado**Íngreme (sistema modal)MínimaMuito íngreme
**Tempo de inicialização**Quase instantâneoQuase instantâneoMais lento
**Uso de memória**Muito baixoMuito baixoModerado a alto
**Realce de sintaxe**CompletoBásicoCompleto
**Ecossistema de plugins**ExtensoMínimoExtenso
**Suporte a macros**Nativo, poderosoNenhumNativo
**Janelas divididas**SimNãoSim
**Edição remota**Via SSH nativamenteVia SSH nativamenteProtocolo TRAMP
**Complexidade de configuração**Moderada (.vimrc)MínimaAlta (Elisp)
**Melhor para**Usuários avançados, sysadminsEdições rápidas, iniciantesDesenvolvedores, usuários de Lisp

Para tarefas de administração de servidores — edição de arquivos de configuração, escrita de scripts shell, revisão de logs — o Vim oferece o melhor equilíbrio entre poder, disponibilidade e velocidade. O Nano é aceitável para edições pontuais quando você não pode arcar com a sobrecarga cognitiva. O Emacs é uma escolha legítima para desenvolvedores que vivem no terminal, mas sua pegada de recursos e tempo de inicialização o tornam menos prático em ambientes de servidor com restrições.

Armadilhas Comuns e Como Evitá-las

1. Editar arquivos de produção sem backup

Sempre crie um backup antes de editar arquivos críticos do sistema:

“`bash

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

sudo vim /etc/nginx/nginx.conf

“`

2. Esquecer de usar sudo

Se você abrir um arquivo privilegiado sem sudo e fizer alterações, use `:w !sudo tee %` para salvar sem perder suas edições.

3. Confundir registros

Quando você exclui texto com `dd`, ele vai para o registro padrão `"`. Se você então copiar algo com `yy`, o texto excluído é sobrescrito. Para preservar um yank antes de excluir, use registros nomeados: `"ayy` copia para o registro `a` e `"ap` cola a partir dele.

4. Deixar arquivos swap em sistemas compartilhados

Os arquivos swap do Vim em `/tmp` ou no diretório de trabalho podem confundir outros usuários ou processos automatizados. Configure um diretório de swap dedicado em `.vimrc`:

“`vim

set directory=~/.vim/swap//

“`

A barra dupla no final faz com que o Vim codifique o caminho completo do arquivo no nome do arquivo swap, evitando colisões.

5. Problemas de terminação de linha em arquivos multiplataforma

Se você editar um arquivo originado no Windows, ele pode ter terminações de linha CRLF (`rn`). O Vim exibirá `^M` no final de cada linha. Corrija isso com:

“`bash

:%s/r//g

“`

Lista de Verificação de Pontos-Chave Práticos

Use isso como uma matriz de decisão de referência rápida antes e durante as sessões do Vim:

  • Antes de editar qualquer arquivo de produção: Crie um backup com carimbo de data/hora com `cp file file.$(date +%Y%m%d%H%M%S).bak`
  • Consciência do modo: Se as teclas não estão inserindo texto, pressione `Esc` e confirme seu modo
  • Hábito de salvar rapidamente: Pressione `Esc` e depois `:w` após cada alteração significativa — não espere até o final
  • Use `:set number` temporariamente se precisar navegar para uma linha específica e não tiver isso em `.vimrc`
  • Para pesquisa/substituição global: Sempre teste com `:%s/old/new/gc` (com confirmação) antes de executar `:%s/old/new/g` cegamente
  • Prompt de arquivo swap ao abrir: Sempre escolha `(R)ecover`, salve o conteúdo e depois exclua o arquivo swap
  • Para edições de coluna: Use o modo visual de bloco `Ctrl+v` em vez de repetição manual
  • Desfazer persistente: Configure `set undofile` em `.vimrc` em qualquer servidor que você administre regularmente
  • Integração com área de transferência: Se `p` colar conteúdo inesperado, verifique se `set clipboard=unnamedplus` está definido e se `xclip` ou `xsel` está instalado
  • Em caso de dúvida: `:help keyword` abre a documentação integrada para qualquer comando ou opção

Seja gerenciando arquivos de configuração em ambientes de Hospedagem Web Compartilhada ou mantendo infraestrutura complexa em Servidores Dedicados, a eficiência do Vim se acumula ao longo do tempo — cada comando que você internaliza remove fricção do seu fluxo de trabalho permanentemente.

FAQ

P: Qual é a diferença entre Vi e Vim no Ubuntu?

`vi` em sistemas Ubuntu modernos é tipicamente um link simbólico para `vim` em um modo de compatibilidade reduzida, ou para `vim-tiny`. O Vi verdadeiro é o editor original de 1976, sem realce de sintaxe, sem desfazer em múltiplos níveis e sem suporte a plugins. O Vim adiciona mais de 100 recursos ao Vi, mantendo total compatibilidade retroativa com os atalhos de teclado do Vi.

P: Como saio do Vim se estou completamente travado?

Pressione `Esc` várias vezes para garantir que está no modo Normal, depois digite `:q!` e pressione Enter. Isso força a saída sem salvar. Se mesmo isso falhar (raro, mas possível em estados de comando recursivos), pressione `Ctrl+c` primeiro, depois `:q!`.

P: O Vim pode editar arquivos via SSH sem copiá-los localmente?

Sim. Use `vim scp://user@hostname//path/to/file` para editar arquivos remotos diretamente via SCP. O Vim lida com a transferência de forma transparente. Alternativamente, use `rsync` para baixar o arquivo, editar localmente e enviar de volta — isso é mais rápido para arquivos grandes.

P: Como habilito o realce de sintaxe para um tipo de arquivo específico que o Vim não reconhece?

Execute `:set filetype=nginx` (ou `python`, `yaml`, `bash`, etc.) para atribuir manualmente um tipo de arquivo para a sessão atual. Para torná-lo permanente para uma extensão de arquivo específica, adicione `autocmd BufRead,BufNewFile *.conf set filetype=nginx` ao seu `.vimrc`.

P: O Neovim é uma escolha melhor do que o Vim para uso em servidor?

Para tarefas puras de administração de servidores, o Vim padrão é suficiente e mais universalmente disponível. O Neovim oferece configuração baseada em Lua, melhor suporte a plugins assíncronos e um cliente LSP integrado — vantagens que importam principalmente para fluxos de trabalho de desenvolvimento. Em servidores de produção onde você instala apenas o necessário, o Vim continua sendo a escolha pragmática.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar