You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
488 lines
43 KiB
488 lines
43 KiB
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|
<meta http-equiv="content-type" content="text/html; charset=utf-8"> |
|
|
|
<!-- Enable responsiveness on mobile devices--> |
|
<!-- viewport-fit=cover is to support iPhone X rounded corners and notch in landscape--> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, viewport-fit=cover"> |
|
|
|
<title>Julio Biason .Me 4.3</title> |
|
|
|
<!-- CSS --> |
|
<link rel="stylesheet" href="https://blog.juliobiason.me/print.css" media="print"> |
|
<link rel="stylesheet" href="https://blog.juliobiason.me/poole.css"> |
|
<link rel="stylesheet" href="https://blog.juliobiason.me/hyde.css"> |
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans:400,400italic,700|Abril+Fatface"> |
|
|
|
|
|
|
|
|
|
|
|
</head> |
|
|
|
<body class=" "> |
|
|
|
<div class="sidebar"> |
|
<div class="container sidebar-sticky"> |
|
<div class="sidebar-about"> |
|
|
|
<a href="https://blog.juliobiason.me"><h1>Julio Biason .Me 4.3</h1></a> |
|
|
|
<p class="lead">Old school dev living in a 2.0 dev world</p> |
|
|
|
|
|
</div> |
|
|
|
<ul class="sidebar-nav"> |
|
|
|
|
|
<li class="sidebar-nav-item"><a href="/">English</a></li> |
|
|
|
<li class="sidebar-nav-item"><a href="/pt">Português</a></li> |
|
|
|
<li class="sidebar-nav-item"><a href="/tags">Tags (EN)</a></li> |
|
|
|
<li class="sidebar-nav-item"><a href="/pt/tags">Tags (PT)</a></li> |
|
|
|
|
|
</ul> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="content container"> |
|
|
|
<div class="post"> |
|
<h1 class="post-title">11.01. Meu .vimrc</h1> |
|
<span class="post-date"> |
|
2015-12-22 |
|
|
|
</span> |
|
<p>Essa é a parte em que você vai ver um arquivo de configuração meio |
|
estranho.</p> |
|
<span id="continue-reading"></span> |
|
<p>Como falamos sobre arquivo de configuração, eu vou mostrar o que eu tenho hoje |
|
configurado no meu VIM, explicando o que cada comando faz. Boa parte do que eu |
|
tenho veio da configuração global do VIM, que eu copiei apenas para garantir |
|
que não importando onde eu esteja ou qualquer alteração que seja feita neste |
|
arquivo, as funcionalidades que eu estou acostumado continuarão funcionando |
|
como esperado.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#96b5b4;">set</span><span> encoding=utf</span><span style="color:#d08770;">-8 |
|
</span></code></pre> |
|
<p>Garante que os arquivos salvos estarão em UTF-8, ao invés de tentar converter |
|
para o encoding do sistema operacional.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#96b5b4;">set</span><span> nocompatible |
|
</span></code></pre> |
|
<p>Desativa o modo de compatilidade com o VI original. Existem algumas diferenças |
|
entre ambos (por exemplo, depois de um fazer um undo (<code>u</code>), no VI original fazer |
|
undo de novo desfazia o undo anterior (efetivamente, fazendo um "redo") e para |
|
continuar fazendo undo, o primeiro comando depois de undo deveria ser <code>.</code>; no |
|
VIM, fazer um undo depois de um undo irá continuar desfazendo o que foi entrado |
|
no texto, até retornar ao estado original) e a não ser que você seja fã do VI |
|
original, eu não recomendaria usar o modo de compatilibidade.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#96b5b4;">set</span><span> backspace=indent,eol,start |
|
</span></code></pre> |
|
<p>Apenas garante que o backspace consiga remover identações, apagar o fim da |
|
linha e o começo de uma linha (neste último, forçando a linha atual e se juntar |
|
com a anterior). Esse é o funcionamento normal de qualquer editor.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;">" Don’t use Ex mode, use Q for formatting |
|
</span><span style="color:#96b5b4;">map</span><span> Q gq |
|
</span><span> |
|
</span><span style="color:#65737e;">" Map Y to do the same (well, almost) as the D command |
|
</span><span style="color:#96b5b4;">map</span><span> Y y$ |
|
</span></code></pre> |
|
<p>Estes dois mapeamentos eu peguei da configuração global, mas nunca efetivamente |
|
usei. Mas, por via das dúvida...</p> |
|
<p>Ainda, uma coisa que eu não havia comentado: Comentários. Você pode comentar |
|
qualquer linha começando a mesma com aspas (") sem as aspas finais (senão o VIM |
|
irá interpretar o conteúdo como string). Então: Uma aspa, comentário; duas |
|
aspas, string; mais de duas, erro.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#b48ead;">if </span><span style="color:#bf616a;">&t_Co</span><span> > </span><span style="color:#d08770;">2 </span><span style="color:#b48ead;">||</span><span style="color:#bf616a;">& |
|
</span><span> syntax on |
|
</span><span> </span><span style="color:#96b5b4;">set </span><span>hlsearch |
|
</span><span style="color:#b48ead;">endif |
|
</span></code></pre> |
|
<p>Ah, nosso primeiro encontro com ifs. Se o terminal tiver mais de duas cores |
|
(<code>&t_Co > 2</code>) ou estivermos rodando em GUI (<code>has("gui_running")</code>) então o |
|
suporte à sintaxes deve ser ligado (<code>syntax on</code>) e pesquisas devem marcar todas |
|
as ocorrências encontradas no último comando de pesquisa(<code>set hlsearch</code>)<sup class="footnote-reference"><a href="#1">1</a></sup>.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;">" ------------------------ |
|
</span><span style="color:#65737e;">" Those are my settings |
|
</span><span style="color:#65737e;">" ------------------------ |
|
</span><span> |
|
</span><span style="color:#96b5b4;">set</span><span> tabstop=</span><span style="color:#d08770;">4 </span><span style="color:#65737e;">" tabs are displayed as 4 spaces |
|
</span><span style="color:#96b5b4;">set</span><span> shiftwidth=</span><span style="color:#d08770;">4 </span><span style="color:#65737e;">" by default, when auto-identing, add 4 spaces (or 1 tabstop) |
|
</span><span style="color:#96b5b4;">set</span><span> foldmethod=marker </span><span style="color:#65737e;">" fold on markers |
|
</span><span style="color:#96b5b4;">set</span><span> scrolloff=</span><span style="color:#d08770;">1 </span><span style="color:#65737e;">" always show one line around the cursor |
|
</span><span style="color:#96b5b4;">set</span><span> laststatus=</span><span style="color:#d08770;">2 </span><span style="color:#65737e;">" always show the status bar (’cause I like to see the line and column, always) |
|
</span><span style="color:#96b5b4;">set</span><span> showtabline=</span><span style="color:#d08770;">2 </span><span style="color:#65737e;">" always show the tabline |
|
</span><span style="color:#96b5b4;">set</span><span> showmatch </span><span style="color:#65737e;">" show matching bracket |
|
</span><span style="color:#96b5b4;">set</span><span> noerrorbells </span><span style="color:#65737e;">" no error bells |
|
</span><span style="color:#96b5b4;">set</span><span> autowrite </span><span style="color:#65737e;">" write the file when switching between files or something |
|
</span><span style="color:#96b5b4;">set</span><span> nowrap </span><span style="color:#65737e;">" do not wrap long lines |
|
</span><span style="color:#96b5b4;">set</span><span> nobackup </span><span style="color:#65737e;">" do not keep a backup file, use versions instead |
|
</span><span style="color:#96b5b4;">set</span><span> history=</span><span style="color:#d08770;">50 </span><span style="color:#65737e;">" keep 50 lines of command line history |
|
</span><span style="color:#96b5b4;">set</span><span> ruler </span><span style="color:#65737e;">" show the cursor position all the time |
|
</span><span style="color:#96b5b4;">set</span><span> showcmd </span><span style="color:#65737e;">" display incomplete commands |
|
</span><span style="color:#96b5b4;">set </span><span>incsearch </span><span style="color:#65737e;">" do incremental searching |
|
</span><span style="color:#96b5b4;">set</span><span> formatoptions=tcq </span><span style="color:#65737e;">" wrap with textwidth, wrap comments, insert commend leader (twice), format comments |
|
</span><span style="color:#96b5b4;">set</span><span> smartindent </span><span style="color:#65737e;">" smart identation |
|
</span><span style="color:#96b5b4;">set</span><span> number </span><span style="color:#65737e;">" show line numbers |
|
</span><span style="color:#96b5b4;">set</span><span> wim=longest,list </span><span style="color:#65737e;">" file auto-completion |
|
</span><span style="color:#96b5b4;">set</span><span> background=dark </span><span style="color:#65737e;">" to follow most of the colorschemes I use |
|
</span><span style="color:#96b5b4;">set</span><span> vb t_vb= </span><span style="color:#65737e;">" convert bells to visual bells and do nothing as visual bell |
|
</span><span> |
|
</span><span style="color:#96b5b4;">set</span><span> t_Co=</span><span style="color:#d08770;">256 </span><span style="color:#65737e;">" 256 color terminals |
|
</span><span> |
|
</span><span style="color:#96b5b4;">let</span><span> mapleader=</span><span style="color:#a3be8c;">"," </span><span style="color:#65737e;">" use comma to start user-defined (in plugins) functions |
|
</span></code></pre> |
|
<p>Um grande bloco de configurações. Vamos ver um por um:</p> |
|
<ul> |
|
<li><code>set tabstop=4</code>: Define o tamanho da tabulação. Se estiver usando o caractere |
|
"tab" ao invés de espaço, estes caracteres serão mostrados como 4 espaços |
|
(quando o padrão são 8).</li> |
|
<li><code>set shiftwidth=4</code>: Quando o VIM for identar um pedaço de texto sozinho<sup class="footnote-reference"><a href="#2">2</a></sup>. Se |
|
"shiftwidth" for igual a "tabstop" e você não tiver configurado para usar |
|
espaços ao invés de tabulações (calma que eu já explico como se faz isso), o |
|
VIM irá adicionar uma tabulação inteira; se "shiftwidth" for menor que |
|
"tabstop", espaços serão usados; se "shiftwidth" for maior que "tabstop", |
|
será usada uma mistura de tabulações e espaços até que o tamanho especificado |
|
seja alcançado.</li> |
|
<li><code>set foldmethod=marker</code>: "Folding" foi algo que eu não comentei até agora |
|
porque eu até agora não consegui me aclimatar com folding (até porque eu não |
|
consegui pensar num mnemônico para lembrar dos comandos). Mas, basicamente, |
|
"folding" permite que você "oculte" partes do código com alguma condição. |
|
Alguns arquivos de sintaxe definem início e fim de funções e isso pode ser |
|
usado para ocultar toda uma função (apenas para exibição, a função continua |
|
existindo lá). "marker" define que o método de folding são marcadores e os |
|
marcadores padrão são "{{{" para o início e "}}}" para o fim.</li> |
|
<li><code>set scrolloff=1</code>: Número de linhas que devem sempre ficar visíveis ao redor do |
|
cursor. "1" significa que antes de chegar à primeira ou última linha da tela, |
|
o VIM irá rolar o texto e apresentar a linha anterior (ou próxima) -- enquanto |
|
possível.</li> |
|
<li><code>set laststatus=2</code>: Quando estávamos vendo splits, você deve ter notado que o |
|
VIM adicionou uma barrinha indicando a posição do cursor (e talvez mais |
|
algumas outras informações). Esse é o padrão para "1" (mostrar a barra de |
|
status quando houver splits); "0" nunca mostra e "2" mostra sempre.</li> |
|
<li><code>set showtabline=2</code>: Assim como "laststatus", se você estava vendo abas em modo |
|
de console, deve ter reparado que a linha com as abas aparecia apenas quando |
|
haviam duas ou mais abas. "2" define que essa linha de abas deve ser sempre |
|
mostrada, mesmo quando há apenas uma aba.</li> |
|
<li><code>set showmatch</code>: Quando estiver sobre um caractere como parênteses, colechetes |
|
ou chave, faz o highlight do elemento que abre ou fecha o correspondente.</li> |
|
<li><code>set noerrorbells</code>: Se ocorrer um erro, não utilize erros sons para |
|
notificações<sup class="footnote-reference"><a href="#3">3</a></sup>.</li> |
|
<li><code>set autowrite</code>: Quando o VIM passar o controle para outro aplicativo ("grep", |
|
"make" ou mesmo o "shell"), salva o arquivo atual antes de passar a execução.</li> |
|
<li><code>set nowrap</code>: Quando uma linha for maior que a tela, desabilita a "quebra" da |
|
linha e, com isso, é necessário "rolar" o conteúdo horizontalmente para ver o |
|
resto. Um aviso: se você usar "wrap" (<code>set wrap</code>) o VIM vai continuar lidando a |
|
linha como uma coisa só, desconsiderando como a mesma está sendo apresentada; |
|
assim, se você estiver na primeira parte de uma linha que foi quebrada por |
|
wrap, usar qualquer comando que vá para a próxima linha irá ir para a próxima |
|
linha, não para a parte quebrada.</li> |
|
<li><code>set nobackup</code>: Não grava arquivos de backup. Por padrão, antes de salvar um |
|
arquivo, o VIM guarda uma cópia do original com o mesmo nome seguido de "~".</li> |
|
<li><code>set history=50</code>: Quando você usa um comando, o VIM pode guardar esse comando |
|
para execução futura, como o prompt do shell. Aqui é definido quantos destes |
|
comandos são guardados.</li> |
|
<li><code>set ruler</code>: Sempre que possível, mostre a posição do cursor. Se "laststatus" |
|
for "0" (ou "1" e não houver nenhum split), a posição é exibida na última |
|
linha da tela, no canto direito; se "laststatus" for "2" (ou "1" e houver |
|
pelo menos um split), a posição é exibida dentro da barra de status<sup class="footnote-reference"><a href="#4">4</a></sup>.</li> |
|
<li><code>set showcmd</code>: Você deve ter notado que comandos que esperam mais informações |
|
(por exemplo, aqueles que requerem uma movimentação) não são mostrados em |
|
lugar algum. "showcmd" irá mostrar o comando até que ele seja concluído.</li> |
|
<li><code>set incsearch</code>: Enquanto você estiver digitando uma pesquisa, já vai |
|
posicionando o cursor na primeira ocorrência encontrada. "noincsearch" irá |
|
manter o cursor na mesma posição até que o mesmo seja concluído.</li> |
|
<li><code>set formatoptions=tcq</code>: Opções de formatação de textos. Cara um dos caracteres |
|
representa algo diferente: "t" indica que se "textwidth" estiver definido, o |
|
editor deve quebrar as linhas<sup class="footnote-reference"><a href="#5">5</a></sup>; "c" significa que se o texto for quebrado |
|
durante um comentário (definido pela sintaxe atual), um novo caractere de |
|
comentário deve ser adicionado; "q" indica que comentários podem ser |
|
quebrados por "textwidth".</li> |
|
<li><code>set smartindent</code>: Utiliza identação inteligente, se a sintaxe não definir |
|
nenhuma. Existem quatro tipos de identação: Nenhuma ("nosmartindent") |
|
indicando que ao adicionar uma nova linha, nenhuma identação é adicionada; |
|
"autoindent" para que novas linhas tenham a mesma identação da linha |
|
anterior; "smartindent", que tenta usar o último caractere da linha para |
|
identificar se deve ser adicionada uma nova identação ou não (por exemplo, |
|
parênteses e chaves adicionam identação); e "cindent" que tenta seguir o |
|
padrão para C. Note que essa configuração só vale para arquivos que não |
|
definem uma identação no seu arquivo de sintaxe (que são bem poucos).</li> |
|
<li><code>set number</code>: Adiciona uma área na esquerda da tela com o número da linha na |
|
própria linha.</li> |
|
<li><code>set wim=longest,list</code>: Duas coisas aqui: 1) comandos de set tem um nome |
|
longo e um nome curto e "wim" é o nome curto para "wildmode"; 2) "wildmode" |
|
define como serão completados os nomes dos arquivos quando você usar um |
|
comando para abrir arquivos e usar [Tab] para tentar completar o nome do |
|
arquivo automaticamente. "longest,list" emula o padrão de shells como Bash.</li> |
|
<li><code>set background=dark</code>: Alguns colorschemes (temas de cor) definem dois |
|
padrões de cores, um claro e um escuro. "background=dark" define que, na |
|
existência de dois padrões, o padrão escuro deve ser usado.</li> |
|
<li><code>set vb t_vb=:</code> Mais uma coisa nova: Duas configurações em uma linha só. Na |
|
verdade, todas as configurações apresentadas aqui poderiam ficar em uma linha |
|
só, mas eu mantive estas duas juntas por um motivo: Como defini |
|
"noerrorbell", o VIM cai para "visualbell" (nome longo de "vb"), que causa um |
|
"flash" no conteúdo (as cores do tema rapidamente se invertem e voltam ao |
|
normal) quando ocorre um erro; no caso, eu defini que sim, eu quero que o |
|
tipo de erro visual ("<code>t_vb</code>") seja... nada. Assim, quando ocorre um erro, o VIM |
|
não bipa nem faz flash.</li> |
|
<li><code>set t_Co=256</code>: Define que o terminal terá, por padrão, 256 cores. Algumas |
|
vezes o VIM não consegue descobrir se o terminal tem suporte a mais de 16 |
|
cores ou não e esta configuração reafirma que sim, o terminal é capaz de usar |
|
256 e, portanto, colorschemes podem ter mais cores.</li> |
|
<li><code>let mapleader=","</code>: Define a variável "mapleader". "mapleader" é o caractere |
|
que o VIM utiliza em alguns plugins<sup class="footnote-reference"><a href="#5">5</a></sup>, quando estes define comandos em modo |
|
normal. O padrão é "/", eu mudei para vírgula.</li> |
|
</ul> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#b48ead;">if </span><span style="color:#8fa1b3;">has</span><span>(</span><span style="color:#a3be8c;">"autocmd"</span><span>) |
|
</span></code></pre> |
|
<p>Eu falei sobre auto-commands, mas na verdade é uma feature que deve ser |
|
adicionada na hora de compilar o VIM. Entretanto, até agora eu não vi um pacote |
|
disponível que não tenha essa feature. Apenas para garantir, verificamos se a |
|
funcionalidade foi adicionada mesmo ou não.</p> |
|
<p>Boa parte do que tem daqui pra frente ou eu já falei ou veio do arquivo de |
|
configuração global.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span> </span><span style="color:#96b5b4;">filetype</span><span> plugin indent on |
|
</span></code></pre> |
|
<p>Ativa as configurações vindas do arquivo de sintaxe. Quando eu disse que as |
|
configurações de auto-identação vem do arquivo de sintaxe, é esta linha que |
|
garante que isso vai acontecer.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span> </span><span style="color:#96b5b4;">autocmd </span><span>FileType text </span><span style="color:#96b5b4;">setlocal</span><span> textwidth=</span><span style="color:#d08770;">78 |
|
</span></code></pre> |
|
<p>Quando o tipo de arquivo for texto ("text") define localmente para aquele |
|
buffer que o tamanho da linha é de 78 colunas. Como "formatoptions" tem um "t", |
|
o VIM irá automaticamente quebrar a linha (adicionando um [Enter] antes da |
|
palavra que passa do limite) na coluna 78.<sup class="footnote-reference"><a href="#7">6</a></sup></p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;"> " When editing a file, always jump to the last known cursor position. |
|
</span><span style="color:#65737e;"> " Don’t do it when the position is invalid or when inside an event handler |
|
</span><span style="color:#65737e;"> " (happens when dropping a file on gvim). |
|
</span><span> </span><span style="color:#96b5b4;">autocmd</span><span> BufReadPost </span><span style="color:#b48ead;">* |
|
</span><span> </span><span style="color:#b48ead;">\ if </span><span style="color:#8fa1b3;">line</span><span>(</span><span style="color:#a3be8c;">"’\""</span><span>) > </span><span style="color:#d08770;">0 </span><span style="color:#b48ead;">&& </span><span style="color:#8fa1b3;">line</span><span>(</span><span style="color:#a3be8c;">"’\""</span><span>) </span><span style="color:#b48ead;"><= </span><span style="color:#8fa1b3;">line</span><span>(</span><span style="color:#a3be8c;">"$"</span><span>) | |
|
</span><span> </span><span style="color:#b48ead;">\ </span><span style="color:#96b5b4;">exe </span><span style="color:#a3be8c;">"normal g`\""</span><span> | |
|
</span><span> </span><span style="color:#b48ead;">\ endif |
|
</span></code></pre> |
|
<p>Este comando existe no arquivo de configuração global, mas é bem interessante. |
|
Lendo exatamente o que ele faz: Depois de carregar qualquer arquivo, se a linha |
|
que o marcador de saída do buffer existir e estiver entre o começo do arquivo e |
|
antes do fim da linha, executa, em modo normal, <code>g\"</code>, que efetivamente "pula" |
|
para o marcador de saída do buffer. A diferença entre <code>\`` e </code>g`<code> é que `g</code> não mexe |
|
no jumplist quando pular (logo, ```` não vai funcionar). Como não mexer no |
|
jumplist é algo que não se faz normalmente, nem comentei antes.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span> </span><span style="color:#96b5b4;">autocmd </span><span>FileType python </span><span style="color:#96b5b4;">autocmd</span><span> BufWritePre <buffer> :</span><span style="color:#b48ead;">%</span><span>s</span><span style="color:#96b5b4;">/\s\+$/</span><span>/e |
|
</span></code></pre> |
|
<p>Eu falei deste comando antes, mas vamos de novo: Quando o tipo de arquivo for |
|
"python", adicione um auto-comando que antes de gravar o buffer, execute, no |
|
buffer, a expressão regular <code>/\s\+$//e</code>, que basicamente, serve para remover |
|
espaços em branco no final das linhas.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;"> " omni completion |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType python </span><span style="color:#96b5b4;">setlocal</span><span> ofu=pythoncomplete#Complete |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType javascript </span><span style="color:#96b5b4;">setlocal</span><span> ofu=javascriptcomplete#CompleteJS |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType html </span><span style="color:#96b5b4;">setlocal</span><span> ofu=htmlcomplete#CompleteTags |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType css </span><span style="color:#96b5b4;">setlocal</span><span> ofu=csscomplete#CompleteCSS |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType xml </span><span style="color:#96b5b4;">setlocal</span><span> ofu=xmlcomplete#CompleteTags |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType php </span><span style="color:#96b5b4;">setlocal</span><span> ofu=phpcomplete#CompletePHP |
|
</span><span> |
|
</span><span> </span><span style="color:#96b5b4;">set</span><span> completeopt-=preview |
|
</span></code></pre> |
|
<p>Eu não falei do Omni-complete antes porque até o momento o auto-complete |
|
(<code>[Ctrl]p</code> e <code>[Ctrl]n</code> em modo de inserção) tem resolvido todos meus problemas. |
|
Mas, em teoria, o omni-complete consegue detectar quais elementos fazem sentido |
|
no contexto atual, "encherga" coisas que estão no arquivo de tags e conhece |
|
toda a sintaxe da linguagem que você está usando. Mas, realmente, o simples |
|
auto-complete já resolve 99% dos problemas que tenho encontrado.</p> |
|
<p>E desliga a apresentação dos resultados do omni-complete na janela de preview, |
|
que é semelhante ao quickfix, mas na minha experiência, ela quebra muito o |
|
fluxo de edição do código.</p> |
|
<p>Se você quiser tentar, para usar o omni complete basta usar <code>[Ctrl]x</code> seguido de |
|
<code>[Ctrl]o</code>.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;"> " ------------------------ |
|
</span><span style="color:#65737e;"> " Auto-commands |
|
</span><span style="color:#65737e;"> " ------------------------ |
|
</span><span> |
|
</span><span style="color:#65737e;"> " default python style |
|
</span><span style="color:#65737e;"> " (use spaces instead of tabs (expandtab), uses 4 spaces for tabs (tabstop), |
|
</span><span style="color:#65737e;"> " when auto-indenting, also use 4 spaces (shiftwidth), when deleting text, 4 |
|
</span><span style="color:#65737e;"> " spaces are a tab (softtabstop) and break the line at column 78 (textwidth)) |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType python </span><span style="color:#96b5b4;">setlocal expandtab</span><span> tabstop=</span><span style="color:#d08770;">4</span><span> shiftwidth=</span><span style="color:#d08770;">4</span><span> softtabstop=</span><span style="color:#d08770;">4</span><span> textwidth=</span><span style="color:#d08770;">78 |
|
</span><span> |
|
</span><span style="color:#65737e;"> " reStructured files follow python closely, but use 3 tab stops instead of 4 |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType rst </span><span style="color:#96b5b4;">setlocal expandtab</span><span> tabstop=</span><span style="color:#d08770;">3</span><span> sw=</span><span style="color:#d08770;">3</span><span> sts=</span><span style="color:#d08770;">3</span><span> textwidth=</span><span style="color:#d08770;">78 |
|
</span><span> |
|
</span><span style="color:#65737e;"> " templates (Jinja2 in this case) will use tabs instead (to reduce file size) |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType htmldjango </span><span style="color:#96b5b4;">setlocal</span><span> noet tabstop=</span><span style="color:#d08770;">4</span><span> shiftwidth=</span><span style="color:#d08770;">4</span><span> softtabstop=</span><span style="color:#d08770;">4</span><span> textwidth=</span><span style="color:#d08770;">0 |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType </span><span style="color:#96b5b4;">jinja setlocal</span><span> noet tabstop=</span><span style="color:#d08770;">4</span><span> shiftwidth=</span><span style="color:#d08770;">4</span><span> softtabstop=</span><span style="color:#d08770;">4</span><span> textwidth=</span><span style="color:#d08770;">0 |
|
</span><span> |
|
</span><span style="color:#65737e;"> " the smarty filetypes doesn’t have any sort of indentation, so we set it to |
|
</span><span style="color:#65737e;"> " auto |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType smarty </span><span style="color:#96b5b4;">setlocal</span><span> ai |
|
</span><span> |
|
</span><span style="color:#65737e;"> " PHP break lines at column 79, like Python |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType php </span><span style="color:#96b5b4;">setlocal</span><span> textwidth=</span><span style="color:#d08770;">79 |
|
</span><span> |
|
</span><span style="color:#65737e;"> " svn (when editing svn commit messages, break lines at |
|
</span><span style="color:#65737e;"> " column 70) |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType svn </span><span style="color:#96b5b4;">setlocal</span><span> tw=</span><span style="color:#d08770;">70 |
|
</span><span> |
|
</span><span style="color:#65737e;"> " email (mostly mutt stuff) |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType mail </span><span style="color:#96b5b4;">setlocal</span><span> spell spelllang=en |
|
</span><span> |
|
</span><span style="color:#65737e;"> " JavaScript (who though those were "good" defaults?) |
|
</span><span> </span><span style="color:#96b5b4;">au </span><span>FileType javascript </span><span style="color:#96b5b4;">setlocal expandtab</span><span> tabstop=</span><span style="color:#d08770;">2</span><span> sw=</span><span style="color:#d08770;">2</span><span> sts=</span><span style="color:#d08770;">2</span><span> textwidth=</span><span style="color:#d08770;">0 |
|
</span></code></pre> |
|
<p>Uma série de auto-comandos baseados no tipo de arquivo. Como eu falei antes |
|
neste capítulo, você pode botar vários "set" um atrás do outro separados por |
|
espaço e sets tem versões com nomes longos e nomes curtos ("sts" é um atalho |
|
para "softtabstop", "sw" para "shiftwidth", "noet" para "noexpandtabs", "ai" |
|
para "autoindent" e "tw" para "textwidth"). E sim, eu sei que não manti nenhum |
|
padrão no meio, mas pelo menos agora você alguns nomes curtos para algumas |
|
opções.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#b48ead;">else |
|
</span><span> </span><span style="color:#96b5b4;">set</span><span> autoindent </span><span style="color:#65737e;">" always set autoindenting on |
|
</span><span style="color:#b48ead;">endif </span><span style="color:#a3be8c;">" has("</span><span style="color:#96b5b4;">autocmd</span><span style="color:#65737e;">") |
|
</span></code></pre> |
|
<p>E, se autocmd não estiver disponível, simplesmente seta auto-indent.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;">" ------------------------ |
|
</span><span style="color:#65737e;">" mapings |
|
</span><span style="color:#65737e;">" ------------------------ |
|
</span><span> |
|
</span><span style="color:#65737e;">" Easy switching between tabs (just use Alt+<tab number>) |
|
</span><span style="color:#b48ead;">if </span><span style="color:#8fa1b3;">has</span><span>(‘mac’) |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-1> :tabn </span><span style="color:#d08770;">1</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-2> :tabn </span><span style="color:#d08770;">2</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-3> :tabn </span><span style="color:#d08770;">3</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-4> :tabn </span><span style="color:#d08770;">4</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-5> :tabn </span><span style="color:#d08770;">5</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-6> :tabn </span><span style="color:#d08770;">6</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-7> :tabn </span><span style="color:#d08770;">7</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-8> :tabn </span><span style="color:#d08770;">8</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-9> :tabn </span><span style="color:#d08770;">9</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><D-0> :tabn </span><span style="color:#d08770;">10</span><span><CR> |
|
</span><span> |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-1> <ESC>:tabn </span><span style="color:#d08770;">1</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-2> <ESC>:tabn </span><span style="color:#d08770;">2</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-3> <ESC>:tabn </span><span style="color:#d08770;">3</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-4> <ESC>:tabn </span><span style="color:#d08770;">4</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-5> <ESC>:tabn </span><span style="color:#d08770;">5</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-6> <ESC>:tabn </span><span style="color:#d08770;">6</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-7> <ESC>:tabn </span><span style="color:#d08770;">7</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-8> <ESC>:tabn </span><span style="color:#d08770;">8</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-9> <ESC>:tabn </span><span style="color:#d08770;">9</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><D-0> <ESC>:tabn </span><span style="color:#d08770;">10</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span style="color:#b48ead;">else |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-1> :tabn </span><span style="color:#d08770;">1</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-2> :tabn </span><span style="color:#d08770;">2</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-3> :tabn </span><span style="color:#d08770;">3</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-4> :tabn </span><span style="color:#d08770;">4</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-5> :tabn </span><span style="color:#d08770;">5</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-6> :tabn </span><span style="color:#d08770;">6</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-7> :tabn </span><span style="color:#d08770;">7</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-8> :tabn </span><span style="color:#d08770;">8</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-9> :tabn </span><span style="color:#d08770;">9</span><span><CR> |
|
</span><span> </span><span style="color:#96b5b4;">map </span><span><M-0> :tabn </span><span style="color:#d08770;">10</span><span><CR> |
|
</span><span> |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-1> <ESC>:tabn </span><span style="color:#d08770;">1</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-2> <ESC>:tabn </span><span style="color:#d08770;">2</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-3> <ESC>:tabn </span><span style="color:#d08770;">3</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-4> <ESC>:tabn </span><span style="color:#d08770;">4</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-5> <ESC>:tabn </span><span style="color:#d08770;">5</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-6> <ESC>:tabn </span><span style="color:#d08770;">6</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-7> <ESC>:tabn </span><span style="color:#d08770;">7</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-8> <ESC>:tabn </span><span style="color:#d08770;">8</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-9> <ESC>:tabn </span><span style="color:#d08770;">9</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span> </span><span style="color:#96b5b4;">imap </span><span><M-0> <ESC>:tabn </span><span style="color:#d08770;">10</span><span><CR></span><span style="color:#96b5b4;">a |
|
</span><span style="color:#b48ead;">endif |
|
</span></code></pre> |
|
<p>Ok, este é um mapeamento que eu sempre achei interessante:</p> |
|
<ol> |
|
<li> |
|
<p>Existe uma diferença entre OS X e outros sistemas que a tecla "Command" é |
|
usada para praticamente tudo, inclusive trocar as abas nos browsers; já em |
|
outros sistemas, a tecla para isto é "Alt". Um VIM compilado para OS X tem, |
|
estranhamente, uma feature chamada "mac"; checando isso você consegue |
|
descobrir se está rodando num OS X ou não.</p> |
|
</li> |
|
<li> |
|
<p>Mapeamentos diferentes para modo normal e de inserção: Se estiver no modo |
|
normal, basta usar <code>:tabn {número}</code> para pular diretamente para uma aba (<code>:tabn {número}</code> é a versão de modo de comando do <code>{número}gt</code> do modo normal<sup class="footnote-reference"><a href="#8">7</a></sup><sup class="footnote-reference"><a href="#9">8</a></sup>); |
|
quando estiver em modo de inserção, saida do modo de inserção (simulando |
|
pressionar [Esc] com <ESC>, execute o mesmo comando usado no modo normal |
|
para pular para uma aba específica e volte para o modo de inserção ("a").</p> |
|
</li> |
|
</ol> |
|
<p>BOOM! Você acabou de adicionar no VIM uma feature que existe nos browsers.</p> |
|
<pre data-lang="viml" style="background-color:#2b303b;color:#c0c5ce;" class="language-viml "><code class="language-viml" data-lang="viml"><span style="color:#65737e;">" custom PHP syntax file configuration |
|
</span><span style="color:#96b5b4;">let</span><span> php_smart_members=</span><span style="color:#d08770;">1 |
|
</span></code></pre> |
|
<p>Essa é uma das coisas que eu falei antes: "let" permite definir variáveis, |
|
incluindo algumas dentro do arquivo de sintaxe. No caso "php_smart_members" |
|
altera a forma como funções membro de uma classe em PHP seja coloridas de forma |
|
diferente.</p> |
|
<p>O resto do meu arquivo de configuração é usado para manter plugins, que eu vou |
|
explicar o que cada um faz mais pra frente. Se você quiser ver o arquivo |
|
original, ele pode ser encontrado no meu repositório de configurações (que eu |
|
uso para manter as configurações sincronizadas entre meu computador pessoal e o |
|
computador do trabalho).</p> |
|
<p><sup class="footnote-reference"><a href="#1">1</a></sup> Apenas para fazer um gancho com o que foi falado anteriormente: No |
|
capítulo #2.5, quando estava falando de comandos do modo de comando, eu |
|
comentei sobre <code>:noh</code> para desmarcar as ocorrências encontradas no último |
|
comando de pesquisa. Bom, <code>hlsearch</code> faz com que estas ocorrências sejam |
|
marcadas e se você colocar set <code>nohlsearch</code>, nenhuma ocorrência será marcada |
|
e você nunca irá precisar usar <code>:noh</code>.</p> |
|
<p><sup class="footnote-reference"><a href="#2">2</a></sup> ... ou quando você usar <code>>{movimentação}</code> ou <code><{movimentação}</code> em modo normal, |
|
que eu não havia mencionado antes porque estávamos falando de edição de |
|
qualquer texto e não de código fonte. <code>>></code> irá adicionar um "shiftwidth" |
|
para a direita e <code><<</code> irá remover um "shiftwidth" na esquerda.</p> |
|
<p><sup class="footnote-reference"><a href="#3">3</a></sup> Aqui acabamos de ver duas configurações de flags: Uma ativando uma |
|
configuração ("showmatch") e outra desligando ("noerrorbells").</p> |
|
<p><sup class="footnote-reference"><a href="#4">4</a></sup> Uma pequena nota sobre as posições apresentadas: algumas vezes, você verá |
|
o VIM apresentar a coluna como "{número}-{número}". Isso acontece |
|
principalmente quando se está usando tabulações ao invés de espaços e o |
|
VIM está indicando a contagem de caracteres na esquerda e a coluna de |
|
exibição na direita (ou seja, o valor da direita é {quantidade de |
|
caracteres menos tabulações} + ({quantidade de tabulações} * {"tabstop"}).</p> |
|
<p><sup class="footnote-reference"><a href="#5">5</a></sup> E quando digo "quebrar" eu quero dizer "quebrar" mesmo: Enquanto que |
|
"wrap" irá cuidar apenas da apresentação do texto, "textwidth" com |
|
"formatoptions=t" irá inserir um caractere de nova linha quando a palavra |
|
digitada ultrapassar o limite indicado.</p> |
|
<p><sup class="footnote-reference"><a href="#6">9</a></sup> Note que o VIM define uma variável para isso, mas nada garante que o autor |
|
do plugin utilizou essa tecla. Existe um padrão em usar "mapleader" como início |
|
de comando normal de um plugin, mas nada obriga o autor do plugin à usar |
|
esta tecla.</p> |
|
<p><sup class="footnote-reference"><a href="#7">6</a></sup> E, recapitulando, para reformatar o parágrafo caso você altere alguma |
|
coisa no texto, use gq sobre a região do mesmo. O VIM irá considerar o |
|
"textwidth" na hora de reformatar.</p> |
|
<p><sup class="footnote-reference"><a href="#8">7</a></sup> E não, não são todos os comandos que tem versões tanto em modo normal |
|
o quanto em modo de comando.</p> |
|
<p><sup class="footnote-reference"><a href="#9">8</a></sup> E porque eu usei <code>:tabn {número}</code> ao invés de <code>{número}gt</code>? Porque quando eu |
|
pesquisei como pular de abas, este foi o primeiro resultado que eu encontrei.</p> |
|
<div> |
|
|
|
<div style="float:left"> |
|
<< <a href="./11-config">Arquivos de Configuração</a> |
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div style="float:right"> |
|
<a href="./11-02-gvimrc">Meu .gvimrc</a> >> |
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
</body> |
|
|
|
</html>
|
|
|