Vim
Para configurar seu sistema em grande parte é preciso editar arquivos de texto que ficam comumente em /etc. O vi (Visual Interface) é um editor de texto puro usado em larga escala.
Em evolução ao vi surgiu o vim (iMproved Vi - VI Melhorado). O vim e o vi se confundem por isso é comum que pensem estar usando o vi quando na verdade usa-se o vim.
Aqui procurarei mostrar o básico da edição de textos, o que ambos tem, claro, e o aperfeiçoamento contido no vim.
Modos de Operação
- Modo de Comando: as teclas do teclado são comandos para serem usados na edição este é o modo ativo quando o programa é chamado;
- Modo de Inserção: o teclado tem características para inserção do texto este modo é identificado por
-- INSERT --novimegvimjá ovinão apresenta nenhuma indicação.
Para ir do modo de comando para o modo de inserção tecle:
ipara inserir na posição atual;ainicia a inserção após o cursor;Ino início da linha;Ano final da linha;ona linha abaixo;Oinserção na linha acima;rsubstitui um caractere;Rinicia a inserção substituindo os caracteres.
Movendo
Além de poder usar as teclas e possível usar as teclas h, j, k, l, como mostrado abaixo:
k para cima
h l esquerda direita
j para baixo
Ao contrário de hoje o vi não podia usar as setas do teclado (pois não existiam setas), por isso que existe essa configuração. Dependendo do seu teclado é preferível que você use essas teclas para se movimentar ao invés das setas, pois é mais vantajoso (do ponto de vista ergonômico) você teclar ESC e movimentar do que mover sua mão para onde ficam as setas.
Ainda existem movimentações extras ou como alguns preferem dizer saltos:
0(zero) vai para o início da linha;$para o final da linha;ggpara a primeira linha;Gpara a última linha (final do arquivo);13Gou:13vai para a linha 13 (veja que o:significa que você tem que estar em modo comando);wpara a próxima palavra, repetição:2w;bpara a palavra anterior, repetição:2b.
Abrir Arquivo
A forma mais comum de abrir arquivo é informar em linha de comando o nome do arquivo:
$ vim ~/me.txt
Mesmo que o arquivo não exista o programa encarrega-se de criá-lo.
Para ainda incluir um comando do vim assim que abrir o arquivo use + seguido do comando:
$ vim +"syntax on" code.c
$ vim +/gvim vim.htm
Você também pode chamar um arquivo dentro vim, basta usar o comando :e, tal qual:
:e nome_do_outro_arquivo
Se aparecer uma mensagem semelhante a essa:
E37: No write since last change (add ! to override)
Você precisa tomar alguma atitude para salvar ou descartar as modificações no arquivo atual.
Vários Arquivos
Quando o vim abre vários arquivos, seja em linha de comando ou com o comando :e, é possível pular entre eles usando :n (:bn ou :next) para próximo e :N (:bp ou :previous) para retroceder, vale lembrar que o programa pula do último para o primeiro e do primeiro para o último.
Lendo a Entrada por Redirecionamento
Caso você esteja habituado a usar um terminal você sabe que redirecionar a saída de um comando para outro é extremamente comum, o vim também pode receber a entrada padrão como o conteúdo de um novo arquivo, basta usar o - como no exemplo abaixo:
$ ps aux | vim -
Caso já esteja com o arquivo aberto e queira pegar a saída dele, use o :r!command, exemplos:
:r!ps aux;:r!ls ~/bin;:r!cat ~/me.txt;:r!find ~/bin -type f.
Sair e Salvar
Para sair digite no modo de comandos :q, quando não há alterações para salvar. Caso haja alterações esse comando não sai, apenas alerta que o arquivo possui alterações para serem salvas e informa que :q! sai sem salvar.
Salvar: :w, após isso é possível sair do programa, sem a mensagem de erro anteriormente mencionada. Existe a combinação dos dois :wq que salva e depois sai. Ainda é permitido salvar como: :w nome.txt.
Manipulando Texto
Apagando
Apesar de poder usar BACKSPACE e DELETE para apagar existem outras formas para apagar, agilizando o trabalho.
Veja abaixo as formas mais comuns, lembre-se de que o vi permite a inserção de números para formar a repetição a favor da agilização do trabalho.
xapaga a direita do cursor; repetição:10x;Xapaga a esqueda, vale a repetição10X;ddapaga a linha inteira;- Além de funcionar com repetição o comando
dfunciona com os saltos mencionados acima, comodw, apaga até a próxima palavra oudfs, apaga até encontrar a letras; Dapaga de onde está até o final da linha, equivale ad$;
Troca (Substituição)
Apesar de poder excluir uma palavra e depois incluir outra no lugar o comando cw tem a capacidade de substituir uma palavra pela que se segue, como no exemplo: existe a palavra programa e quer substituir por script, basta colocar o cursor no p de programa e digitar cwscript no modo de comando.
Caso seja um único caractere que precise ser trocado existe a opção de usar o comando r, exemplo: data no lugar de date, solução é colocar o cursor em cima de a e teclar em modo de comando re.
Um bom uso de conjunto de comandos é para o exemplo seguinte: a palavra fiel no lugar de file a junção xp resolve o problema colocando o cursor sobre a letra e e teclando o comando; esta união vem de x apagar e p colar.
Para substituir uma palavra no texto inteiro (modo de comando):
:%s/palavraantiga/palavranova/g
Mudar a Caixa do Texto
Ao usar o vim no modo visual (teclando v em modo de comando) pode-se mudar uma letra de maiúscula para minúscula e vice-versa, já com o modo visual ativado selecione o trecho com as setas ou com qualquer outro comando de pulo e tecle U para tornar maiúsculo ou tecle u para tornar minúsculo.
Quando for somente uma palavra use estes comandos em modo de comando quando estiver no início da da palavra: gUw para maiúsculo ou guw.
Formatação
A formatação de um texto puro restringe-se a alinhamento: :left, :center e :right; para formatar uma linha inteira em esquerda, centro e direita, respectivamente.
Mas minha recomendação é que você use Markdown como formatação.
Busca
Para fazer buscas em um texto é em modo de comando /palavra que procura do texto para frente; repetir as buscas com n ou para repetir a busca inversamente N.
A busca por palavra que está do cursor para trás é ?palavra da mesma forma vale n e N.
Quando digitado / para busca há alguns caracteres que tem outro significado:
ˆinício da linha;$final de linha;.único caractere;\<início de palavra;\>final de uma palavra.
Buscas com um simples caractere faz-se com fa, para procurar adiante, com repetição como em 5fa, e Fa procura atrás do cursor, também vale a repetição: 5Fa.
Registros
Registro é uma forma de armazenar um conjunto de comandos para usá-los repetitivamente.
Uso:
- Inicia a gravação com
qlem modo de comando, no qualldeve ser substituído por uma letra deaaz; - Indica os comandos e as inclusões e termina a gravação com
ESC; - Uso do registro com
3@l, no qual3é o número de repetições que deve ser feita ela letra ao qual o registro ficou armazenado.
Exemplo:
Uma parte do script deve ficar assim:
echo -e "-d Exibe na saída somente os diretórios;"
echo -e "--version Mostra a versão;"
echo -e "--help Mostra esta ajuda;"
Mas ele está agora assim:
-d Exibe na saída somente os diretórios
--version Mostra a versão
--help Mostra esta ajuda
Primeiro grava-se o registro, vamos gravar na letra s, após teclar <esc> para ir para o modo de comando as exatas teclas são:
qs0iecho -e "ESC$a;"ESCJq
Para melhor compreensão vou tentar explicar por partes:
qspara iniciar a gravação;0para ir para o início da linha;iinicia o modo de inserção;echo -e "os caracteres de início da linha;ESCpara ir para o modo de comando;$para ir para o final da linha;ainicia a gravação depois do cursor;;"introduz os caracteres do final da linha;ESCpara ir para modo comando;Jpara ir para a próxima linha;qpara terminar a gravação.
Após a gravação o registro deve ser aplicado na linha ainda sem qualquer alteração o comando @s, neste exemplo apliquei com 2@s para executar duas vezes.
As mesmas marcas podem ser usadas em outros arquivos, desde que o arquivo ~/.viminfo não seja apagado.
Marcas
Uma marca grava a linha para que possa ser acessada posteriormente.
Seu uso é bastante simples, para marcar uma linha basta usar: ma, no qual a pode ser substituído por outros caracteres.
O acesso ou o pulo para a marca é feito com o caractere ' (acento agudo ou aspa simples) como em: 'a.
Todas as marcas pode sem vistas com o comando :marks.
Arquivo de Configuração ~/.vimrc
Somente algumas poucas configurações que chamaram minha atenção.
Quem costuma a prender o dedo no SHIFT comumente tem retornado um erro quando se depara com :Q já que o vim como grande parte dos comandos é sensível a caixa, como alternativa pode-se criar o que no shell é um alias de comando, incluindo essas linhas:
cab W w
cab Q q
cab WQ wq
cab Wq wq
As linhas são quebradas por padrão para a visualização, esta linha desabilita:
set nowrap
O gvim configura o título automaticamente; no xterm com o vim` isso precisa ser habilitado com a adição de:
set title
Perdido com os parênteses a linha:
set sm
Informa ao fechamento de um parênteses, chave e/ou colchete onde este foi iniciado e soa um beep quando não encontra seu início.
Se não quer perder nenhum parêntese, colchete ou chave a linha abaixo fecha automanticamente logo que é aberto; não costumo usá-la, mas pode lhe ser útil:
imap ( ()<esc>i
inoremap ( ()<esc>i
inoremap { {<Char-13>}<esc>i
inoremap [ []<esc>i
Para quem costuma programar com o vim digitar :syntax on toda vez que é iniciado ou colocar +"syntax on" na linha de comando é chato principalmente quando tem que abrir várias vezes e vários arquivos, a solução é colocar simplesmente syntax on no arquivo de configuração.
O TAB quando teclado imprime por padrão 8 espaços, isso pode ser configurado usando:
set tabstop=8
Com a inclusão de algo com este padrão map! 'a á contorna o problema de acentuação; seu uso é simples: quando for digitado ‘a é imediatamente substituído por á. Como ainda não encontrei um editor html que me agrade, estas linha são bastantes úteis para mim (update: não uso mais, mas fica o exemplo):
map! 'a &aacute;
map! 'A &Aacute;
map! ~a &atilde;
map! ~A &Atilde;
map! `a &agrave;
map! `A &Agrave;
map! ^a &acirc;
map! ^A &Acirc;
map! 'e &eacute;
map! 'E &Eacute;
map! ^e &ecirc;
map! ^E &Ecirc;
map! 'i &iacute;
map! 'I &Iacute;
map! 'o &oacute;
map! 'O &Oacute;
map! ~o &otilde;
map! ~O &Otilde;
map! ^o &ocirc;
map! ^O &Ocirc;
map! 'u &uacute;
map! 'U &uacute;
map! "u &uuml;
map! "U &Uuml;
map! ,c &ccedil;
map! ,C &Ccedil;
map! ,e &amp;
map! ,n &lt;
map! ,m &gt;