Com trabalhar com múltiplas abas com o editor Vim

Como muitos outros editores, o Vim aceita organizar seu conteúdo em abas.
Na nomenclatura dos comandos e no sistema de ajuda do Vim, o recurso de abas é chamado de tabs.

Com o tabbed editing (edição em abas), é possível iniciar conteúdo novo em uma nova aba ou passar o conteúdo existente, em alguma janela, para outra aba.
Cada aba se comporta de maneira independente, dentro da sua sessão do Vim.
Você pode dividir a tela e criar outras janelas dentro de cada aba.

Para iniciar uma nova aba, use o comando ‘tabnew’, seguido do nome do arquivo que será aberto dentro dela:


:tabnew arquivo.txt

Se o arquivo especificado não existir, um novo será criado, com este nome.
Se você usar apenas o comando ‘tabnew’, sem fornecer um nome de arquivo a ser aberto, um arquivo, em branco e sem nome, será criado dentro da nova aba.

Para sair da aba criada, basta fechar o arquivo (ou os arquivos) dentro dela, com “:q”.
Uma outra forma de fechar a aba ativa é com ‘tabclose’:


:tabclose arquivo.txt

Ou, para fechar todas as outras abas:


:tabonly

Arquivos, ainda não gravados, podem impedir que suas abas sejam fechadas.

Para alternar entre as abas, use as teclas Ctrl + PageDown ou Ctrl + PageUp.

Como alterar as dimensões das janelas dentro do Vim

Ainda há bastante para escrever sobre como usar e manipular o recurso de múltiplas janelas dentro do editor de textos Vim.
O recurso é completo e extenso, mas fácil de aplicar.

Tal como os outros comandos de janelas do Vim, os comandos de redimensionamento começam com a combinação de teclas Ctrl + W ou apenas ^W (para encurtar).

Segue a lista:

  • ^W=     “tenta” equalizar as dimensões das janelas, na horizontal.
    Pode ser influenciado pelos parâmetros winheight e winwidth.
  • ^W-     reduz/diminui a altura da janela atual em uma linha.
  • ^W+     aumenta a altura da janela em uma linha.
  • ^W<     reduz a largura da janela em uma coluna.
  • ^W>     aumenta a largura da janela em uma coluna.
  • ^W|     altera as dimensões horizontais da janela atual para o maior valor possível.

Só pra lembrar, você pode acrescentar um número antes do ^W, para aplicar um valor maior ao comando.
Por exemplo, o comando 5^W- reduz a altura da janela ativa em 5 linhas, de uma vez.

Como redimensionar janelas, com comando na CLI do Vim

Também é possível usar comando CLI dentro do Vim, para controlar os tamanhos das janelas.
Use o seguinte comandos/parâmetros para reajustar as dimensões da janela ativa:


:vertical resize n

No caso, acima, n é o valor em número de colunas para o qual a janela será redimensionada na vertical.

Como ativar o mouse no editor Vim

Ativar e usar as funções básicas de um mouse, dentro do editor Vim é bastante fácil.
É possível ativar o dispositivo para a sessão atual ou incluir o parâmetro de ativação no arquivo de configuração, para mantê-lo ativo permanentemente.

Ok. Usar o mouse no editor Vim pode parecer um contrassenso – e realmente é.
O editor foi concebido por pessoas que se deram conta de que usar o mouse durante o trabalho de escrever é extremamente contraproducente.

Mas, se você precisa, é muito fácil ajeitar isto.
Dentro do Vim, tecle ESC para ir para a linha de comando e rode


:mouse=a

Para desativar o dispositivo, dentro do Vim, execute:


:mouse=""

Para desativar o mouse apenas no modo comando, use ‘-=c’:


:mouse-=c

Foi difícil?! 😉
Para quem usa o GVim algumas outras opções de ajuste do mouse.

Como organizar as janelas dentro do editor Vim

As janelas, dentro da sessão do Vim, podem ser reorganizadas para fornecer uma visão melhor da área de trabalho.
Podem ser usadas combinações de teclas de atalho para rodar ou mudar a posição de uma janela, dentro do editor.

Se quiser obter mais informações sobre como trabalhar com múltiplas janelas dentro do Vim, sugiro ler este post.

Todos os comandos de janelas começam com a combinação Ctrl + W, seguida da combinação/tecla de comando específica.
Segue a primeira relação de teclas básicas:

  • Ctrl + w, r — Mantenha a tecla Ctrl pressionada, seguido das teclas W e R.
    Este comando é cíclico. Ou seja, move a janela atual para a direita e, quando chegar ao final, volta à posição inicial.
    Há diferença de comportamento entre ‘r’ e ‘R’: A primeira move o elemento para a direita e a outra faz o contrário.
  • Ctrl + w, x — troca janelas vizinhas de lugar (uma com a outra).

Se não houver janela ao lado, para participar da interação, o comando é inócuo (não faz nada).
Múltiplas janelas abertas dentro da sessão do Vim

Tal como muitos outros comandos no Vim, é possível especificar um número de janela para participar da ação.
Para isto, tecle um número antes do comando. Por exemplo: 3, Ctrl + w, x.

Mais comandos para mover janelas dentro do Vim

Há outros comandos para mover e alterar os layouts das janelas no Vim.
Na lista, que segue, vou usar o símbolo ^ para indicar o uso da tecla Ctrl. Assim, fica mais fácil escrever e entender (acho).
Fique atento(a) à caixa das teclas:

  • ^WK — Move a janela selecionada (atual) para o topo da tela, usando toda a largura da tela do terminal.
  • ^WJ — Reposiciona a janela atual para baixo de todas as outras, usando toda a largura do terminal.
  • ^WH — Move a janela selecionada para a esquerda de todas as outras janelas e amplia sua altura.
  • ^WL — Faz o contrário do comando anterior — ou seja, reposiciona a janela atual à direita das outras e também amplia totalmente a sua altura.
  • ^WT — Este comando abre uma nova aba (se já não houver alguma), na sessão atual do Vim, e move a janela atual para lá.

Para mim funciona assim: pressiono ^W e, em seguida, a tecla K (em maiúsculas).
Pratique bastante e anote os comandos em algum lugar para poder usar como referência rápida.

Como fechar as janelas do editor Vim

Há 3 comandos simples para fechar as janelas abertas dentro da sessão.
Segue a lista:

  • ^Wq — ou, ainda, ^WQ ou :quit (na linha de comando). Encerra a sessão.
  • ^Wc — ou, ainda, :close. Fecha a janela atual
  • ^Wo — Fecha todas as outras janelas e deixa apenas a atual aberta. Também é possível usar :only, para fechar a janela no modo comando.

Palavras finais

Se você estiver executando o Vim dentro de um emulador de terminal, na GUI do Linux, leve em conta que este é o primeiro a capturar as entradas do teclado.
Isto quer dizer que, se houver algum atalho de teclado coincidente entre o aplicativo emulador de terminal e o app executado dentro dele, vai valer o significado que a combinação de teclas tiver para o emulador.
Em outras palavras, o GNOME-terminal (para citar um exemplo), tem prioridade de captura dos comandos de teclado.
Se você tiver conflitos relacionados a isto, pode ser mais fácil alterar, nas preferências do aplicativo emulador de terminal, os atalhos de teclado que ele usa.

Como abrir múltiplas janelas no editor Vim

O padrão do Vim é abrir apenas uma janela para o arquivo que você irá editar.
Contudo, se houver necessidade, é possível abrir várias janelas, dentro de uma única sessão do editor, cada qual com o conteúdo de um arquivo.

Neste post vou mostrar como realizar as seguintes tarefas:

  1. Abrir o Vim, já com múltiplas janelas abertas, cada qual com um arquivo.
  2. Dentro de uma sessão do Vim, abrir novas janelas para abrigar novos arquivos dentro.
  3. Se mover entre as janelas.

Veja alguns exemplos de que trabalhar com múltiplas janelas pode facilitar sua vida:

  1. Com este recurso, é fácil aplicar a mesma formatação de um arquivo em vários outros, pois ele permite observar o modelo na mesma tela.
  2. Copiar e colar (inclusive através do mouse/touchpad) texto entre múltiplos arquivos.
  3. Manter um arquivo visível, para referência, enquanto trabalha em outro.
  4. Fazer comparações entre arquivos.

Isto posto, vamos ao que interessa!

Como iniciar o Vim com múltiplas janelas abertas, cada qual com um arquivo

Você pode enfileirar arquivos, na linha de comando, para cada um abrir em uma janela própria, dentro do Vim, com o uso da opção ‘-o’
segue um exemplo:


vim -o arquivo1.txt arquivo2.txt

O comando, acima, irá abrir uma sessão do Vim com uma janela ocupada por “arquivo1.txt” e outra por “arquivo2.txt”.
Se um dos arquivos não existir, o Vim irá criar um em branco com o nome dado.

Como comportamento padrão, o Vim abre os arquivos organizados horizontalmente, um sobre o outro.
vim multiplas janelas

É possível determinar também exatamente quantas janelas serão abertas, indicando um número para a opção ‘-o’:


vim -o3 arquivo1.txt arquivo2.txt

Neste caso, a terceira janela será aberta com um arquivo em branco (esperando conteúdo).

Como ajustar os tamanhos das janelas

Você pode alterar a altura da janela atual com o comando :set winheight=x, em que ‘x’ é o valor referente às linhas de altura que a janela passará a ter.
Quando você altera a geometria de uma janela, o Vim, muda a das outras janelas automaticamente.
Em um ambiente com janelas dispostas lado a lado, é possível editar a largura com o comando :set winwidth=x.

Como abrir novas janelas dentro de uma sessão do Vim

Use o comando :split para dividir a janela atual.
A nova janela será uma cópia da atual — ou seja, tudo o que você escrever em uma, será atualizado na outra.
Apenas experimente.
vim split window

E, se eu quiser que a nova janela fique ao lado da atual?
Para posicionar a nova janela (clone) do lado direito da atual, use o comando :vpslit (vertical split ou divisão vertical).
Vim vertical split

Se você quiser editar um arquivo na nova janela, indique o nome dele ao lado do comando split. Por exemplo:


:vsplit hello.c

As opções do comando :split no Vim

Os comandos – :split e :vsplit – aceitam algumas opções e parâmetros.
Basicamente a sintaxe é a seguinte:

:[n]split [++opt] [+cmd] [nome-do-arquivo]

… em que:

  • n — estabelece a quantidade de linhas (altura) da nova janela, posicionada no topo.
  • opt — passa opções para o comando split, que precisam ser precedidos pelos sinais ++.
  • cmd — precedido por um único sinal +, passa um comando a ser executado em relação à nova janela.
  • nome-do-arquivo — especifica o nome do arquivo a ser editado dentro da nova janela.

Veja outro exemplo:


:vsplit ++fileformat=unix hello.c

Abre uma janela ao lado, usando o formato UNIX de edição e dentro dela o arquivo hello.c.

Você também pode usar os comandos :new e :vnew para abrir novas janelas horizontais e verticais, respectivamente.
Os comandos ‘new’ aceitam os mesmos parâmetros dos ‘split’.

Para abrir uma nova janela com um arquivo dentro, no modo read only (somente leitura), use o comando :sview nome-do-arquivo.

Para fechar a janela atual, use o mesmo comando que usa para fechar um arquivo. Por exemplo, :q! (sair sem gravar) ou :wq (gravar e sair).

Atalhos de teclado para dividir e criar novas janelas

Você também pode criar/fechar janelas através de atalhos de teclado, usando a tecla Ctrl (^).
Os atalhos de teclado do Vim, para comandos relacionados às janelas (windows) começam com ‘W’.
Veja alguns:

  • Ctrl + W + S — divide a janela atual. Por padrão, a nova janela clona a atual.
  • Ctrl + W + N — Cria uma nova janela dentro da sessão atual, com um arquivo novo e sem nome.
  • Ctrl + W + V — Faz um split vertical

Vale ressaltar que Ctrl + Shift + W é usado para fechar a janela do GNOME-Terminal.
Como o terminal tem prioridade, ele irá capturar esta sequência, antes do programa que está sendo executado dentro dele.
gnome terminal atalhos

Se você isto estiver causando problemas para você, é mais fácil alterar o atalho de teclado do GNOM-Terminal.

Como se mover entre as janelas abertas dentro do Vim

As principais teclas de movimentação dentro das janelas obedecem a 2 princípios básicos (que você já deve conhecer...):

  1. Como se referem a janelas (windows), elas começam com o 'Ctrl + W' — tal como mencionei antes.
  2. Usam as teclas de movimentação padrão do Vim.

Segue a relação dos atalhos de teclado para "pular" entre janelas no Vim:

  • CTRL + W + ↓, CTRL + W + J — Move o cursor para a próxima janela abaixo. Note que o comando não é cíclico, ou seja, quando chegar à última janela, embaixo, ele para de ter efeito.
  • CTRL + W + ↑, CTRL + W + K — Move para a janela de cima.
  • CTRL + W + ←, CTRL + W + H — Move para a janela à esquerda.
  • CTRL + W + →, CTRL + W + L — Move para a janela à direita.
  • CTRL + W + W — Move o cursor para a próxima janela, ao lado ou embaixo. Já este comando é cíclico, ou seja, ele não para e recomeça após chegar à última janela, voltando para a primeira, que estava selecionada, quando você começou.
  • CTRL + W + T — Move o cursor direto para a janela mais próxima do canto superior esquerdo (topo).
  • CTRL + W + B — Move o cursor direto para a janela mais próxima do canto inferior direito.
  • CTRL + W + P — Move o cursor para a janela previamente acessada.

Tenha em mente que você precisa estar no modo comando, para poder se mover entre as janelas com estas teclas.