Personalizando o vim!

Este artigo mostra como personalizar o vim usando vimscript. Então o seu vim terá as opções de [salvar] usando F2, [salvar como] usando F3, [sair] usando F10 (ou quaisquer teclas que desejar); irá também armazenar backups numa pasta "~/Backup", além de outras utilidades. Testado em diversas distribuições Linux e também Windows 98, Me e XP.

[ Hits: 98.361 ]

Por: Douglas - Brasilvision em 21/11/2004


Editando "arquivos.vim"



Então, para que os plugins criados por você (arquivos.vim) sejam executados, edite o arquivo .vimrc (note que ficará oculto) no seu home, colocando a seguinte linha no início do seu conteúdo:

so ~/.vim/plugin/mysave.vim

Salve, feche e inicie o vim como preferir (vi, vim, gvim, etc). É desejável que se apresente o seguinte erro:
------------------------------------------------
Error detected while processing .vimrc:
Line 1:
E484: Can't open file ~/.vim/plugin/mysave.vim
------------------------------------------------

Isso é ótimo! Indica que ao ser iniciado, o vim usou o arquivo de referência e está procurando pelo arquivo "mysave.vim"! Como ele não existe ainda, o programa exibiu um erro previsível. O código do erro pode variar de acordo com a sua versão.

Agora, saia do vim e crie um diretório de backup no seu home, para que o backup dos seus códigos possa ser armazenado sempre aí:

$ mkdir ~/Backup

OBS: Para meu controle, os nomes dos meus diretórios sempre iniciam com letra maiúscula e os arquivos com letra minúscula (sendo visualmente rápido identificá-los), contudo, coloque o nome que desejar, mas não se esqueça que o conteúdo do mysave.vim se refere a um diretório Backup. Logo, se o nome do diretório criado aqui for diferente, ele deve ser atualizado no mysave.vim.

Vamos agora criar o plugin que chamei de mysave. Entre no diretório apresentado, com o comando:

$ cd ~/.vim/plugin

Se o diretório ~/.vim/plugin ainda não existe, pode ser que os pacotes necessários para a execução de plugins não tenham sido instalados no seu SO, neste caso, recomendo verificar os pacotes oferecidos para vi, vim e gvim da sua distribuição, e instalá-los.

O VI é o editor original e clássico criado unicamente para Unix, o vim é o VI Improved (melhorado), que permite uma série de novos recursos, e o gvim é o vim de interface gráfica, com barras de ferramentas, menus clicáveis, seleção by mouse, etc. O interessante é que criando o .vimrc e o plugin, os três absorverão os recursos adicionados no mysave.vim.

Então, dentro do diretório ~/.vim/plugin, crie um arquivo com o nome de mysave.vim e coloque o seguinte texto como conteúdo (não modifique nada por enquanto, incluindo as aspas duplas!):

" mysave.vim, by Douglas F. Azevedo - 2000

set tabstop=4
set shiftwidth=4
set columns=90
set lines=35
set number
set autoindent
set tabstop=4
set shiftwidth=4
set smarttab
set textwidth=80
set backup
set backupdir=~/Backup

" COMANDOS
" ---------------
" <F2> - Salva o arquivo corrente
" <F3> - Salva o arquivo com um outro nome
" <F10> - Sai (se o arquivo foi salvo)
" <F11> - Sai (forçadamente, sem salvar)


if exists("mysave")
finish
endif
let mysave=1

" inoremap=modo texto; map=modo comando

" Salva o arquivo corrente

inoremap <F2> <C-O>:call MSave()<CR>
map <F2> <C-O>:call MSave()<CR>

" Salva o arquivo com um outro nome
inoremap <F3> <C-O>:call MSaveAs()<CR>
map <F3> <C-O>:call MSaveAs()<CR>

" Saída rápida:
inoremap <F10> <C-O>:call MQuit() <CR>
map <F10> <C-O>:call MQuit()<CR>

" Saída rápida forçada!
inoremap <F11> <C-O>:call MRealQuit() <CR>
map <F11> <C-O>:call MRealQuit() <CR>

function! MSave()
    
    if expand("%") == ""
        if has("gui_running")
    let fname = input("SALVO! - Pressione <ENTER>")
            browse write
        else
            let fname = input("-> Salvar como: ")
            if fname == ""
                return
            endif
            execute "write " . fname
        endif
    else
let fname = input("SALVO! - Pressione <ENTER>")
      write!
    endif
endfunction

function! MSaveAs()
    if has("gui_running")
        browse saveas
    else
        let fname = input("-> Salvar como: ")
        if fname == ""
            return
        endif
        execute "w " . fname
    endif
endfunction

function! MQuit()
    execute "quit"
endfunction

function! MRealQuit()
    execute "quit!"
endfunction

Repare que os comandos são conhecidos, o :w é equivalente ao : write, o :q é equivalente ao :quit; normalmente usamos o menor comando equivalente para ganharmos um pouco de tempo, porém tanto no script quanto na hora de salvar, você pode digitar :w ou :write - é exatamente a mesma coisa. Eu preferi usar os nomes maiores aqui para descrever melhor o que está acontecendo em cada função.

Um detalhe importante acerca das funções usadas no vimscript é que elas devem ter o nome iniciado obrigatoriamente por letra maiúscula depois da palavra reservada function! e o resto pode ser deduzido por qualquer programador com certa experiência.

Os comentários do vimscript são as aspas duplas no início da linha, e os comandos que estão implementados aí são os seguintes:
  • <F2> - Salva o arquivo corrente;
  • <F3> - Salva o arquivo com um outro nome;
  • <F10> - Sai (se o arquivo foi salvo);
  • <F11> - Sai (forçadamente, sem salvar).

Além destes comandos, podemos observar alguns ajustes no início do arquivo, estes são os ajustes finos do vim; o "set number" e o "tabstop" mencionados antes foram inseridos aí. Caso ainda não conheça os comandos de ajustes usados, vale a pena ler uma breve explicação de alguns:
  • set number: exibe os números das linhas do arquivo em edição.
  • set autoindent: utiliza identação automática de acordo com a linguagem usada.
  • set tabstop=4: ajusta a largura de tabulação para 4 espaços.
  • set shiftwidth=4: ajusta a largura das paradas dos recuos para 4 espaços
  • set smarttab: utiliza "tabulação inteligente".
  • set textwidth=80: faz com que o texto seja quebrado para uma outra linha na edição quando passar de 80 colunas.
  • set backup: diz para o vim criar uma cópia do arquivo editado.
  • set backupdir=~/Backup: Indica o local onde será colocada a cópia.
  • set columns=90: (em caso de GUI) ajusta a largura da janela para 90 colunas.
  • set lines=35: (em caso de GUI) ajusta a altura da janela para 35 linhas.

Se os pacotes estão instalados e os arquivos estão corretamente editados nos locais adequados, então o vi, vim, e o gvim já estão prontos para executar estas funções. Agora é só abrir ou criar arquivos, salvá-los usando as teclas mencionadas e verificar se foi deixada uma cópia de segurança do arquivo no seu diretório ~/Backup. Não é necessário reiniciar a máquina, nem a interface ou algum processo.

OBS: Caso o número das linhas não tenha aparecido ao iniciar o vim ou uma das funções ativadas pelo F2, F3 etc não esteja funcionando, acrescente a linha no início do seu ~/.vimrc:

set nocompatible

Isso faz com que alguma tecla protegida pelo vim seja "liberada" para uso das funções criadas no mysave.vim.

Página anterior     Próxima página

Páginas do artigo
   1. vim: um editor para ser personalizado
   2. Executando scripts
   3. Arquivo de referência (ou de inicialização)
   4. Editando "arquivos.vim"
   5. Usuários que usam o vim para Windows ou DOS:
   6. Mais dicas interessantes sobre o vim
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

DHCP sem (quase :-D) mistérios

Compiz - Janelas à 360 graus no Linux

Servidor Jabber com LDAP

Big Linux + Edubuntu - Uma Excelente Alternativa Livre para as Escolas

LTSP - Linux Terminal Service

  
Comentários
[1] Comentário enviado por m4sk4r4 em 21/11/2004 - 11:07h

Olá douglas,

Muito bom o artigo, mas queria ressaltar que o comando vi no slackware, não sei em outras distro é um link para o editor elvis, intão para executar o vim mesmo use o comando vim ou gvim.

t+
[]'s

[2] Comentário enviado por doug_cpp em 21/11/2004 - 13:42h

Obrigado pela dica, M4skara, esqueci deste detalhe!
Usuários com o elvis instalado devem iniciar o vim com gvim ou vim (pois o comando vi iniciará o elvis)!

Outra coisa que esqueci de mencionar no artigo é que o vimscript é "syntax sensitive", ou seja:

if has("gui_running") browse saveas

é diferente de

if has("gui_running")
browse saveas

Logo, muito cuidado com a correta endentação...

Abraço a todos,
Douglas

[3] Comentário enviado por y2h4ck em 21/11/2004 - 22:49h

http://www.flashdance.cx/books/tar.gz/szKVrqf89/Teach_Yourself_Emacs_in_24_Hours.tar.gz

Presentinho pra galera eheheh :D

Abraços

[4] Comentário enviado por wilbil em 22/11/2004 - 00:49h

uma coisa que sempre quiz personalizar o vim e nunca descobri como

e abilitar o shift para selecionar um testo e depois
copiar ctrl + depois colcar crtl +d

nao precisa que seja estas teclas mas que tenha esta utilidade de copiar e colar

alguem ja consegui fazer isso?
ou me encinaria como abilitar isso

[5] Comentário enviado por fabio em 22/11/2004 - 08:40h

Wilbil,

Faz o seguinte: pressione ESC para sair do modo de inserção. Agora pressione "V" para entrar no modo visual. Selecione o texto desejado usando as setas direcionais, ao terminar pressione "y" (yank) para copiar. Vá até onde desejas colar o texto e pressione "p" (paste) para colar.

[]'s

[6] Comentário enviado por fabio em 22/11/2004 - 08:43h

Ah, outra dica que uso muito no vim. Estou digitando um texto mais ou menos assim:

bla bla bla
inconstitucionalissimamente
bla bla bla
...
e agora vou digitar o palavrão acima de novo: inc[Ctrl+p]

Ou seja, digite Ctrl+p que o vim auto-completa a palavra com a primeira ocorrência que ele encontrar de "inc*". Isso nos poupa um bocado de digitação.

[]'s

[7] Comentário enviado por brock_carlos em 22/11/2004 - 11:37h

Mais umas dicas:
Como uso o putty, as teclas F2 ate F7 o mapeamento, nunca funcionou comigo, só sobraram F8 até F12, mas tudo bem.
e nos comamdos map, eu retirei o <C-O>, porque se o cara não estava em modo de inserção, o vim estava indo pro documento anteriormente aberto no terminal(isso estava muito esquisito, heheh).

[8] Comentário enviado por jeffestanislau em 23/11/2004 - 12:13h

Hehehe...
Falar mais o que... apenas que ficou muito bom e os comentários foram ótimos...

[9] Comentário enviado por nico_di_mafre em 23/11/2004 - 15:56h

Muito intereçante este artigo, eu até ja coloquei o link dele no meu grupo d informática no yahoo!!!!

[10] Comentário enviado por augusto_hp em 08/03/2005 - 13:20h

Olha, eu sabia que p VIM era bom e permitia várias mudanças. Mas nunca soube como executar essas mudanças ... muito menos corri trás delas.
Mas esse é um ótimo artigo. Merece estar no 'Favoritos' de todos os membros vol.

[11] Comentário enviado por juliaojunior em 06/11/2006 - 18:47h

muito bom o artigo. vou parar um pouco para aprender sobre.

[12] Comentário enviado por igormol em 25/06/2007 - 14:46h

legal...

[13] Comentário enviado por arturbmallmann em 20/11/2010 - 12:59h

interesante nunca se quer tinha intendido o editor vim, poderoso o bicho, principal de tudo é q aprendi a usalo


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts