Anda di halaman 1dari 19

Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

Vim/Como editar preferncias


Origem: Wikilivros, livros abertos por um mundo aberto.
< Vim

ndice
1 Como editar preferncias no Vim
1.1 Onde colocar plugins e temas de cor
2 Comentrios
3 Notas sobre mapeamentos
4 Recarregando o arquivo de congurao
5 Set
5.1 Exibindo caracteres invisveis
5.2 Setando macros prvias
6 Mapeamentos
6.1 Limpando o buer de buscas
6.2 Destacar palavra sob o cursor
6.3 Remover linhas em branco duplicadas
7 Os atalhos
7.1 Autocomandos
8 Fechamento automtico de parnteses
9 Destaque colorido para endereos IP
10 Fechamento automtico de Tags HTML
11 Data automtica
12 Change log
13 Barra de status
14 Mudar cor da barra de status dependendo do modo
15 Rolar outra janela
16 Funo para numerar linhas
17 Funo para trocar o esquema de cores
18 Miscelnea
19 Funo para gerar backup
20 Como adicionar o python ao path do vim?
21 Criando um menu
21.1 Criando menus para um modo especco
21.2 Exemplo de menu
22 Outros mapeamentos
23 Fazendo buscas e substituies
24 Complementao com tab
25 Abreviaes
26 Referncias

Como editar preferncias no Vim

1 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

O arquivo de preferncias do vim ".vimrc", um arquivo oculto que pode ser


criado no home do usurio

~/.vimrc

Caso use o Windows o arquivo :

~\_vimrc

Onde colocar plugins e temas de cor

No windows procure ou crie uma pasta chamada 'vimles' que ca em

c:\documents and settings\seuusuario\

No linux procure ou crie uma pasta chamada .vim que deve car em

/home/user/.vim

Nesta pasta '.vim' ou 'vimles' deve haver pastas tipo

vimfiles
|
+--color
|
+--doc
|
+--syntax
|
+--plugin

Comentrios
" linhas comeadas com aspas so comentrios
" e portanto sero ignoradas pelo vim

Ao fazer modicaes comente usando aspas duplas no comeo da linha, os


comentrios lhe ajudaro mais tarde, pois medida que o seu vimrc cresce
podem aparecer dvidas sobre o que determinado trecho faz:)

Notas sobre mapeamentos


Mapeamentos so um ponto importante do vim, com eles podemos controlar
aes com quaisquer teclas, mas antes temos que saber que:

Tecla : Tecla mapeada

2 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

<CR> : Enter
<ESC> : Escape
<LEADER> : normalmente \
<BAR> : | pipe
<CWORD> : Palavra sob o cursor
<CFILE> : Arquivo sob o cursor
<CFILE>< : Arquivo sob o cursor sem extenso
<SFILE> : Contedo do arquivo sob o cursor
<LEFT> : Salta um caractere para esquerda
<UP> : Equivale clicar em 'seta acima'
<M-F4> : A tecla ALT -> M mais a tecla F4
<C-f> : Control f
<BS> : Backspace
<space> : Espao
<TAB> : Tab

No Vim podemos mapear uma tecla para o modo normal, realizando


determinada operao e a mesma tecla pode desempenhar outra funo
qualquer em modo insert ou comando, veja:

" mostra o nome do arquivo com o caminho


map <F2> :echo expand("%:p")

" insere um texto qualquer


imap <F2> Nome de uma pessoa

A nica diferena nos mapeamentos acima que o mapeamento para modo


insert comea com 'i', assim como para o modo comando ':' comea com 'c' no
caso cmap.

Recarregando o arquivo de congurao


Cada alterao no arquivo de congurao do vim s ter efeito na prxima
vez que voc abrir o vim a menos que voc coloque isto dentro do mesmo

" recarregar o vimrc


" Source the .vimrc or _vimrc file, depending on system
if &term == "win32" || "pcterm" || has("gui_win32")
map ,v :e $HOME/_vimrc<CR>
nmap <F12> :<C-u>source ~/_vimrc <BAR> echo "Vimrc recarregado!"<CR>
else
map ,v :e $HOME/.vimrc<CR>
nmap <F12> :<C-u>source ~/.vimrc <BAR> echo "Vimrc recarregado!"<CR>
endif

Agora basta pressionar F12 em modo normal e as alteraes passam a valer


instantaneamente!

Set
Os comandos set podem ser colocados no .vimrc:

3 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

set nu

ou digitados como comandos:

:set nu

set nu "mostra numerao de linhas


set showmode "mostra o modo em que estamos
set showcmd "mostra no status os comandos inseridos
set ts=4 "tamanho das tabulaes
syntax on "habilita cores
set hls "destaca com cores os termos procurados
set incsearch "habilita a busca incremental
set ai "auto identao
set aw "salvamento automtico - veja :help aw
set ignorecase "faz o vim ignorar maisculas e minsculas nas buscas
set smartcase "Se comear uma busca em maisculo ele habilita o case
set ic "ignora maiscula e minsculas em uma busca
set scs "ao fazer uma busca com maisculos considerar case sensitive
set backup
set backupext=.backup
set backupdir=~/.backup,./
set cul "abreviao de cursor line (destaca linha atual)
set ve=all "permite mover o cursor para reas onde no h texto
set ttyfast "Envia mais caracteres ao terminal, melhorando o redraw de janelas.
set columns=88 "Determina a largura da janela.
set mousemodel=popup "exibe o contedo de folders e sugestes spell

O comando gqap ajusta o pargrafo atual em modo normal

" * coloca 2 espaos aps o . quando usando o gq


"set nojoinspaces
" **************************************************************************
" * *
" * geralmente usamos ^I para representar uma tabulao *
" * <Tab>, e $ para indicar o fim de linha. Mas possvel *
" * customizar essas opes. sintaxe: *
" * *
" * set listchars=key:string,key:string *
" * *
" * *
" * - eol:{char} *
" * *
" * Define o caracter a ser posto depois do fim da linha *
" * *
" * - tab:{char1}{char2} *
" * *
" * O tab mostrado pelo primeiro caracter {char1} e *
" * seguido por {char2} *
" * *
" * - trail:{char} *
" * *
" * Esse caracter representa os espaos em branco. *
" * *
" * - extends:{char} *
" * *
" * Esse caracter representa o incio do fim da linha sem quebr-la *
" * Est opo funciona com a opo nowrap habilitada *
" * *
" **************************************************************************

4 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

"exemplo 1:
"set listchars=tab:>-,trail:.,eol:#,extends:@

"exemplo 2:
"set listchars=tab:>-

"exemplo 3:
"set listchars=tab:>-

"exemplo 4:
set nowrap "Essa opo desabilita a quebra de linha
"set listchars=extends:+

Caso esteja usando o gvim pode setar um esquema de cores


set colo desert

Exibindo caracteres invisveis

:set list

Setando macros prvias

Denindo uma macro de nome 's' para ordenar e retirar linhas duplicadas

let @s=":%sort -u"

Para executar a macro 's' denida acima faa:

@s

O Vim colocar no comando

:%sort -u

Bastando pressionar <ENTER>. Observao: esta macro prvia pode car no


vimrc ou ser digitada em comando ':'

Obs: O vim partir de sua verso '7' passou a ter um comando de ordenao
prprio, ou seja, ele no depende mais de comandos externos para ordenar e
retirar duplicados

5 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

:5,20sort u
"da linha 5 at a linha 20 ordene e retire duplicados

:sort n
" ordene meu documento considerando nmeros
" isto til pois se a primeira coluna contiver
" nmeros a ordenao pode ficar errada caso no usemos
" o parmetro 'n'

Mapeamentos
Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende
de sua criatividade e do quanto conhece o Vim.

Os mapeamentos abaixo so teis para quem escreve cdigos html, permitem


inserir caracteres reservados do html usando uma barra invertida para
proteger os mesmos, o vim substituir os "barra alguma coisa" pelo caractere
correspondente.

inoremap \& &amp;


inoremap \< &lt;
inoremap \> &gt;
inoremap \. &middot;

O termo inoremap signica: em modo "insert" no remapear, ou seja ele


mapeia o atalho e no permite que o mesmo seja remapeado, e o mapeamento
s funciona em modo insert, isso signica que um atalho pode ser mapeado
para diferentes modos de operao.

Veja este outro mapeamento:

map <F11> <esc>:set nu!<cr>

Permite habilitar ou desabilitar nmeros de linha do arquivo corrente. A


exclamao ao nal torna o comando booleano, ou seja, se a numerao estiver
ativa ser desabilitada, caso contrrio ser ativada. O "<cr>" ao nal
representa um ENTER.

Limpando o buer de buscas

A cada busca, se a opo 'hls' estiver habilitada o vim faz um destaque


colorido, mas se voc quiser limpar pode fazer este mapeamento

nno <S-F11> <esc>:let @/=""<CR>

um mapeamento para o modo normal que faz com que a combinao de


teclas Shift-F11 limpe o buer de buscas

6 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

Destacar palavra sob o cursor

nmap <s-f> :let @/="<C-r><C-w>"<CR>

O atalho acima 's-f' corresponde a Shift-f

Remover linhas em branco duplicadas

map ,d <esc>:%s/\(^\n\{2,}\)/\r/g<cr>

No mapeamento acima estamos associando o atalho

,d

ao desejada, fazer com que linhas em branco sucessivas seja substituidas


por uma s linha em branco, vejaos como funciona:

map ...................... mapear


,d ....................... atalho que quermos
<esc> .................... se estive em modo insert sai
: ........................ em modo de comando
% ........................ em todo o arquivo
s ........................ substitua
\n ....................... quebra de linha
{2,} ..................... duas ou mais vezes
\r ....................... trocado por \r enter
g ........................ globalmente
<cr> ..................... confirmao do comando

As barras invertidas podem no ser usadas se o seu vim estiver com a opo
magic habilitada

:set magic

Por acaso este um padro portanto tente usar assim pra ver se funciona

map ,d :%s/\n{2,}/\r/g<cr>

Os atalhos
Para criar mapeamentos, precisamos conhecer a maneira de representar as
teclas e combinaes. Alguns exemplos:

<C-X> onde 'C' corresponde a CTRL e 'X' a uma tecla qualquer


<Left> seta para a esquerda
<Right> seta para a direita
<C-M-A> CTRL+ALT+A

7 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

Podemos fazer mapeamentos globais ou que funcionam em apenas um modo:

map - funciona em qualquer modo


nmap - apenas no modo Normal
imap - apenas no modo de Insero

Mover linhas com Ctrl+(seta abaixo) ou Ctrl+(seta acima):

" tem que estar em modo normal!


nmap <C-Down> ddp
nmap <C-Up> ddkP

Salvando com uma tecla de funo:

" salva com F9


nmap <F9> :w<cr>
" F10 - sai do vim
nmap <F10> <esc>:q<cr>

Convertendo as iniciais de um documento para maisculas

" MinusculasMaiusculas: converte a primeira letra de cada


" frase para MAISCULAS
nmap ,mm :%s/\C\([.!?][])"']*\($\|[ ]\)\_s*\)\(\l\)/\1\U\3/g<CR>
"caso queira confirmao coloque uma letra 'c' no final da linha acima:
" (...) \3/gc<CR>

Autocomandos

Autocomandos habilitam comandos automticos para situaes especcas. Se


voc deseja que seja executada uma determinada ao ao iniciar um novo
arquivo o seu autocomando dever ser mais ou menos assim:

au BufNewFile tipo ao

Veja um exemplo:

au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim

No exemplo acima o vim aplica autocomandos para arquivos novos


"BufNewFile" ou existentes "BufRead" do tipo 'txt' e para estes tipos carrega
um arquivo de syntax, ou seja, um esquema de cores especco.

" http://aurelio.net/doc/vim/txt.vim coloque em ~/.vim/syntax


au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim

Para arquivos do tipo txt '*.txt' use um arquivo de syntax em particular

8 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

O autocomando abaixo coloca um cabealho para scripts 'bash' caso a linha 1


esteja vazia, observe que os arquivos em questo tem que ter a extenso .sh

au BufEnter *.sh if getline(1) == "" | :call setline(1, "#!/bin/bash") | endif

Autocomando para arquivos python

" autocomandos para python


autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class

Fechamento automtico de parnteses


" --------------------------------------
" Ativa fechamento automtico para parntese
" Set automatic expansion of parenthesis/brackets
inoremap ( ()<esc>:call BC_AddChar(")")<cr>i
inoremap { {}<esc>:call BC_AddChar("}")<cr>i
inoremap [ []<esc>:call BC_AddChar("]")<cr>i
" inoremap " ""<esc>:call BC_AddChar(""")<cr>i
"
" mapeia CTRL+j para pular fora de parnteses colchetes etc...
inoremap <C-j> <esc>:call search(BC_GetChar(), "W")<cr>a
" Function for the above
function! BC_AddChar(schar)
if exists("b:robstack")
let b:robstack = b:robstack . a:schar
else
let b:robstack = a:schar
endif
endfunction
function! BC_GetChar()
let l:char = b:robstack[strlen(b:robstack)-1]
let b:robstack = strpart(b:robstack, 0, strlen(b:robstack)-1)
return l:char
endfunction

Outra opo para fechamento de parnteses

" Fechamento automtico de parnteses


imap { {}<left>
imap ( ()<left>
imap [ []<left>

" pular fora dos parnteses, colchetes e chaves, mover o cursor


" no modo insert
imap <c-l> <esc><right>a
imap <c-h> <esc><left>a

Destaque colorido para endereos IP


Referncias: http://vim.wikia.com/wiki/Mathing_valid_IP_address

syn match ipaddr /\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0

9 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

hi link ipaddr Identifier

Fechamento automtico de Tags HTML


imap ><Tab> ><Esc>mt?<\w<Cr>:let @/=""<Cr>lyiw`ta</><Esc>P`tli

Agora basta escrever a sua tag e ao fech-la com * aperte <Tab> para
completar com seu respectivo fechamento.

Data automtica
Caso esta funo esteja congurada corretamente, a cada salvamento do
arquivo a data contida no cabealho ser atualizada.

" =============== DATA AUTOMTICA ===========================


" insira na em seus arquivos = "ultima modificao:"
" em qualquer das trs primeiras linhas
fun! SetDate()
mark z
if getline(1) =~ ".*ultima modificao:" ||
\ getline(2) =~ ".*ultima modificao:" ||
\ getline(3) =~ ".*ultima modificao:" ||
\ getline(4) =~ ".*ultima modificao:" ||
\ getline(5) =~ ".*ultima modificao:"
exec "1,5s/\s*ultima modificao: .*$/ultima modificao: " . strftime("%c") . "/"
endif
exec "'z"
endfun
" abaixo a chamada a funo de data que chamada toda vez que voc
" salva um arquivo preexistente
fun! LastChange()
mark z
if getline(1) =~ ".*Last Change:" ||
\ getline(2) =~ ".*Last Change:" ||
\ getline(3) =~ ".*Last Change:" ||
\ getline(4) =~ ".*Last Change:" ||
\ getline(5) =~ ".*Last Change:"
exec "1,5s/\s*Last Change: .*$/Last Change: " . strftime("%c") . "/"
endif
exec "'z"
endfun
" coloquei duas opes (alterao e modificao), assim
" no tem perigo de voc esquecer e o sistema
" no atualizar a data do salvamento, outra melhoria na funo
" que agora vlida para qualquer tipo de arquivo. se usar
" num html por exemplo insira um comeo de comentrio na linha
" da data e feche o comentrio na prxima linha
" abaixo a chamada a funo de data que chamada toda vez que voc
" salva um arquivo preexistente
au BufWritePre * call SetDate()
au BufWritePre * call LastChange()
"============ Fim da Data Automtica ===================

Change log
" === Cria um registro de alteraes de arquivo ========

10 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

" ChangeLog entry convenience


" Funo para inserir um status do arquivo
" cirado: data de criao, alterao, autor etc (em modo normal)
fun! InsertChangeLog()
normal(1G)
call append(0, "Arquivo")
call append(1, "Criado: " . strftime("%a %d/%b/%Y hs %H:%M"))
call append(2, "ultima modificao: " . strftime("%a %d/%b/%Y hs %H:%M"))
call append(3, "Autor: Srgio Luiz Arajo Silva")
normal($)
endfun
map ,cl :call InsertChangeLog()<cr>A
"
" Cria um cabealho para scripts bash
fun! InsertHeadBash()
normal(1G)
:set ft=bash
:set ts=4
call append(0, "#!bin/bash")
call append(1, "# Criado em:" . strftime("%a %d/%b/%Y hs %H:%M"))
call append(2, "# ultima modificao:" . strftime("%a %d/%b/%Y hs %H:%M"))
call append(3, "# Nome da empresa")
call append(3, "# Propsito do script")
normal($)
endfun
map ,sh :call InsertHeadBash()<cr>A

Barra de status
" O trecho abaixo formata a barra de status com algumas opes interessantes!
" mostra o cdigo ascii do caractere sob o cursor e outras coisas mais
set statusline=%F%m%r%h%w [FORMATO=%{&ff}] [TIPO=%Y] [ASCII=\%03.3b] [HEX=\%02.2B] [POSIO=%04l,%04v][%p%%] [T
set laststatus=2 " Sempre exibe a barra de status

Mudar cor da barra de status dependendo do


modo
" Ao entrar em modo insert ele muda a cor da barra de status
" altera a cor da linha de status dependendo do modo
if version >= 700
au InsertEnter * hi StatusLine term=reverse ctermbg=5 gui=undercurl guisp=Magenta
au InsertLeave * hi StatusLine term=reverse ctermfg=0 ctermbg=2 gui=bold,reverse
endif

Rolar outra janela


Se voc dividir janelas tipo

Ctrl-w-n

pode colocar esta funo no seu .vimrc

" rola janela alternativa

11 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

fun! ScrollOtherWindow(dir)
if a:dir == "down"
let move = "\<C-E>"
elseif a:dir == "up"
let move = "\<C-Y>"
endif
exec "normal \<C-W>p" . move . "\<C-W>p"
endfun
nmap <silent> <M-Down> :call ScrollOtherWindow("down")<CR>
nmap <silent> <M-Up> :call ScrollOtherWindow("up")<CR>

Esta funo acionada com o atalho 'alt' + setas acima e abaixo

Funo para numerar linhas


Adicione as linhas abaixo ao seu vimrc

"numerar linhas
command! -nargs=* -range Nlist <line1>,<line2>call Nlist(<f-args>)
function! Nlist(...) range
if 2 == a:0
let start = a:1
let append = a:2
elseif 1 == a:0
let start = a:1
let append = " "
else
let start = 1
let append = " "
endif

" try to work like getline (i.e. allow the user to pass in . $ or 'x)
if 0 == (start + 0)
let start = line(start)
endif

exe a:firstline . "," . a:lastline . 's/^/\=line(".")-a:firstline+start.append/'


endfunction

Agora voc pode fazer uma seleo visual

Shift-v

Pressionar 'j' at selecionar o trecho desejado e

:'<,'>Nlist

O vim numerar o trecho selecionado partir de 1 outro modo seria assim:

map ,n <esc>:let i=1 <bar> g/^/s//\=i."\t"/ <bar> let i=i+1<cr>

S que deste modo ele numeraria todo o arquivo usando o atalho ,n

Funo para trocar o esquema de cores

12 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

function! <SID>SwitchColorSchemes()
if exists("g:colors_name")
if g:colors_name == 'native'
colorscheme billw
elseif g:colors_name == 'billw'
colorscheme desert
elseif g:colors_name == 'desert'
colorscheme navajo-night
elseif g:colors_name == 'navajo-night'
colorscheme zenburn
elseif g:colors_name == 'zenburn'
colorscheme bmichaelsen
elseif g:colors_name == 'bmichaelsen'
colorscheme wintersday
elseif g:colors_name == 'wintersday'
colorscheme summerfruit
elseif g:colors_name == 'summerfruit'
colorscheme native
endif
endif
endfunction
map <silent> <F6> :call <SID>SwitchColorSchemes()<CR>

baixe os esquemas aqui: http://nanasi.jp/old/colorscheme_0.html

Miscelnea
Uma funo para inserir cabealho de scrip bash para chamar a funo basta
pressionar, sh em modo normal

" Cria um cabealho para scripts bash


fun! InsertHeadBash()
normal(1G)
:set ft=bash
:set ts=4
call append(0, "#!/bin/bash")
call append(1, "# Criado em:" . strftime("%a %d/%b/%Y hs %H:%M"))
call append(2, "# ultima modificao:" . strftime("%a %d/%b/%Y hs %H:%M"))
call append(3, "# NOME DA SUA EMPRESA")
call append(3, "# Propsito do script")
normal($)
endfun
map ,sh :call InsertHeadBash()<cr>

Funo para inserir cabealhos python

" funo para inserir cabealhos python


fun! BufNewFile_PY()
normal(1G)
:set ft=python
:set ts=2
call append(0, "#!/usr/bin/env python")
call append(1, "# # -*- coding: ISO-8859-1 -*-")
call append(2, "# Criado em:" . strftime("%a %d/%b/%Y hs %H:%M"))
call append(3, "# Last Change: " . strftime("%a %d/%b/%Y hs %H:%M"))
call append(4, "# Instituicao: <+nome+>")
call append(5, "# Proposito do script: <+descreva+>")
call append(6, "# Autor: <+seuNome+>")
call append(7, "# site: <+seuSite+>")
normal gg

13 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

endfun
autocmd BufNewFile *.py call BufNewFile_PY()
map ,py :call BufNewFile_PY()<cr>A

" Ao editar um arquivo ser aberto no ltimo ponto em " que foi editado

autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif

"
" Permite recarregar o Vim para que modificaes no
" Prprio vimrc seja ativadas com o mesmo sendo editado
nmap <F12> :<C-u>source $HOME/.vimrc <BAR> echo "Vimrc recarregado!"<CR>

Redimensionar janelas

" Redimensionar a janela com


" ALT+seta direita e esquerda
map <M-right> <ESC>:resize +2 <CR>
map <M-left> <ESC>:resize -2 <CR>

Funo para pular para uma linha qualquer

"ir para linha


" ir para uma linha especfica

function! GoToLine()
let ln = inputdialog("ir para a linha...")
exe ":" . ln
endfunction

"no meu caso o mapeamento com Ctrl-l


"use o que melhor lhe convier
imap <S-l> <C-o>:call GoToLine()<CR>
nmap <S-l> :call GoToLine()<CR>

Funo para gerar backup


A funo abaixo til para ser usada quando voc vai editar um arquivo
gerando modicaes signicativas, assim voc poder restaurar o backup se
necessrio

" A mapping to make a backup of the current file.


fun! WriteBackup()
let fname = expand("%:p") . "__" . strftime("%d-%m-%Y_%H:%M:%S")
silent exe ":w " . fname
echo "Wrote " . fname
endfun
nnoremap <Leader>ba :call WriteBackup()<CR>

14 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

O atalho

<leader>

em geral a contrabarra "\" na dvida

:help <leader>

Como adicionar o python ao path do vim?


fonte: http://vim.wikia.com
/wiki/Automatically_add_Python_paths_to_Vim_path

Coloque o seguinte script em:

~/.vim/after/ftplugin/python.vim (on Unix systems)


$HOME/vimles/after/ftplugin/python.vim (on Windows systems)

python << EOF


import os
import sys
import vim
for p in sys.path:
# Add each directory in sys.path, if it exists.
if os.path.isdir(p):
# Command 'set' needs backslash before each space.
vim.command(r"set path+=%s" % (p.replace(" ", r"\ ")))
EOF

Isto lhe permite usar 'gf' ou Ctrl-w Ctrl-F para abrir um arquivo sob o cursor

Criando um menu
Como no vim podemos ter innitos comandos ca complicado memorizar tudo
a que entram os menus, podemos colocar nossos plugins e atalhos favoritos
em um menu veja este exemplo

amenu Ferramentas.ExibirNomeDoTema :echo g:colors_name<cr>

O comando acima diz:

amenu ........................... cria um menu


Ferramentas.ExibirNomeDoTema ......... Menu plugin submenu ExibirNomeDoTema
:echo g:colors_name<cr> ......... comando para exibir o nome do tema de cores atual

Caso haja espaos no nome a denir voc pode fazer assim

15 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

amenu Ferramentas.Exibir\ nome\ do\ tema :echo g:colors_name<cr>

Criando menus para um modo especco

:menu .... Normal, Visual e Operator-pending


:nmenu ... Modo Normal
:vmenu ... Modo Visual
:omenu ... Operator-pending modo
:menu! ... Insert e Comando
:imenu ... Modo Insert
:cmenu ... Modo de comando
:amenu ... todos os modos

Exemplo de menu

" cores

menu T&emas.cores.quagmire :colo quagmire<CR>


menu T&emas.cores.inkpot :colo inkpot<CR>
menu T&emas.cores.google :colo google<CR>
menu T&emas.cores.ir_black :colo ir_black<CR>
menu T&emas.cores.molokai :colo molokai<CR>
" Fontes
menu T&emas.fonte.Inconsolata :set gfn=Inconsolata:h10<CR>
menu T&emas.fonte.Anonymous :set anti gfn=Anonymous:h8<CR>
menu T&emas.fonte.Envy\ Code :set anti gfn=Envy_Code_R:h10<CR>
menu T&emas.fonte.Monaco :set gfn=monaco:h9<CR>
menu T&emas.fonte.Crisp :set anti gfn=Crisp:h12<CR>
menu T&emas.fonte.Liberation\ Mono :set gfn=Liberation\ Mono:h10<CR>

O comando

:update

Atualiza o menu recem modicado.

Quando o comando

:amenu

usado sem nenhum argumento o vim mostra os menus denidos atualmente

Para listar todas as opes de menu para 'Plugin' por exemplo faa:

:amenu Plugin

Outros mapeamentos
Destaca espaos e tabs redundantes

16 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

Highlight redundant whitespace and tabs.

highlight RedundantWhitespace ctermbg=red guibg=red


match RedundantWhitespace /\s\+$\| \+\ze\t/

Explicando com detalhes

\s ................ espao
\+ ................ uma ou mais vezes
$ ................. no final da linha
\| ................ ou
" " ............... espao (veja imagem acima)
\+ ................ uma ou mais vezes
\ze ............... at o fim
\t ................ tabulao

Portanto a expresso regular acima localizar espaos ou tabulaes no nal


de linha e destacar em vermelho.

"Remove espaos redundantes no m das linhas

map <F7> <esc>mz:%s/\s\+$//g<cr>`z

Um detalhe importante

mz .............. marca a posio atual do cursor para ternornar no final do comando


`z .............. retorna marca criada

Se no fosse feito isto o cursor iria car na linha da ltima substituio!

" Funo mais elaborada para remover expaos extras

fun! CleanExtraSpaces()
let save_cursor = getpos(".")
let old_query = getreg('/')
:%s/\s\+$//e
call setpos('.', save_cursor)
call setreg('/', old_query)
endfun
nmap <silent> <leader>c :call CleanExtraSpaces()<cr>
autocmd BufWritePre * :call CleanExtraSpaces()

Como uma funo (visto acima) guardamos a posio do cursor (getpos) e a


ltima busca efetuada (getreg) fazemos a deleo se houver de espaos extras
(se no houver a opo "e" evita mensagens de erro e nalmente restauramos
o registro de busca e poso do cursor, tudo isso encapsupsulado em uma
funo de nome "CleanExtraSpaces" que ento mapeada para ser chamada
com "\c" ou executada automaticamente quando o arquivo for salvo

"Abre o vim-vim explorer

17 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

map <F6> <esc>:vne .<cr><bar>:vertical resize -30<cr><bar>:set nonu<cr>

Fazendo buscas e substituies


Podemos usar expresses regulares (http://guia-er.sourceforge.net) em buscas
do Vim veja um exemplo para retirar todas as tags html

"mapeamento para retirar tags html com Ctrl+Alt+t


nmap <C-M-t> :%s/<[^>]*>//g <cr>

" Quebra a linha atual no local do cursor com F2

nmap <F2> a<CR><Esc>

" join lines -- Junta as linhas com Shift F2

nmap <S-F2> A<Del><Space>

Complementao com tab


"Word completion
"Complementao de palavras
set dictionary+=/usr/dict/words
set complete=.,w,k

"====== complementao de palavras ====


"usa o tab em modo insert para completar palavras
function! InsertTabWrapper(direction)
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<tab>"
elseif "backward" == a:direction
return "\<c-p>"
else
return "\<c-n>"
endif
endfunction

inoremap <tab> <c-r>=InsertTabWrapper ("forward")<cr>


inoremap <s-tab> <c-r>=InsertTabWrapper ("backward")<cr>

Abreviaes
Tambm no .vimrc voc pode colocar abreviaes, que so uma espcie de
auto-texto para o vim

iab slas Srgio Luiz Arajo Silva


iab Linux GNU/Linux

18 of 19 01/06/17, 16:23
Vim/Como editar preferncias - Wikilivros https://pt.wikibooks.org/wiki/Vim/Como_editar_...

iab linux GNU/Linux

" Esta abreviao legal para usar com o python

im :<CR> :<CR><TAB>

Referncias
http://www.dicas-l.com.br/dicas-l/20050118.php

Obtido em "https://pt.wikibooks.org/w/index.php?title=Vim
/Como_editar_preferncias&oldid=439416"

Categoria: Livro/Vim

Esta pgina foi editada pela ltima vez (s) 13h16min de 23 de novembro
de 2016.
Este texto disponibilizado nos termos da licena Creative Commons
Atribuio-Compartilhamento pela mesma Licena 3.0 Unported; pode
estar sujeito a condies adicionais. Consulte as Condies de Uso para
mais detalhes.

19 of 19 01/06/17, 16:23

Anda mungkin juga menyukai