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 --
novim
egvim
já ovi
não apresenta nenhuma indicação.
Para ir do modo de comando para o modo de inserção tecle:
i
para inserir na posição atual;a
inicia a inserção após o cursor;I
no início da linha;A
no final da linha;o
na linha abaixo;O
inserção na linha acima;r
substitui um caractere;R
inicia 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;gg
para a primeira linha;G
para a última linha (final do arquivo);13G
ou:13
vai para a linha 13 (veja que o:
significa que você tem que estar em modo comando);w
para a próxima palavra, repetição:2w
;b
para 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.
x
apaga a direita do cursor; repetição:10x
;X
apaga a esqueda, vale a repetição10X
;dd
apaga a linha inteira;- Além de funcionar com repetição o comando
d
funciona com os saltos mencionados acima, comodw
, apaga até a próxima palavra oudfs
, apaga até encontrar a letras
; D
apaga 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
ql
em modo de comando, no quall
deve ser substituído por uma letra dea
az
; - 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 el
a 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:
qs
para iniciar a gravação;0
para ir para o início da linha;i
inicia o modo de inserção;echo -e "
os caracteres de início da linha;ESC
para ir para o modo de comando;$
para ir para o final da linha;a
inicia a gravação depois do cursor;;"
introduz os caracteres do final da linha;ESC
para ir para modo comando;J
para ir para a próxima linha;q
para 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
xtermcom 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;