Artigo original: Why I love Vim: It’s the lesser-known features that make it so amazing

Escrito por: Amit Kulkarni

Desde que comecei a usar o Vim, em 2016, descobri várias funcionalidades menos conhecidas que ele oferece nativamente, sem a necessidade de plug-ins.

Você pode falar de algumas noções básicas antes de começar a explicar sobre essas coisas novas?

Ah, com certeza! Antes de copiar e colar alguns comandos de uma folha de dicas, vou fazer uma suposição ousada: você não estaria lendo isso se quisesse uma folha de dicas e se já conhecesse o básico do Vim.

Você pode ter acabado de ouvir que as distribuições do Linux são fornecidas com um editor de texto de linha de comando padrão chamado Vim – e pode ser que você queira apenas experimentá-lo.

Então, vamos supor que você seja completamente novo nesse jogo e vamos começar apenas com o básico que precisamos entender (sem história/teoria entediante).

OBSERVAÇÃO: se você já conhece o básico, clique aqui para pular essa parte.

Qual é o seu diferencial aqui em comparação a muitos outros artigos sobre o Vim?


A maioria dos artigos introdutórios sobre o Vim começa com os modos: inserir, salvar e sair. Se você estiver realmente com disposição para aprender perfeitamente a teoria dos modos, sinta-se à vontade para ler o que for útil para você nos wikibooks (texto em inglês).

Também existem ótimos livros e artigos que explicam que há uma filosofia por trás da maneira como o Vim funciona e que os comandos no VI/Vim são destinados a serem combinados. É absolutamente verdade – e tenho certeza de que você apreciará isso assim que se acostumar com o editor e com o poder que ele oferece.

Já ouvi histórias engraçadas e vi imagens engraçadas sobre a curva de aprendizado do Vim. Isso é verdade? É realmente tão ruim assim?

Bem, sempre existirão os haters, certo? No entanto, na minha opinião, a imagem que representa um pouco melhor o Vim é a seguinte:

1_w9dLy2njrrkNUQVugpF-6g-1

A maioria dos artigos sobre o Vim se refere à curva de aprendizado como uma parede de aprendizado, mas vamos ver a situação positivamente: olhe para o outro lado da parede!

Para iniciantes, é literalmente uma parede, pois eles nunca fizeram nada parecido antes para usar um editor na linha de comando. O que mais me atraiu quando comecei como iniciante foi a onipresença do Vim.

Faça login em qualquer máquina (exceto no Windows) a partir de qualquer terminal e você literalmente pode ter um editor digitando vi de olhos fechados. O editor aparecerá na sua frente!

Outra coisa que me atraiu foi a capacidade de trabalhar sem um mouse e sem perder tempo produtivo com o touchpad ou tendo de conseguir um mouse para o laptop.

Eu sei, eu sei! Já consigo ouvir alguns de vocês gritando "Emacs! Emacs!". Eu entendo. Ocorre que, desde que me envolvi com o Vim, nunca tive realmente interesse no emacs (talvez por causa da instalação necessária). Então, sim, o emacs também é ótimo, suponho. Sinta-se à vontade para mudar antes de começar essa bela jornada com o VI(m).

Acabei de abrir meu terminal, digitei vi e pressionei a tecla Enter. Tudo o que vejo é uma tela de boas-vindas. Não consigo digitar e não sei como sair disso. Tem certeza de que é um editor poderoso com recursos?

Tenho 100% de certeza. O comportamento que você acabou de presenciar é a "parede" que mencionamos antes. Acredite em mim. O VI(m) pode fazer muitas outras coisas. Ele apenas tem suas próprias maneiras de ser usado. Você pode editar arquivos, abrir abas, dividir a tela horizontal ou verticalmente, navegar no sistema de arquivos, executar comandos Linux sem sair do arquivo, iniciar compilações a partir do seu código-fonte sem sair do arquivo, marcar diretórios e até mesmo linhas de um arquivo, buscar e substituir palavras, copiar e colar (logicamente), e muito mais.

Sim, como se fosse uma grande coisa para um editor suportar esses recursos. Todo mundo faz isso. Qual é a novidade?

Não há uma novidade. A vantagem que vejo é a capacidade de focar no seu arquivo/código sem precisar sair do teclado. Sério, se você não se importa em usar um mouse, vá em frente e abra seu MS Word ou outro editor com interface gráfica qualquer e faça todas as edições que desejar.

Entendi. Por que não usar um IDE para fazer alguns trabalhos?

Ok, então você é um desenvolvedor e gosta/ama um IDE. Não, o VI(m) não substitui o seu IDE incrível. O VI(m) não possui os recursos incríveis de fábrica que o seu IDE possui. O VI(m) é apenas pequeno em tamanho (pacote e instalação) em comparação com os IDEs robustos e está disponível para uso sem precisar de configuração ou instalações. Sério, o VI(m) não se compara às ótimas coisas que seu IDE oferece.

Chega de conversa! Mostre-me o básico.

Claro. Antes de começar, tenha em mente que qualquer usuário do Vim basicamente lida com o modo de comando e o modo de inserção. Não há escapatória (literalmente – a tecla Esc não serve para "escapar").

Vamos supor que você esteja usando algum editor e queira excluir uma função longa na linguagem C. Os passos simples que você faz são: posicione o cursor no início da linha e pressione Shift + seta para baixo até o final ou use o mouse. Essa ação que você teve que fazer para selecionar essas linhas exigiu que você parasse de digitar e pressionasse teclas. Não é verdade? Não me diga que você estava digitando algo e ao mesmo tempo pressionou teclas para selecionar magicamente o corpo da sua função.

Seja razoável. Você pausou a digitação e fez o trabalho de seleção para dizer ao seu editor que você quer fazer algo com esse texto (copiar/recortar/negrito/itálico/qualquer coisa).

Essa pausa que você fez é equivalente a estar no modo de comando no VI(m). Este é o momento em que você diz ao VI(m) que deseja fazer algumas ações em algumas linhas/palavra/qualquer coisa e você não vai digitar. Agora, VI(m) lança você para fora do modo de inserção e você está bloqueado para não digitar texto em seu arquivo. Obviamente, o outro modo no qual você pode realmente digitar em seu arquivo é o modo de inserção.

Aliás, se você estava se perguntando como selecionar o corpo da função sem selecionar o texto ou usar o mouse, eu faço isso colocando o cursor nas chaves de abertura e usando as teclas: d%

Sim, isso exclui o conteúdo do corpo da sua função. Não, não é uma combinação assustadora de teclas para lembrar! d indica que você quer excluir algo (do inglês, delete). % vai mover o cursor para o final da chave correspondente.

Agora que estabelecemos os modos básicos, vamos mergulhar no básico do VI(m).

Se você conhece o nome do arquivo que está escrevendo:

$ vi meuarquivo.c

Se você não tem certeza do nome do arquivo e quer começar a digitar:

$ vi

Assim que você abrir o vi, estará no modo de comando. Para entrar no modo de inserção, pressione i . Digite o que desejar. Pressione Esc para voltar ao modo de comando. Agora você tem algumas opções para sair, dependendo de como abriu o vi.

Se você deu um nome de arquivo: :w gravará essas alterações com segurança no disco. :q sairá do editor.  Você pode combinar essas ações com  :wq  e a tecla Return.

Se você não deu um nome de arquivo: :wq nomedoarquivo.c gravará o conteúdo no arquivo nomedoarquivo.c e sairá do editor. Se você não estiver interessado no texto que escreveu e desejar sair sem salvar nada: :q! e pronto! O ! é necessário no final para dizer: "Sim, tenho certeza de que não quero salvar o conteúdo e quero sair urgentemente".

[DEMO] Uso básico do Vim

Pronto! Você acabou de criar, editar e salvar (ou talvez não) seu primeiro arquivo vi. Parabéns!

Como mencionei anteriormente, esta não é uma introdução para iniciantes ao VI(m). Existem muitos outros artigos (fornecerei referências no final do artigo) para começar. Eu incluí essa introdução apenas para que você não se decepcione ao chegar nesta página e não encontrar nada para aprender.

Esta é a linha onde os iniciantes se despedem dos usuários intermediários e vão para a seção de referência em busca de mais artigos introdutórios brilhantes.

Boas-vindas aos usuários intermediários. Essas são algumas capacidades legais do VI(m) das quais eu não estava ciente, mas que, agora, uso diariamente para ser mais produtivo.

Para aqueles que preferem um resumo:

  • Abas
  • Sessões
  • Números de linha (+ marcas) e copiar/colar
  • Dobramento
  • Indentação com =
  • Completar ao inserir
  • Netrw
  • Divisões/janelas
  • :! e um pouquinho sobre :make

Abas no Vim

Você mencionou abas no Vim? Eu não sabia que isso existia!

Eu sei, não é incrível? Uma aba é uma página com uma ou mais janelas com um rótulo no topo.

Se você tiver interesse em saber mais sobre janelas, buffers e abas: detalhes técnicos.

Dê uma olhada:

2iMvCsKGk8iMrERGtswmB-s59dhc6A5soBD0
ec7MggpObT5GhBjZS9-XtZ4bDzjj5SUxhtlj
Hvd4DnXCni865974XxISsJuQlkMVCAPclhxk
Abas do Vim em ação

Passo a passo:

  • Abra o Vim com qualquer arquivo ou apenas com o Vim: $ vim file1.
  • Digite o conteúdo do arquivo e entre no modo de comando (pressione Esc).
  • :tabedit file2 abrirá uma nova aba e o levará para editar o file2.
  • :tabedit file3 abrirá uma nova aba e o levará para editar o file3.
  • Para navegar entre essas abas, você pode estar no modo normal e digitar: gt para ir para a próxima aba ou gT para ir para a aba anterior. Você também pode navegar até uma aba específica usando {i}gt, onde i é o índice da sua aba. Exemplo: 2gt leva você para a segunda aba.
  • Para ir diretamente para a primeira ou última aba, você pode digitar o seguinte no modo de comando: :tabfirst ou :tablast para a primeira ou para a última aba, respectivamente. Para avançar e voltar: :tabn para a próxima aba e :tabp para a aba anterior.
  • Você pode listar todas as abas abertas usando: :tabs.
  • Para abrir vários arquivos em abas: $ vim -p source.c source.h.
  • Para fechar uma única aba: :tabclose. Para fechar todas as outras abas, exceto a atual: :tabonly. Use o sufixo ! para ignorar as alterações de arquivos não salvos.

[DEMO] Abas no VIM

Acho que essa funcionalidade nos permite economizar tempo efetivamente, compartilhando o buffer entre as abas e nos permitindo copiar/colar entre as abas e manter várias sessões de abas diferentes para cada categoria de trabalho. Por exemplo: você pode ter uma aba de terminal com todas as abas do Vim contendo apenas arquivos de código-fonte C e outra aba de terminal com todas as abas do Vim contendo arquivos de cabeçalho (.h).

As abas fornecem tanta conveniência para manter todos os meus arquivos abertos e acessá-los quando eu quiser. No entanto, não é um incômodo ter que abrir todas as abas toda vez que reinicio ou fecho e abro o terminal?

Com certeza! Todos nós gostamos de ter nossas próprias sessões de trabalho nas quais trabalhamos com um conjunto de arquivos e gostaríamos que o Vim restaurasse a sessão de abas do jeito que a deixamos. O Vim nos permite salvar e restaurar essas sessões de abas! ✋

Passo a passo:

  • Abra quantas abas você quiser trabalhar.
  • A partir de qualquer aba, pressione Esc e entre no modo de comando.
  • Digite: :mksession header-files-work.vim e pressione Enter.
  • Sua sessão atual de abas abertas será armazenada em um arquivo chamado header-files-work.vim.
  • Para ver a restauração em ação, feche todas as abas e o Vim.
  • Inicie o vim com sua sessão usando: $ vim -S header-files-work.vim ou abra o vim com qualquer outro arquivo e entre no modo de comando para digitar: :source header-files-work.vim e pronto! Todas as suas abas serão abertas exatamente como você as salvou!
  • Se você alterar as abas da sessão (fechar/abrir novas), você pode salvá-las novamente usando: :mks! enquanto estiver na sessão.

[DEMO] Sessões no Vim

Posso copiar/cortar/colar sem precisar saber os números das linhas?

Ah, sim! Antes, eu costumava ver os números das linhas (:set nu)das funções que queria copiar/cortar. Digamos que eu queira copiar/cortar as linhas de 34 a 65. Eu usava :34,65y (Copiar/Obter) ou :34,65d (Cortar/Excluir).

Claro que contar as linhas e usar {n}yy ou {n}dd (onde n é o número de linhas) não é uma opção quando estamos falando de centenas de linhas, certo?

Pode haver algumas funções que se estendem por várias páginas e você não quer descer apenas para depois esquecer qual era o número da primeira linha. Há uma maneira simples de se fazer isso sem se preocupar com os números das linhas!

Passo a passo:

  • Entre no modo normal, vá para a linha de início.
  • Digite mk (marcação de um ponto com a letra 'k' ou com qualquer outra letra).
  • Mova para baixo (page down ou qualquer outro) e vá para a linha final.
  • y'k copiará todas as linhas do início ao fim.
  • d'k cortará/excluirá todas as linhas do início ao fim.

Eu tenho algumas funções longas irritantes no topo do meu arquivo e não quero perder tempo rolando ou pulando para determinadas linhas. Sei que pode ser muito pedir isso, porque não é uma IDE, mas, por acaso, podemos fazer o "dobramento" dos blocos de código?

Com certeza! Digamos que você queira pular a etapa de lembrar os números das linhas e andar por aí com seu novo amor, os marcadores. Vá para o início do corpo da função e digite mb. Agora, vá para o final do corpo da função usando % (correspondência de chaves) ou qualquer outra técnica conveniente e pressione zf'b e pronto!

Antes e depois:

pQwngYKhoq7uH095IKSfMJnhsupztCrys20q
Rs9pkL4XAD5wiAOgWZlN8enMjeWXICv54R67
Antes e depois

Se você se sentir confortável usando os números de linha, o comando é ainda mais fácil de lembrar: :5,16fo (fo significa "code fold" – "dobramento" de código). Depois de "dobrar" o seu código, é fácil alternar entre as visualizações abertas e fechadas usando zo (abrir a dobra de código) e zc (fechar a dobra de código). Não se preocupe tanto com isso. Basta usar za para alternar entre dobras abertas e fechadas.

Digamos que você tenha gasto bastante tempo dobrando suas funções em um arquivo grande. Obviamente, você vai querer manter essas dobras todas as vezes que abrir o arquivo, certo? Por que você gastaria sua energia dobrando-as se não fosse assim? Portanto, há uma solução direto no seu ~/.vimrc. Insira as seguintes linhas no seu~/.vimrc e suas dobras de código serão salvas e restauradas:

autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent loadview

Normalmente, eu me preocupo com minha indentação, mas, às vezes, tenho que editar o código de outra pessoa que não teve a mesma preocupação com a indentação. Existem atalhos mágicos para fazer isso acontecer?

Claro! É tão simples quanto: =i{ . É isso mesmo! (i significa objeto interno)

[DEMO] Indentação no Vim

Antes e depois:

eTijXdqLGj8P4sipH3Sa7t5Kf8-rR6Ea7vik
V8qnKIyQxly71eRewU4tcruxI-UCF1w-3G8F
Antes e depois

Tudo o que você precisa fazer é colocar o cursor em qualquer lugar dentro de um bloco que você deseja indentar, pressionar Esc para entrar no modo normal e, em seguida, =i{ . Pronto! Todo o corpo da função (incluindo blocos internos) será indentado.

OBSERVAÇÃO: não espere indentação em seus arquivos Python. Isso só funciona quando o Vim consegue identificar o início e o fim usando parênteses de abertura e fechamento.

Você também pode aumentar/diminuir a indentação dentro de um bloco usando: >;i{ para aumentar e nd<i{ para diminuir no modo normal.

Posso estar sonhando, mas (voz trêmula), quero dizer, eu só quero tentar, hãããã, posso estar exagerando muito com essa pergunta, mas (pausa de 5 segundos)... não importa, vamos para a próxima pergunta.

O Vim é bastante receptivo a críticas e reconhece que não é um IDE. Vamos lá, vamos ver o que você tem.

Bem, desculpe, mas, por acaso (ofegante), com algum plug-in ou algo assim, o Vim tem autocompletar como um IDE?

Você pode ficar surpreso, mas sim! Além disso, adivinha...

rufar de tambores...
rufar de tambores...
rufar de tambores...
rufar de tambores...

Sem nenhum plug-in!

Você me ouviu certo! A única condição para o Vim mostrar opções é "o Vim deve saber sobre o que você está falando". Isso pode ser através de um arquivo de origem incluído ou de funções ou variáveis definidas.

Tudo o que você precisa fazer é começar a digitar e, em seguida, pressionar Ctrl+n no modo de inserção.

bpqE5V4PSocJYzVCra5QVFD6WpWQgdKyHcw-
OBwyMT5rKu2tqTiEYbG-ZiUGdyZQ-J0hKdhJ
PtWzDrYGUVKQKHZrX7sNd8PkYQKV54qhXjRf
Exemplos em C, Python e Java

Imagine só as possibilidades, especialmente se você estiver escrevendo código em C e não conseguir se lembrar da chamada exata da biblioteca OpenSSL. Tudo o que você precisa fazer é incluir o cabeçalho!

[DEMO] Recurso de autocompletar no Vim

ATclZNHrZU8b2kesTWFlGAcXVlDp2A6KCklC
Preenchimento automático do Vim ajudando com funções OpenSSL

Deixe-me lembrar novamente: sem a necessidade de plug-ins, ok?

OBSERVAÇÃO: os arquivos de cabeçalho podem estar localizados em outros locais no Mac e o Vim pode não ser capaz de encontrá-los. Eu uso um Mac para fazer login em uma máquina Linux. Então, se você estiver usando um Mac, me desculpe por isso.

Eu entendo que o Vim é apenas um editor de texto, mas se você quer que eu trabalhe sem perder o foco e sem sair do Vim o tempo todo, quais opções eu tenho se não consigo lembrar todos os nomes de arquivo?

Simples, use o explorador de arquivos fornecido pelo Vim! Sim, o Vim oferece um explorador de arquivos simples (sem nenhum plug-in). Basta digitar: Explore em qualquer janela do Vim e você verá um explorador de arquivos fácil de navegar, que pode ser percorrido usando as setas para cima ⬆ e para baixo ⬇. Pressione Enter/Return para abrir um arquivo/diretório. Use: q para sair do explorador e do Vim. Se você não deseja sair do Vim e continuar trabalhando com um arquivo aberto, você tem 3 opções:

  1. Abra o explorador em uma divisão horizontal (:Sexplore) ou vertical (:Vexplore) e saia do explorador usando :q.
  2. Abra o explorador em uma nova aba usando :Texplore e saia usando :q
  3. Abra o explorador de arquivos na janela atual e, em seguida, descarregue o buffer atual e o remova da lista de buffers usando :bdel (excluir buffer).
GImb6qQyAyyLoE4unQ1gelPBDz8A2gbizZW9
:Explore a partir de qualquer janela do Vim mostra o explorador de arquivos
OBSERVAÇÃO: você também pode usar o comando abreviado :Ex para abrir o explorador de arquivos

Às vezes, eu tenho que repetir as mesmas etapas em algumas linhas para editar algo. Tenho certeza de que o Vim tem algum recurso que me permite fazer isso. Estou certo?

100% certo! Você está falando sobre macros – e o Vim suporta macros. Repetir o último comando executado é simples e pode ser usado para tarefas repetitivas simples. No entanto, se o processamento de texto consistir em várias etapas para obter um resultado, as macros são úteis.

Considere um exemplo de um arquivo de cabeçalho em C:

void encrypt_text(char *text, int bytes)
void decrypt_text(char *text, int bytes)
void process_text(char *text, int bytes)
void another_important_function(int bytes, double precision)

Ops! Você se esqueceu de colocar um ponto e vírgula no final de cada linha e também percebeu que todas essas funções retornam um código de erro inteiro em vez de void.

Coloque o cursor no início da palavra void

  • Pressione cw no modo normal para excluir a palavra void e digitar int.
  • Pressione Esc , vá para o final da linha usando Shift+a para inserir o ;.
  • Pressione Esc e pressione ^ para retornar ao início da linha editada.

O resultado é:

int encrypt_text(char *text, int bytes);
void decrypt_text(char *text, int bytes)
void process_text(char *text, int bytes)
void another_important_function(int bytes, double precision)

Você pode gravar essa sequência de etapas e reproduzi-la em todas as 4 linhas.

Tudo que você precisa fazer é, antes de iniciar a sequência, iniciar a gravação da macro em qualquer letra (vamos dizer a) pressionando qa no modo normal. Agora, suas etapas estarão sendo gravadas em a . Quando terminar todas as etapas, basta pressionar q no modo normal. Isso encerrará a gravação. Para reproduzir essas etapas, basta manter o cursor no mesmo lugar em que foi colocado durante a macro. Pressione @a e pronto! O Vim repetirá as mesmas etapas para você nessa linha! Para repeti-lo em várias linhas, você também pode usar @@ após usar o comando @a uma vez.

Eu sei que o Vim está longe de ser um ambiente de desenvolvimento integrado (IDE) e posso ter algumas esperanças pouco realistas, mas só uma pergunta rápida: é possível editar arquivos remotamente com o Vim?

Se você considerar os recursos disponíveis:
[1] Vim;
[2] openssh-client (vem instalado na maioria das distribuições Linux).

Você está com sorte, meu amigo! Sim, o Vim suporta a edição remota de arquivos. O Vim utiliza a conexão segura estabelecida pelo scp (cópia segura), fornecida pelo openssh-client. Há momentos em que você está trabalhando com arquivos em várias máquinas remotas e é uma perda de tempo fazer login em uma máquina apenas para editar um único arquivo! Você pode ficar tranquilo na sua máquina atual, desde que saiba as credenciais e o caminho da máquina remota.

vim scp://usuarioremoto@IP_ou_nomedohost_remoto/caminho/relativo/do/arquivo

Por exemplo: Eu preciso editar um arquivo em 10.0.18.12 armazenado em /home/dev-john/project/src/main.c e tenho as credenciais de login para dev-john, Posso acessar o main.c usando:

$ vim scp://dev-john@10.0.18.12/project/src/main.c

Posso usar o caminho relativo porque posso começar a procurar o arquivo a partir do diretório home de dev-john.

DICA: se você acessa uma máquina remota com frequência, pode criar um arquivo de configuração ssh para criar um atalho para a conexão. Crie um arquivo ~/.ssh/config com:

Host remote-dev-machine
    Hostname 10.0.18.12
    User dev-john
    IdentityFile ~/.ssh/id_rsa

Agora, você pode acessar seu arquivo usando:

$ vim scp://remote-dev-machine/project/src/main.c

Se for confuso lembrar do caminho relativo e não for intuitivo, você também pode especificá-lo de modo alternativo:

$ vim scp://maquina_dev_remota/~dev-john/project/src/main.c

Incrível! Já estou animado com as capacidades prontas para uso do Vim. Parece que você tem uma solução para muitos problemas comuns de edição. Vamos ver. Eu tenho um arquivo com mais de 2 mil linhas e as funções de meu interesse estão nas linhas 9, 768 e 1898. Eu sei que posso pular para uma linha usando o número da linha, mas não sou bom em lembrar esses números. Você tem algo para mim?

Claro que sim! O que você está procurando é uma solução de marcação local no Vim usando letras. Tudo que você precisa fazer é:

  • Coloque o cursor em qualquer linha em qualquer posição.
  • Pressione Esc para garantir que esteja no modo normal.
  • Pressione m{lowercaseletter}, onde {lowercaseletter} é qualquer letra minúscula de a-z.
  • Você acabou de criar uma marcação local para navegar em seu arquivo.

Para visualizar todas as suas marcações: pressione Esc e para entrar no modo de comando, digite :marks e pressione Enter/Return. Você verá uma lista de suas marcações. Para visitar qualquer marcação a qualquer momento, basta pressionar Esc e digitar `{lowercaseletter}. Pronto! Você será levado exatamente para a mesma localização onde marcou com o cursor. Exemplo:

IqGeVQdTLQSrCFzKVqa9-eVswnzGT2SkDy8H
Marcações no Vim

Eu criei uma marcação local para a linha 21, coluna 18 usando a. Se eu estiver editando algo na linha 1783, basta pressionar Esc e digitar `a :

rpK-WeLKT0ESw1RIL80EEgrfBQwy1wWwKnIj

Para resolver seu problema, tudo que você precisa fazer é criar 3 marcações locais e pular rapidamente para elas ao verificar :marks.

Problema resolvido!

Que tal se eu dissesse que você também pode criar marcadores globais? Sim, é possível criar marcadores globais também! Eles são equivalentes aos atalhos de janelas ou GUI (links simbólicos/hardlinks no Linux), exceto pelo fato de que você não precisa criar um link real. É isso mesmo! Você pode literalmente pular de editar um arquivo em /dir1 pra outro arquivo e linha em /project/src/ no seu Vim sem sair!

Não se preocupe, não é algo novo e difícil de lembrar. Tudo que você precisa fazer é: usar uma letra maiúscula em vez de uma letra minúscula para criar um marcador global. Isso é tudo! Sério mesmo! Você navega até o marcador global usando o mesmo processo. Por exemplo: se você criou um marcador usando mP , tudo que você precisa fazer é pressionar Esc e digitar `P e pronto! Você pula para o seu marcador global (o Vim se lembra do caminho, o que faz com que você não precise digitar nada sobre o caminho).

Você pode acessar os marcadores globais da mesma maneira que os locais: :marks

:marks
mark line  col file/text
 P     53    4 ~/project/src/large-file.c
 A     11    0 ~/project/README.md
OBSERVAÇÃO: se você não estiver interessado na posição do cursor e quiser estar no início da linha marcada, use 'P em vez de `P (use uma aspa simples em vez de crase para se posicionar no início da linha).

Ouvi dizer que o Vim suporta divisão de janelas juntamente com abas! Eu entendo que as abas são ótimas e permitem trabalhar com vários arquivos abertos ao mesmo tempo. O que é essa divisão? Por que eu gostaria disso?

Cenários:

  • Você pode querer editar um arquivo enquanto olha para outro arquivo simultaneamente (talvez esteja definindo uma função em C olhando para sua declaração em um arquivo de cabeçalho).
  • Você pode querer editar uma parte de um arquivo enquanto olha para a parte superior/inferior do mesmo arquivo simultaneamente.
  • Seu trabalho pode exigir que você edite um arquivo enquanto olha para diferentes partes de diferentes arquivos simultaneamente.

O Vim suporta a divisão da tela tanto horizontalmente quanto verticalmente. O melhor disso é que você pode até navegar pelo sistema de arquivos para abrir um arquivo quando dividir sua tela.

Aqui estão as opções disponíveis:

:split nomedoarquivo  - divide a janela na horizontal e carrega o arquivo
:vsplit nomedoarquivo - divide a janela na vertical e abre o arquivo
ctrl-w seta_para_cima - move o cursor para cima em uma janela
ctrl-w ctrl-w    - move o cursor para outra janela (ciclo)
ctrl-w _         - maximiza a janela atual na vertical
ctrl-w |         - maximiza a janela atual na horizontal
ctrl-w =         - torna todas as janelas do mesmo tamanho
:sview file      - o mesmo que split, mas somente leitura
:close           - fecha a janela atual
wj-bKJhdZ0ZJpjs3ryZGa9vGat9nkn6PoZB6
4fwUNCFGZHMpC9NgLN34JGK1JFMOSpSwRANi
Janela normal (canto superior esquerdo), :split <arquivo> (canto superior direito), :vsplit <arquivo> (inferior)
E1ewlYcq9bHjEW1sXhSpt1LaKlqNPH81jWw4

Maximizando uma janela para trabalhar:

6ojjo1cyuKPSotf19qxtRcksAKoamYpx3mgz
O painel precisa ser maximizado verticalmente e horizontalmente para ocupar toda a janela

Redimensionando:

CTRL-W [N] -	Diminui a altura da janela atual em N (padrão 1)
CTRL-W [N] +	Aumenta a altura da janela atual em N (padrão 1)
CTRL-W [N] <	Diminui a largura da janela atual em N (padrão 1)
CTRL-W [N} >	Aumenta a largura da janela atual em N (padrão 1)

Existe alguma maneira de usar o explorador de arquivos enquanto divido as janelas? Não consigo me lembrar e digitar sempre os nomes dos arquivos!

Claro, tudo que você precisa fazer é digitar: :Sexplore para o explorador de arquivos horizontal e :Vexplore para o explorador de arquivos vertical. Você também pode usar: :Vexplore! para abrir o explorador de arquivos no lado direito (em vez do padrão esquerdo).

Novamente, tudo isso funciona sem a necessidade de plug-ins adicionais.

Estou no meio da edição de um código e preciso executar rapidamente um comando de shell. Devo salvar meu trabalho, sair do Vim e executar meus comandos? Aposto que há uma maneira melhor com o Vim.

O Vim não quer que você saia dele e quer que você continue focado no seu trabalho. Por isso, há a opção de executar comandos de shell de dentro do Vim. Não se preocupe, todo o seu trabalho não salvo não será descartado, você apenas executa o seu comando e pronto! Você está de volta ao seu arquivo salvo/não salvo com segurança!

Digamos que você esteja no meio de uma sessão de codificação e precisa dar uma olhada na página do man das operações de arquivo porque esqueceu a assinatura! Você não precisa salvar seu trabalho, sair do Vim e depois verificar as páginas do man, nem precisa abrir outra aba apenas para a página do man. Você pode executar o comando diretamente dentro do editor Vim.

[DEMO] Comandos Unix do Vim

AdheBhI32Ti3bOsjH-FUPuqugongB41XMJ-k
PbN-40zw3dLd-ADaoSlY9j4r1CPveMmCdy5Q
QR57vMytkwfcB3eNbz2UDIRAS6hxw3T7j5nJ
Executando comandos de shel no Vim e retornando ao editor

Adivinha! Prepare-se para se surpreender. O Vim também suporta o comando make a partir do seu arquivo! Tudo que você precisa fazer é navegar até um diretório com um Makefile. Abra qualquer arquivo (pode ser seu código-fonte) e faça todas as alterações e salve. Espere, não há necessidade de sair para ver o resultado da compilação. Você pode acionar a compilação do make diretamente do Vim:

[DEMO] Acionar a compilação do make a partir do Vim

X5Fc1RFaV6cmQNbfBZx-mk0SORNL6vt7ZhKj
RtDOq--CU522ri03TzCNsfXXsvZ5k8bnU0QY
KbeSb0lbsalK-wXV7JLnLuf1kiRLYP-qQQt7
Acionando make builds a partir do Vim

Do mesmo modo, você pode compilar outros alvos no seu Makefile!

Exemplo – Limpeza do diretório de compilação:

et4iHMv7ucgX9wwpKF9q3tv6EItczICVobsz
ERlbwxBamwe-f6OIU3i5pypZdBCKTJvlxNt1
6hcFG2Kp9MZ0YhswQDNdIBfduX9NICQNpvx3
Diretório de limpeza usando o comando make do Vim

Espero que esses recursos legais ajudem você a usar o Vim de modo mais produtivo.

Referências (em inglês):