Posts Tagged ‘programação’

Mini manual VIM (Vi IMproved)

Sunday, July 5th, 2009

Buena moçada, vou deixar esfriando o artigo sobre testes unitários, e vou refatorar um artigo de um ano atrás. O artigo é sobre o VIM (Vi IMproved), este editor (fantástico diga-se de passagem) que tenho usado pouco nos últimos tempos, agora é a minha nova escolha para desenvolvimento, dado que cansei de usar IDEs pesadas e que pouca ajuda têm me dado. Usei meu antigo artigo como base de estudo dos principais comandos, e agora monto um pequeno manual para eu mesmo usar e quem quiser também.

O VIM é um editor de texto que foi baseado no “vi”, e é disponibilizado para uma grande quantidade de plataformas (Linux, *BSD, Windows, BeOS, AmigaOS, MacOS, etc). No linux e mac os x normalmente ele vem instalado na distribuição, caso não esteja instalado e você deseja instalar, basta baixar a última versão dele em http://www.vim.org.

O VIM utiliza buffers, ou seja, representações do texto em memória, quando um arquivo é aberto, ele é carregado em memória, e todas as alterações feitas nele afetam apenas o buffer (arquivo em memória) e não no arquivo original, até que o mesmo seja salvo. Caso você abra o VIM sem especificar um arquivo, ele cria um buffer vazio em memória sem nome definido.

O VIM é um software simples, mas metódico, exigindo perícia e um pequeno tempo para o usuário gostar dele, quando o usuário gosta, é paixão eterna. Se o mesmo não consegue se adaptar, ele dificilmente abre novamento o editor.

O VIM possui vários modos de funcionamento, abaixo vou listá-los:

  • INSERT: o modo “insert” é utilizado para inserir e modificar o conteúdo do arquivo, neste modo, tudo que é feito é gravado somente em memória;
  • VISUAL: o modo “visual” é utilizado para selecionar textos e fazer operações sobre esta seleção, como copiar, recortar, colar, excluir, navegar entre o início e o fim de uma linha;
  • Linha de comando: neste modo é possível executar diversos comandos do VIM ou até mesmo da shell, com os comandos do VIM podemos fazer muitas coisas, como gravar buffers, abrir arquivos, navegar entre arquivos abertos, procurar por trechos de texto e fazer substituição de textos com expressões regulares, e também executar tarefas em repetição de forma automatizada;
  • Nenhum modo: é como o VIM abre, a partir dele é possível navegar pelo arquivo aberto com os cursores Home/End, PageUp/PageDown ou até mesmo utilizar comandos do VIM.

Comandos do VIM

Vamos começar pelo final, como fechar um arquivo

	# Se você estiver em modo INSERT, tecle ESC para sair deste modo;
	# Digite ":" para entrar em modo Linha de Comando;
	# Digite "q" (quit) e tecle ENTER para executar o comando;
	# nota: se o arquivo estiver protegido contra gravação e você fez alguma modificação,
       após digitar "q", digite "!" ficando "q!" e depois tecle ENTER para executar.

Bom, assim melhor né, agora você já sabe fechar o VIM :P . Agora por segundo porém não menos importante, vamos aprender a inserir os textos no nosso arquivo:

	# Para entrar em modo INSERT, digite "i" ou "a" (também funciona, herança do "vi");
	# Digite a vontade;
	# Tecle ESC para sair do modo INSERT;

Edição de texto (Recortar/Copiar/Colar)

	# Se você estiver em modo INSERT, tecle ESC para sair deste modo;
	# Digite "v" para entrar em modo VISUAL;
	# Faça a seleção do texto utilizando os cursores;
	# Digite "d" (delete) para recortar o texto (movê-lo para a memória);
	# Ou digite "y" (yank) para copiar o texto (copiá-lo para a memória);
	# Escolha o lugar onde quer copiá-lo;
	# Digite "p" para inserir o texto a partir da posição do cursor;
	# Digite "P" para inserir o texto antes da posição do cursor.

A partir daqui estamos no modo Linha de Comando, ou seja, tecle ESC se você estiver em modo INPUT ou VISUAL:

Trabalhando com os arquivos/buffers

	# :e "arquivo" - Abre um arquivo, criando um novo buffer e abrindo ele em uma nova "tela";
	# :buffers - Lista todos os arquivos abertos;
	# :b "arquivo" - Salta para outro arquivo aberto, use TAB para autocompletar os nomes dos arquivos abertos;
	# :bn - Salta para o próximo arquivo aberto;
	# :bp - Salta para o arquivo anterior aberto;
	# :w - Grava o buffer atual com o nome do arquivo aberto;
	# :wq - Grava o buffer atual com seu nome, e fecha o VIM;
	# :wqa - Grava todos os buffers em seus determinados arquivos e fecha o VIM.

Navegando dentro do arquivo aberto (estes comandos se equivalem aos do cursor de seu teclado, a diferença é que eles não funcionam em qualquer modo, somente em Linha de Comando):

	# "h" - Esquerda
	# "l" - Direita
	# "k" - Cima
	# "j" - Baixo

Navegar entre as linhas:

	# "gg" - Move o cursor para a primeira linha do arquivo;
	# :0 - Move o cursor para a primeira linha do arquivo;
	# "G" - Move o cursor para a última linha do arquivo;
	# :$ - Move o cursor para a última linha do arquivo;
	# "*" - Salta para a próxima ocorrência da palavra sob o cursor;
	# '' - Volta para a linha anterior ao ultimo salto;
	# "ma" - Cria um marcador de linha chamado "a";
	# "`a" - Move o cursor para a marca "a";
	# "'a" - Move o cursor para a linha que contém a marca "a";
	# " - Move o cursor para o caracter anterior ao último salto.

Navegação na linha:

	# 0 - Move o cursor para o inicio da linha;
	# $ - Move o cursor para o final da linha.

Apagando texto:

	# "dd" - Apaga a linha atual;
	# "d" "CIMA" - Apaga a linha atual e anterior;
	# "d" "BAIXO" - Apaga a linha atual e seguindo;
	# "d" "ESQUERDA" - Apaga o caracter a esquerda;
	# "d" "DIREITA" - Apaga o caracter a direita;
	# "x" - Apaga o caracter a direita;
	# "d0" - Apaga até o principio da linha;
	# "d$" - Apaga até o final da linha;
	# "dw" - Apaga a palavra seguinte;
	# "db" - Apaga a palavra anterior;
	# "d'a" - Apaga até a linha com o marcador "a";
	# "d`a" - Apaga até o caracter com o marcador "a".

Multiplicadores:

Muitos comandos podem ser precedidos de um multiplicador, ou seja, podem ser executados “n” vezes, esse número de repetições deve ser inserido antes do comando desejado e só é apresentado na tela (canto inferior direito) se ativarmos a opção “showcmd” (:set showcmd). Abaixo vou citar alguns exemplos:

	# 20 "BAIXO" - Move o cursor 20 linhas para baixo;
	# 4 dd - Apaga as 4 linhas seguintes, incluindo a atual;
	# 4 d "DIREITA" - Apaga os 6 próximos caracteres a direita.

Busca de expressões dentro do texto:

	# "/expressão" - Procurar para frente;
	# "?expressão" - Procurar para trás;
	# "ENTER" - Ir para a primeira ocorrência;
	# "n" - Ir para próxima ocorrência;
	# "N" - Ir para o ocorrência anterior.

Expressões Regulares:

	# "." - Representa qualquer caracter simples exceto mudança de linha;
	# " " - Representa o caracte que se segue;
	# "*" - Representa 0 ou mais ocorrências do caracter precedente;
	# "[]" - Representa um dos caracteres incluidos;
	# "^" - Indica que o caracter seguinte deve estar no inicio da linha;
	# "$" - Representa caracteres no final da linha;
	# "[^]" - Representa qualquer coisa exceto o que vem depois do "^";
	# "[-]" - Representa um intervalo de caracteres.

Alguns exemplos de expressões regulares:

	# "c.pe" - Representa cope, cape, caper, ...;
	# "c.pe " - Representa c.pe, c.per, ...;
	# "sto*p" - Representa stp, stop, stoop, ...;
	# "car.*n" - Representa carton, cartoon, carmen, ...;
	# "xyz.*" - Representa xyz até o final da linha;
	# "^The" - Representa qualquer coisa que comece com The;
	# "atime$" - Representa qualquer coisa terminado com atime;
	# "^Only$" - Representa qualquer linha que contenha somente Only;
	# "b[aou]rn" - Representa barn, born e burn;
        # "Ver[D-F]" - Representa VerD, VerE e VerF;
        # "Ver[^1-9]" - Representa Ver seguido de um não digito;
      	# "the[ir][re]" - Representa their, theie, therr e there;
	# "[A-Za-z][A-Za-z]*" - Representa qualquer palavra;

Substituição de Textos:

	# :%s/substituir isto/por isto/g

Quando utilizarmos o caracter “%” antes de “s” estamos dizendo que a substituição deve ser feita em todas as ocorrências da palavra buscada, podemos especificar um intervalo também:

	# :linha1,linha3s/substituir isto/por isto/g

Do modo que fizemos agora, ele vai substituir somente as ocorrências entre a linha 1 e linha 3. Se utilizarmos “/gc” ao invés de “/g”, é necessário a confirmação antes da substituição de cada ocorrência. Enfim, as expressões utilizadas são delimitadas pelo caractere “/”, ou seja, o que vier entre a primeira e a segunda “/” representa a expressão a procurar e ser substituida, o que vier entre a segunda e terceira representa a expressão que vai substituir a primeira. Se a segunda expressão ficar vazia, as ocorrências da primeira serão eliminadas. Exemplos:

	# :1,$s/the/The/g - Substitui the por The desde a primeira linha até a última;
	# :%s/the/The/g - Substitui the por The desde a primeira linha até a última;
	# :%s/the/The/gc - Substitui the por The em todo o documento pedindo confirmação;
	# :.,5s/^.*//g - Apaga todas as linhas entre a atual e a 5ª linha;
	# :'a,.s/^..//g - Apaga os dois primeiros caracteres das linhas entre a marca "a" e a atual;
	# :%s/$/ < -/g - Acrescenta "<-" ao final de cada linha do documento;

O caracter "&" pode ser usado para representar a expressão buscada quando utilizado na segunda expressão, de modo a incluir a mesma na substituição, exemplo:

	# :%s/help/&ing/g - Substitui help por helping
	# :%s/ */&&/g - Duplica o numero de espaços entre as palavras
	# :%s/and/&/g - Para inserir o próprio caracter "&" usamos "&"

Registros

Podem ser utilizados para automatizar tarefas repetitivas, como inserir ou editar tags html, para utilizá-los você deve sair do modo INSERT, pressione “q”, depois o caracter que será o nome do registro no qual você queira guardar a ação, por exemplo “a”. Depois disso vai aparecer “recording” na parte inferior do terminal, de agora em diante, tudo que que for feito será gravado no registro “a”, para acabar de gravar é só sair do modo INSERT e pressionar “q” novamente, a palavra “recording” deve desaparecer. Para executar o registro basta pressionar “@” e após isso o caracter correspondente ao registro, no nosso exemplo “a”.

	# "q" - Inicia e finaliza a gravação de um registro;
	# "@" - Executa um determinado registro.

Além de gravar sequências de comando, quando você copia ou recorta textos no VIM, está jogando este conteúdo para o registro, desta forma você pode especificar qual registro quer usar em cada caso. Para isso basta você indicar qual registro usar. Referindo-se a ele utilizando o caracter “, desta forma, para se referir ao registro “a”, utilize ‘”a’. Exemplos:

	# "ay - Copia o texto selecionado para o registro "a";
	# "ad - Remove o texto selecionado e o coloca no registro "a";
	# "ap - Cola o conteúdo do registro "a" para depois do cursor.

Janelas:

	# :sp - Cria uma nova janela com o mesmo arquivo aberto;
	# :sp arquivo - Abre uma nova janela com o arquivo especificado;
	# :q - Fecha a janela atual, não fecha se for a unica janela com o arquivo aberto e o mesmo não estiver gravado;
	# :q! - Fecha a janela atual de qualquer forma (Forçado);
	# :qa - Fecha todas as janelas e sai, pedindo confirmação;
	# CTRL "ww" - Pula para a janela seguinte.

Bom, por enquanto é isso, em breve estarei postando um artigo sobre a configuração do VIM, coisa que estou explorando agora e não tenho muito a adicionar, qualquer coisa visitem a documentação do VIM online em http://vimdoc.sourceforge.net/.

Clicky Web Analytics