+++
title = "01.05. Mudando de Modos – Modo de Comando"
date = 2015-12-22
weight = 261
+++

Essa é a parte onde você vai aprender a fazer as coisas que precisavam de um
menu para serem feitas.

<!-- more -->

Existem três "iniciadores" de comandos no modo de... erm... comando:

* `:`: Inicia um comando de edição.
* `/`: Comando de pesquisa.
* `!`: Comando de filtro externo.

## Comandos de Edição

Assim como os comandos do modo normal, a quantidade de comandos de edição é
grande demais para cobrir de uma vez só. Então vamos dar uma olhada nos mais
utilizados:

## :q

Sai do VIM. Esse deve ser o comando mais infame da história do editor -- pelo
menos, para os não iniciados. E ele ainda aparece na tela inicial do VIM, se
você prestar atenção.

## :w

Salva o arquivo atual em disco. Você pode passar o nome do arquivo a ser salvo
neste ponto. `:w`, por exemplo, irá salvar o conteúdo com o nome atual; `:w
outro-nome` irá salvar o conteúdo no arquivo "outro-nome".

## :wall

Salva todos os arquivos arquivos. Mais adiante veremos como ter vários arquivos
abertos ao mesmo tempo.

## :wq

Salva o arquivo atual e o fecha.

## :help

Abre o help do VIM no tópico indicado. Por exemplo, `:help :w` irá apresentar as
opções existentes para o comando `:w`; `:help c` irá mostrar as opções do comando `c`
do modo normal e assim por diante.

## :set

Configura (ou apresenta) alguma configuração do VIM. Mais a frente veremos como
configurar o VIM e veremos as opções este comando.

## :r

(Ou :read) Não é muito comum, mas permite carregar o conteúdo de outro arquivo
para dentro do arquivo atual. sem precisar fazer todo o processo de
copiar-e-colar (que veremos mais adiante). Um fato interessante de `:r` é que se
o nome do arquivo a ser carregado começar com "!", o VIM irá tentar executar o
comando ao invés de carregar o conteúdo. Por exemplo, `:r date` irá carregar o
conteúdo do arquivo `date` para dentro do arquivo atual enquanto que `:r !date` irá
executar o comando `date` e "colar" o resultado para dentro do arquivo atual.

## :noh

(Ou :nohighlight) Desliga a marcação sobre elementos de pesquisa. A seguir nós
vamos ver sobre o comando de pesquisa; ao fazer uma, o VIM irá colocar um
"realce" (ou "highlight") sobre as palavras encontradas. Para desligar esses
realces no texto, você pode usar `:noh`. 

Aqui eu preciso abrir três parenteses:

* Quando o vim se recusar a executar um comando, você pode forçá-lo a executar
  o mesmo de qualquer forma adicionando uma exclamação `!` no final do comando.
  Por exemplo, se o VIM se recusar a sair porque você tem alterações em um
  arquivo não salvo, `:q!` irá forçar o editor fechar, perdendo as alterações
  feitas; se o arquivo não tiver permissão de escrita, `:w!` irá fazer com que o
  VIM altere as permissão do arquivo para poder escrever (e, no final, esta
  alteração das permissões é revertida)[^1].

* Uma coisa que você vai encontrar frequentemente são referências a "buffer" e
  "arquivo". Entenda assim: buffer é a representação do arquivo na memória
  enquanto que o arquivo é a representação do conteúdo no disco. Ao abrir um
  arquivo, o VIM cria um buffer com o conteúdo do arquivo e o mantém em
  memória; se o arquivo sumir, o buffer ainda existirá e poderá ser salvo
  ainda; vários comandos internos do VIM -- se você se aventurar a escrever um
  plugin, por exemplo -- fazem referência ao buffer e não ao arquivo, mas
  existem funções que retornam o buffer de um arquivo com o nome indicado. Em
  todo esse tempo usando VIM, a distinção entre ambos nunca me pareceu
  importante e considerar, simplesmente, que "buffer" é o arquivo em memória é
  o suficiente.

* Todos os comandos internos do VIM iniciam com uma letra minuscula e plugins,
  quando adicionam comandos a mais, adicionam com letras maiúsculas[^2]. Ainda,
  boa parte dos comandos não precisa ser digitada completa; quando não há mais
  redundâncias, o comando é aceito. Por exemplo, se houverem os comandos
  ":Gblame" e ":Gbork", ":Gb" não será aceito, mas ":Gba” será porque não há
  mais nenhum outro comando que comece com ":Gba" (por isso que ":noh" funciona
  como atalho para ":nohighlight": porque não há nenhum outro comando que
  inicie com "noh").

## Comando de Pesquisa

O comando de pesquisa é, simplesmente, `/`. Uma vez pressionado, você verá o
cursor indo para a última linha da tela esperando a pesquisa. Uma coisa a ter
em mente é que o VIM utiliza expressões regulares -- então algumas coisas que
você procurar não irão funcionar exatamente como você está esperando. ".", por
exemplo. Eu não vou entrar em detalhes sobre expressões regulares porque há
pilhas de informações sobre elas na internet -- e há praticamente mais sobre
elas do que essa série tem (e terá) sobre VIM.

Dois comandos do modo normal que eu não mencionei antes por estarem ligados ao
comando de pesquisa são `n` e `N`. `n` irá mover o cursor para a próxima
ocorrência da pesquisa, enquanto que `N` move o cursor para a anterior. Note
que eu falei "move o cursor"; isso quer dizer que `n` e `N` são comandos de
movimentação e, portanto, podem ser usados com outros comandos do modo normal
que utilizam movimentação. Por exemplo, procurar por "olá" e, em modo normal,
executar `cn` irá remover tudo da posição do cursor até a próxima ocorrência de
"olá" (e entrará em modo de edição).

## Comando de Filtro

O comando de filtro pega o conteúdo no editor e passa para outro programa. Por
exemplo, se você tiver o aplicativo "rot13", ao executar `!rot13`, todo o
conteúdo do arquivo será convertido para ROT13. Se você digitar `!!rot13`, no
entanto, o conteúdo ainda será passado para o filtro e o resultado irá
substituir o conteúdo do buffer atual.

Não parece ser interessante, mas um dos aplicativos que normalmente vem com o
VIM é "xxd", que converte o conteúdo para sua representação hexadecimal. Ao
executar "!xxd", você verá todo o conteúdo do seu arquivo com os valores
hexadecimais de cada caracter.

[^1] Não confunda "Não ter permissão de escrita" com "O arquivo pertence ao
	 root". No primeiro caso, o usuário tem permissão de ler o arquivo e trocar
	 as permissões enquanto que no segundo o editor teria que ter permissões
	 especiais de execução para poder trocar as permissões. O VIM só consegue
	 responder ao `:w!`  se ele próprio -- e, no caso, o próprio usuário -- tiver
	 permissões suficientes sem requisitar outro aplicativo.

[^2] Na verdade, o VIM vem sim com comandos que inicial com letra maíuscula: São
	 os comandos de exploração de diretório `:Explore`, `:Rexplore`, `:Vexplore` e o
	 famigerado `:Sexplore`, que o pessoal costuma encurtar para `:Sex`.

{{ chapters(prev_chapter_link="./01-04-modo-visual", prev_chapter_title="Modo Visual", next_chapter_link="./01-05-modo-de-comando", next_chapter_title="Modo de Comando") }}
