<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gustavo Dutra &#187; vimrc</title>
	<atom:link href="http://gustavodutra.com/tag/vimrc/feed/" rel="self" type="application/rss+xml" />
	<link>http://gustavodutra.com</link>
	<description>Um pouco de tudo, nada de pouco</description>
	<lastBuildDate>Thu, 29 Jul 2010 22:57:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como consultar a documentação do PHP direto do Vim</title>
		<link>http://gustavodutra.com/post/365/como-consultar-a-documentacao-do-php-direto-do-vim/</link>
		<comments>http://gustavodutra.com/post/365/como-consultar-a-documentacao-do-php-direto-do-vim/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 20:51:54 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[gvim]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=365</guid>
		<description><![CDATA[Olá! Descobri recentemente que é possível baixar a documentação do PHP no formato do man do UNIX. Isso é muito bom, já que assim, podemos consultar funções com parâmetros, variáveis e exemplos. Melhor, podemos fazer isso direto do Vim.
Eu já tinha lido sobre uma opção do Vim chamada keywordprg, mas nunca havia encontrado uma serventia. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá! Descobri recentemente que é possível baixar a documentação do PHP no formato do man do <strong>UNIX</strong>. Isso é muito bom, já que assim, podemos consultar funções com parâmetros, variáveis e exemplos. Melhor, podemos fazer isso direto do Vim.</p>
<p>Eu já tinha lido sobre uma opção do Vim chamada <a rel="nofollow" href="http://vimdoc.sourceforge.net/htmldoc/options.html#%27keywordprg%27">keywordprg</a>, mas nunca havia encontrado uma serventia. Quando eu li no <a rel="nofollow" href="http://bjori.blogspot.com/2010/01/unix-manual-pages-for-php-functions.html">blog do bjori</a>, realmente me veio à mente como eu poderia utilizá-la.</p>
<p><span id="more-365"></span></p>
<p>Eu instalei a última versão do <strong>pear</strong> aqui, e executei os comandos que ele cita no blog:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pear <span style="color: #c20cb9; font-weight: bold;">install</span> doc.php.net<span style="color: #000000; font-weight: bold;">/</span>pman</pre></div></div>

<p>Eu precisei aumentar a memória do <strong>php.ini</strong> (<em>memory_limit</em>), 32M não foi o suficiente.</p>
<p>O manual será instalado no diretório especificado em &#8220;<em>doc_dir</em>&#8221; da configuração da <strong>pear</strong> e o executável no &#8220;<em>bin_dir</em>&#8220;. Para verificar as configurações atuais:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pear config-show <span style="color: #666666; font-style: italic;"># Mostra todas as configurações atuais</span>
pear config-get bin_dir <span style="color: #666666; font-style: italic;"># Mostra configuração atual da opção bin_dir</span>
pear config-get doc_dir <span style="color: #666666; font-style: italic;"># Mostra configuração atual da opção doc_dir</span>
<span style="color: #666666; font-style: italic;"># Para modificar:</span>
pear config-set bin_dir <span style="color: #000000; font-weight: bold;">/</span>outro<span style="color: #000000; font-weight: bold;">/</span>bin
pear config-set doc_dir <span style="color: #000000; font-weight: bold;">/</span>outro<span style="color: #000000; font-weight: bold;">/</span>docs</pre></div></div>

<p>Depois de instalado, você pode utilizar ele tanto no Vim quanto fora do Vim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pman array_merge</pre></div></div>

<p>Bom, se lembra que eu havia falado sobre o <em>keywordprg</em> ? Assim como o <em>makeprg</em> é o programa executado ao se executa :<em>make</em> no Vim e o <em>grepprg</em> o comando executado ao se executar :<em>[grep|vimgrep]</em>, o <em>keywordprg</em> é executado quando se preciona <strong>K</strong> (k maiúsculo) sobre alguma palavra chave &#8211; que no nosso caso será uma função php.</p>
<p>O artigo citado ali em cima, indica para colocarmos no <strong>.vimrc</strong>, mas eu acho mais interessante por no <strong>.ftplugin/php.vim</strong> (se o arquivo não existir, crie). Assim, só será carregado caso o tipo do arquivo for php, possibilitando utilizar outros programas para outras linguagens</p>

<div class="wp_syntax"><div class="code"><pre class="vimrc" style="font-family:monospace;">&quot; Programa executado quando pressionado K
set keywordprg=pman</pre></div></div>

<p>Agora faça o teste: abra um arquivo php, coloque o cursor sobre alguma função e pressione <em>K</em>. Para fechar o manual aberto, basta precionar <em>q</em>. Pode-se utilizar a busca com <em>/termo</em> e também navegar nos resultados com <em>n/N</em>. <em>j/k/UP/DOWN</em> movem o arquivo para cima e para baixo, normalmente, como se fosse um manpage.</p>
<p>Eai, este post ajudou em algo?</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/365/como-consultar-a-documentacao-do-php-direto-do-vim/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Usando Vim dentro do Eclipse</title>
		<link>http://gustavodutra.com/post/257/usando-vim-dentro-do-eclipse/</link>
		<comments>http://gustavodutra.com/post/257/usando-vim-dentro-do-eclipse/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 11:43:36 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=257</guid>
		<description><![CDATA[Pois é, quem nunca mexeu com java que atire a primeira pedra. Trabalhar com java fora de um IDE é realmente muito ruim. Mas deveria eu criar uma IDE em modo texto para o Vim ou ver alguma solução para o meu problema no google? 
Eu já sabia da existência, mas nunca tinha visto um [...]]]></description>
			<content:encoded><![CDATA[<p>Pois é, quem nunca mexeu com java que atire a primeira pedra. Trabalhar com java fora de um IDE é realmente muito ruim. Mas deveria eu criar uma IDE em modo texto para o Vim ou ver alguma solução para o meu problema no <a rel="nofollow" href="http://google.com" target="_blank">google</a>? </p>
<p>Eu já sabia da existência, mas nunca tinha visto um motivo para fazê-lo. Trata-se do vim ou gvim dentro do Eclipse. Alguns motivos que me tentaram a usá-lo:</p>
<ul>
<li>Compilar é muito mais simples no eclipse.</li>
<li>Achar arquivos em pacotes é mais fácil com o Project Browser</li>
<li>Pode-se utilizar outros plugins do Eclipse, como o de modelagem pra Swing, AWT, etc</li>
<li>Integração com o SVN</li>
</ul>
<p><span id="more-257"></span></p>
<h2>Instalação</h2>
<p>A instalação está descrita no próprio site do <a rel="nofollow" href="http://vimplugin.org" target="_blank">Vimplugin</a>, e pode ser encontrada em <a rel="nofollow" href="http://vimplugin.org/installation" target="_blank">http://vimplugin.org/installation</a>.</p>
<p>Na configuração, ignore o campo de porta e senha, deixe como está. Apenas passe o caminho para o vim (geralmente <em>/usr/bin/vim</em> ou <em>/usr/bin/gvim</em>) e marque a opção &#8220;Embed vim to eclipse&#8221;. Pois se ela não estiver marcada, o vim é aberto externamente. Com o gvim, ao invés do vim, o eclipse coloca até os menus e toolbars, caso não estejam escondidos com o <strong>guioptions</strong>.</p>
<p>Pelo fato de se poder especificar argumentos opcionais para o vim, é possível fazer um .vimrc específico para utilização com o Eclipse. Muito útil.</p>
<h2>Utilização</h2>
<p>Para abrir um arquivo pelo vim: Botão direito sobre o arquivo > Open with > Vim.</p>
<p>Todas as funcionalidades estão presentes. Só não consegui fazer funcionar o <em>DELETE</em>, tem que ser no <em>backspace</em> ou <em>x</em>. Pode-se abrir vários arquivos em buffers e/ou abas, usar macros e substituições por expressões regulares, igual como quando independente.</p>
<h2>Conclusão</h2>
<p>Ainda prefiro o (g)vim sozinho, é mais leve e prático. Mas convenhamos, para java, talvez essa realmente seja a melhor opção. Alguém tem crítica sobre outros plugins?</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/257/usando-vim-dentro-do-eclipse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Criando apresentações Power Point pelo Vim</title>
		<link>http://gustavodutra.com/post/229/criando-apresentacoes-power-point-pelo-vim/</link>
		<comments>http://gustavodutra.com/post/229/criando-apresentacoes-power-point-pelo-vim/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 21:56:13 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[aumentar produtivade]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[gvim]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[openoffice]]></category>
		<category><![CDATA[power point]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=229</guid>
		<description><![CDATA[Essa semana eu precisei de uma apresentação Power Point. Abri o Impress, o editor de apresentações do OpenOffice. Comecei meu raciocínio sobre a apresentação. Quando me dei conta, estava colocando negrito e identando um parágrafo. Ao reler o parágrafo, havia 3 erros de gramática. Foi a gota d&#8217;água: Não consigo criar apresentações, pensei.
Quando eu vou [...]]]></description>
			<content:encoded><![CDATA[<p>Essa semana eu precisei de uma apresentação Power Point. Abri o Impress, o editor de apresentações do OpenOffice. Comecei meu raciocínio sobre a apresentação. Quando me dei conta, estava colocando negrito e identando um parágrafo. Ao reler o parágrafo, havia 3 erros de gramática. Foi a gota d&#8217;água: Não consigo criar apresentações, pensei.</p>
<p>Quando eu vou escrever em algum programa de qualquer suíte de escritório &#8211; openoffice, koffice, etc -, eu geralmente me preocupo mais com o negrito da palavra, com identação do parágrafo do que com o conteúdo em si. Isso é um pecado.</p>
<p>Meu primeiro instinto foi: vou escrever tudo no Vim, depois colo no Impress. Boa! Ok, mas e quanto às páginas?<br />
Vou ter que por página por página? Ainda sim eu teria mais trabalho. Eu teria que refazer as listas para que ficassem com as &#8220;bolinhas&#8221; à esquerda. E teria que modificar todos os títulos para negrito?</p>
<p><span id="more-229"></span></p>
<p>Fui pro google e achei um plugin que já conhecia no resultado: <a rel="nofollow" href="http://www.vimoutliner.org/">VimOutliner</a>. Ele dita uma sintaxe muito intuitiva para hierarquisar (existe esse verbo?) o conteúdo. Algo assim:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Título do documento
&nbsp;
Tópico Nível 1
	Tópico Nível 2
	: Parágrafo com alinhamento justify
	; Parágrafo fica do jeito que foi escrito
	- Item de lista
	+ Item de lista numérica</pre></div></div>

<p>O plugin vem com documentação e um shell script que instala automaticamente o plugin. O site tem toda documentação, é bem simples.</p>
<p>Em <a rel="nofollow" href="http://perens.com/FreeSoftware/Outline/">http://perens.com/FreeSoftware/Outline/</a> é possível encontrar vários scripts que convertem o documento para outros formatos. Um deles é o vo2odp.rb, um script em ruby para converter arquivos para o OpenOffice Presentation.</p>
<p>Pra fazê-lo rodar, eu sofri um pouquinho. Tive que instalar o ruby (obviamente) e o rubygems. Depois de instalado:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ gem install builder
$ gem install rubyzip</pre></div></div>

<p>Também alterei o script, segue o patch das modificações:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">29,30c29,30
&lt; require_gem 'builder'
&lt; require_gem 'rubyzip'
---
&gt; require 'builder'
&gt; require 'zip/zip'</pre></div></div>

<p>Copie o trecho acima em um arquivo, por exemplo: /tmp/patch_vo2odp, depois execute</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ patch /caminho/para/vo2odp.rb &lt; /tmp/patch_vo2odp</pre></div></div>

<p>Pronto, agora só escrever sua apresentação. Lembre-se que o plugin tem uma extenção própria, a .otl. Sempre que um arquivo for aberto com esta extenção, o Vim irá carregar o syntax highlight apropriado e algumas outras opções para melhor escrever sua apresentação.</p>
<p>Concluída a apresentação, você pode usar</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ ruby /caminho/para/vo2odp.rb apresentacao.otl apresentacao.odp</pre></div></div>

<p>Abra com o OpenOffice e salve como .ppt. Pronto! Você acabou de fazer sua apresentação no PowerPoint pelo Vim.</p>
<h3>Observações importantes</h3>
<ul>
<li>O script não quebra as páginas dos slides automaticamente. É separado por capítulos de nível 1. Então, não escreva coisas muito longas dentro de um nível. Lembre-se que é uma apresentação e não um documento de texto.</li>
<li>Quando aberto no OpenOffice, use o negrito, sublinhado, coloque imagens, etc. Crie seu layout e não pense nisso durante a criação do conteúdo. Escreva antes e formate depois</li>
</ul>
<p>E isso ai! Gostou? Não? Comente! Dê dicas e sugestões!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/229/criando-apresentacoes-power-point-pelo-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lançada versão beta do .vimrc generator</title>
		<link>http://gustavodutra.com/post/162/lancada-versao-beta-do-vimrc-generator/</link>
		<comments>http://gustavodutra.com/post/162/lancada-versao-beta-do-vimrc-generator/#comments</comments>
		<pubDate>Sun, 03 May 2009 22:08:13 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[gvimrc]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=162</guid>
		<description><![CDATA[Olá! Eu estava pensando em usar o feriado pra aprender pyGTK, com um projeto que estou na cabeça. Mas, sexta-feira me surgiu outra idéia, que tocou mais forte.
Muita gente me perguntava o que eu punha no meu .vimrc, quais configurações e o que elas faziam. Então, pra ajudar o pessoal e também manter uma documentação [...]]]></description>
			<content:encoded><![CDATA[<p>Olá! Eu estava pensando em usar o feriado pra aprender pyGTK, com um projeto que estou na cabeça. Mas, sexta-feira me surgiu outra idéia, que tocou mais forte.</p>
<p>Muita gente me perguntava o que eu punha no meu .vimrc, quais configurações e o que elas faziam. Então, pra ajudar o pessoal e também manter uma documentação (porque eu esqueço rápido essas coisas), eu criei o .vimrc generator.</p>
<p>A idéia é que se possa criar um .vimrc através da interface web, facilitando a propagação (caso você queira mostrar pro amigo, contribuínte ou seja lá quem for) do seu .vimrc! Vocês podem ler um pouco mais <a rel="nofollow" href="http://vimrc.gustavodutra.com/">aqui</a>. Também tenho plano de fazer estatísticas, como por exemplo: quais opções mais usadas, quais colorschemes mais utilizados, etc. Portanto, sinta-se a vontade de testar a ferramenta e dar um <a rel="nofollow" href="http://vimrc.gustavodutra.com/feedback">feedback</a>!</p>
<p>Sugestões de opções interessantes, de coisas faltando, reclamações, são todas bem-vindas! Pode ter certeza que, se implementada, manterei os créditos da sua idéia. Por enquanto só está disponível em inglês, mas logo traduzirei pro português. Quem sabe feriado que vem? hehehe</p>
<p>Espero que aproveitem! <a rel="nofollow" href="http://vimrc.gustavodutra.com/generate">Gere seu próprio .vimrc</a></p>
<p>Até!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/162/lancada-versao-beta-do-vimrc-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dicas de como aumentar a produtividade usando autocmd no vim</title>
		<link>http://gustavodutra.com/post/153/dicas-de-como-aumentar-a-produtividade-usando-autocmd-no-vim/</link>
		<comments>http://gustavodutra.com/post/153/dicas-de-como-aumentar-a-produtividade-usando-autocmd-no-vim/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 02:06:11 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[abreviaturas]]></category>
		<category><![CDATA[aumentar produtivade]]></category>
		<category><![CDATA[autocmd]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[gvimrc]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[porque]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[reuso]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=153</guid>
		<description><![CDATA[Quantas vezes você faz um arquivo que é exatamente igual à um outro arquivo por dia? Quantas vezes você abre um arquivo só para copiar um trecho de código que é utilizado em vários arquivos? Quantas vezes você se vê fazendo a mesma coisa que fez em outro lugar?
E aquela palavra que você sempre escreve [...]]]></description>
			<content:encoded><![CDATA[<p>Quantas vezes você faz um arquivo que é exatamente igual à um outro arquivo por dia? Quantas vezes você abre um arquivo só para copiar um trecho de código que é utilizado em vários arquivos? Quantas vezes você se vê fazendo a mesma coisa que fez em outro lugar?</p>
<p>E aquela palavra que você sempre escreve errada? Aquela função que você sempre esquece o nome?</p>
<p>Conheça algumas dicas para aumentar a produtividade e diminuir o trabalho dessas coisas rotineiras.</p>
<p><span id="more-153"></span></p>
<h2>Lista de Abreviaturas</h2>
<p>Sabe aquelas palavras que a gente insiste em escrever errado? Principalmente quem trabalha com e-mails, códigos e comentários em outras línguas tem dificuldades com certas palavras. Por exemplo,</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">vc -&gt; você
q -&gt; que
pq -&gt; porque
nao -&gt; não</pre></div></div>

<p>Agora a pergunta que não quer calar: Porque não usarmos algo para evitar esse tipo de coisa? Às vezes nem notamos os erros, mas eles estão lá. Mantenha uma lista de abreviaturas no Vim. Cuide dela, adicione novas abreviaturas assim que vierem à sua cabeça. A sintaxe é simples, basta adicionar no seu .vimrc:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">&quot;&quot; abbr ERRADO CORRETO, por exemplo:
abbr pq porque
abbr vc você</pre></div></div>

<p>O Vim ainda possibilita que você crie sintaxes diferentes para arquivos diferentes. Então, seus arquivos <strong>.txt</strong> podem ter abreviaturas diferentes das de <strong>.py</strong>. Ou seja, se o nome daquela função python é muito <strong>longa</strong> ou você insiste em escrevê-la errada, ela merece uma abreviatura, no formato descrito acima (abbr ERRADO CORRETO).</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">$ mkdir -p ~/.vim/abreviaturas/
$ vim ~/.vim/abreviaturas/txt.vim</pre></div></div>

<p>Adicione ao txt.vim as abreviaturas utilizadas para arquivos texto. Mesmo que poucas, coloque algumas. Um pouco de disciplina fará com que sua produtividade aumente. Tenha certeza.</p>
<p>Ao seu .vimrc, basta acrescentar:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufNewFile,BufRead <span style="color: #000000;">*</span> source <span style="color: #000000;">$</span>HOME<span style="color: #000000;">/.</span>vim<span style="color: #000000;">/</span>abreviaturas<span style="color: #000000;">/</span>para_qualquer_linguagem<span style="color: #000000;">.</span>vim
<span style="color: #668080;">autocmd</span> BufNewFile,BufRead <span style="color: #000000;">*.</span>txt source <span style="color: #000000;">$</span>HOME<span style="color: #000000;">/.</span>vim<span style="color: #000000;">/</span>abreviaturas<span style="color: #000000;">/</span>txt<span style="color: #000000;">.</span>vim
<span style="color: #668080;">autocmd</span> BufNewFile,BufRead <span style="color: #000000;">*.</span>py source <span style="color: #000000;">$</span>HOME<span style="color: #000000;">/.</span>vim<span style="color: #000000;">/</span>abreviaturas<span style="color: #000000;">/</span>python<span style="color: #000000;">.</span>vim</pre></div></div>

<p>O <em>autocmd</em> funciona mais ou menos igual a uma <em>trigger</em>. É um sistema de eventos, basicamente. Ou seja, ao abrir um arquivo novo (BufNewFile) ou um arquivo já existente (BufRead), se o nome do arquivo casar com a expressão (no caso, *, *.txt ou *.py) irá executar o código a seguir.</p>
<p>Vou falar mais sobre o autocmd em outro post, tem muitoooo pano pra manga, hehehe.</p>
<h2>Templates de Arquivos</h2>
<p>Quando se fala em programação é meio que como na arte. Não só porque programar é uma arte, mas porque nada se cria, tudo se copia. Tudo bem que, hoje em dia, com técnicas de encapsulamento, oop, etc, fica mais difícil. Mas sempre há coisas em comum entre os arquivos. Vamos começar com algo simples.</p>
<p>Template básico para javascript, onde será utilizado jquery.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">onready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">// code here</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Simples, mas não é um saco ter que escrever isso sempre que abre um arquivo novo? Tome isso como regra: Faça uma, porém apenas uma vez. Não seria mais fácil abrir o arquivo e tcha-ram! Lá está o código que, em 90% dos casos, você irá utilizar?</p>
<p>Esse foi pequeninho, mas imagine um arquivo html. A trabalheira que é copiar todo o caçalho. E se você segue um padrão, pode usar inclusive o css junto. Observe:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt; !DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;pt&quot; lang=&quot;pt-br&quot; dir=&quot;ltr&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;meta http-equiv=&quot;Content-Style-Type&quot; content=&quot;text/css&quot; /&gt;
		&lt;meta name=&quot;keywords&quot; content=&quot;aqui,vai,as,keywords&quot; /&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;/style.css&quot; /&gt;
		&lt;link rel=&quot;shortcut icon&quot; href=&quot;/favicon.ico&quot; /&gt;
        &lt;/head&gt;
        &lt;body&gt;
        &lt;div id=&quot;wrapper&quot;&gt;
                &lt;div id=&quot;head&quot;&gt;&lt;/div&gt;
                &lt;div id=&quot;content&quot;&gt;&lt;/div&gt;
                &lt;div id=&quot;footer&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></div>

<p>E o css:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">html <span style="color: #00AA00;">*</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #00AA00;">&#125;</span>
body <span style="color: #00AA00;">&#123;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#wrapper</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #00AA00;">&#125;</span>
        <span style="color: #cc00cc;">#wrapper</span> <span style="color: #cc00cc;">#head</span> <span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">&#125;</span>
        <span style="color: #cc00cc;">#wrapper</span> <span style="color: #cc00cc;">#content</span> <span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">&#125;</span>
        <span style="color: #cc00cc;">#wrapper</span> <span style="color: #cc00cc;">#footer</span> <span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Imagine um designers, aqueles que fazem o psd e depois passam pra xhtml, tendo que copiar isso vezes e vezes para todos os arquivos que ele faz. Faça apenas uma vez e siga o padrão!</p>
<p>Usuários de django, ao criar um model, precisam escrever sempre os imports ? Se são utilizados sempre, porque não criar um template?</p>
<p>Agora você me pergunta, como carregar o template automagicamente no Vim ? Fácil! Utilizando nosso autocmd =). Do mesmo modo que fizemos com as abreviaturas, vamos criar os diretórios:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">$ mkdir -p ~/.vim/templates/</pre></div></div>

<p>Criei lá os arquivos com os templates que você acha útil.</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufNewFile <span style="color: #000000;">*.</span>html 0r <span style="color: #000000;">~/.</span>vim<span style="color: #000000;">/</span>templates<span style="color: #000000;">/</span>html<span style="color: #000000;">.</span>tpl
<span style="color: #668080;">autocmd</span> BufNewFile style<span style="color: #000000;">.</span>css 0r <span style="color: #000000;">~/.</span>vim<span style="color: #000000;">/</span>templates<span style="color: #000000;">/</span>cssstyle<span style="color: #000000;">.</span>tpl
<span style="color: #668080;">autocmd</span> BufNewFile jquery<span style="color: #000000;">.*.</span>js 0r <span style="color: #000000;">~/.</span>vim<span style="color: #000000;">/</span>templates<span style="color: #000000;">/</span>jqueryjs<span style="color: #000000;">.</span>tpl</pre></div></div>

<p>Agora, abra seu Vim e sinta a magia:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">vim index.html style.css jquery.initscript.js</pre></div></div>

<h2>Executando comandos externos</h2>
<h3>g(un)zip</h3>
<p>O manual do Vim tem um exemplo bem interessante, para abrir arquivos <strong>gzipados</strong>, editá-los, como se nada tivesse acontecido e salvá-lo no formato <strong>gzip</strong> de novo. Apesar de que aqui, não precisou acrescentar os códigos abaixo, ele já fez automático. Basta adicionar o .vimrc</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;">augroup gzip
  <span style="color: #668080;">autocmd</span><span style="color: #000000;">!</span>
  <span style="color: #668080;">autocmd</span> BufReadPre,FileReadPre	<span style="color: #000000;">*.</span>gz set bin
  <span style="color: #668080;">autocmd</span> BufReadPost,FileReadPost	<span style="color: #000000;">*.</span>gz <span style="color: #C5A22D;">'[,'</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">!</span>gunzip
  <span style="color: #668080;">autocmd</span> BufReadPost,FileReadPost	<span style="color: #000000;">*.</span>gz set nobin
  <span style="color: #668080;">autocmd</span> BufReadPost,FileReadPost	<span style="color: #000000;">*.</span>gz <span style="color: #804040;">execute</span> <span style="color: #C5A22D;">&quot;:doautocmd BufReadPost &quot;</span> <span style="color: #000000;">.</span> <span style="color: #25BB4D;">expand</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;%:r&quot;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #668080;">autocmd</span> BufWritePost,FileWritePost	<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>mv <span style="color: #000000;">&lt;</span>afile<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
  <span style="color: #668080;">autocmd</span> BufWritePost,FileWritePost	<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>gzip <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
&nbsp;
  <span style="color: #668080;">autocmd</span> FileAppendPre		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>gunzip <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;</span>
  <span style="color: #668080;">autocmd</span> FileAppendPre		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>mv <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;</span>
  <span style="color: #668080;">autocmd</span> FileAppendPost		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>mv <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
  <span style="color: #668080;">autocmd</span> FileAppendPost		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>gzip <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
augroup END
<span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;</span></pre></div></div>

<h3>Verificação por erro</h3>
<p>Já deve ter acontecido com você: você salva o arquivo e quando vai testar, faltou um ponto e vírgula, ou escrever o nome de uma função errada, ou algo similar&#8230; um erro bobo, mas que não deixou seu código ser executado e exige reparo.</p>
<p>Para ajudar contra esse trabalho desnecessário (teste + correção + teste), que pode se repetir inúmeras vezes, você pode usar o autocmd para alertá-lo, utilizando ferramentas externas. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufWritePost <span style="color: #000000;">*.</span>pl <span style="color: #000000;">!</span>perl <span style="color: #000000;">-</span>c <span style="color: #000000;">%</span>
<span style="color: #668080;">autocmd</span> BufWritePost <span style="color: #000000;">*.</span>php <span style="color: #000000;">!</span>php <span style="color: #000000;">-</span>l <span style="color: #000000;">%</span>
<span style="color: #668080;">autocmd</span> BufWritePost <span style="color: #000000;">*.</span>java <span style="color: #000000;">!</span>javac <span style="color: #000000;">-</span>Xlint <span style="color: #000000;">%</span></pre></div></div>

<h2>Use a criativdade</h2>
<p>Utilize sua criatividade e seja mais produtivo na SUA rotina. Deixe as coisas serem automatizadas. Para mais eventos do autocmd, :help autocmd. Tem uma lista bem extensa. Leia a documentação e seja feliz =). Crítias, sugestões e CASES são bem vindos nos comentários =)</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/153/dicas-de-como-aumentar-a-produtividade-usando-autocmd-no-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dicas de movimentação e identação no GVim</title>
		<link>http://gustavodutra.com/post/72/dicas-de-movimentacao-e-identacao-no-gvim/</link>
		<comments>http://gustavodutra.com/post/72/dicas-de-movimentacao-e-identacao-no-gvim/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 22:58:56 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[gvimrc]]></category>
		<category><![CDATA[identacao]]></category>
		<category><![CDATA[movimentacao]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=72</guid>
		<description><![CDATA[Das coisas que mais me deixam frustados na face da terra, além de pegar código desidentado ou identado de forma errada, é ouvir coisas do tipo &#8216;no eclipse é mais fácil, só dar CTRL+&#8230;&#8217;, &#8216;ah, porque no notepad++ da pra fazer isso mais fácil&#8230;&#8217;.
Essa semana eu escutei algo do tipo: &#8216;No notepad++, CTRL+SHIFT+UP move a [...]]]></description>
			<content:encoded><![CDATA[<p>Das coisas que mais me deixam frustados na face da terra, além de pegar código desidentado ou identado de forma errada, é ouvir coisas do tipo &#8216;no eclipse é mais fácil, só dar CTRL+&#8230;&#8217;, &#8216;ah, porque no notepad++ da pra fazer isso mais fácil&#8230;&#8217;.</p>
<p>Essa semana eu escutei algo do tipo: &#8216;No notepad++, CTRL+SHIFT+UP move a linha atual pra cima, o GVim podia ter um comando que fizesse isso.&#8217; (Citada pelo reclamão-mor, Luan). Indignados, eu e Emanuel (sim, ele me ajudou) gastamos mais ou menos 1 hora de trabalho ajeitando umas HOTKEYS para ninguém reclamar. (Chefe, eu sei que tu lê o Blog, mas dá um desconto, vai?). Eis o que surgiu:</p>
<p><span id="more-72"></span></p>
<h2>Identação de Código</h2>
<p>Garanto que não foram uma ou duas pessoas que já tentaram identar uma seleção com TAB no GVim (identar no modo visual). Pois é, &#8216;não é como o notepad++, o notepad++ deixa e blá blá blá&#8217;. Esta parte foi toda do Emanuel (créditos):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">vnoremap &lt; &lt;gv
vnoremap &gt; &gt;gv
vmap  &lt;TAB&gt; &gt;
vmap  &lt;S-TAB&gt; &lt;
imap  &lt;S-TAB&gt; &lt;ESC&gt;&lt;&lt;i</pre></td></tr></table></div>

<p>Assim, colocando o script acima no .gvimrc, e testemos. Selecionando o texto, ele deve ajeitar a identação usando TAB (para direita) ou SHIFT+TAB (para esquerda) ou usando os famosos e não menos práticos &lt; e &gt;. Detalhe: Ele não desfaz a seleção. Então, pode se dar 4 tabs seguidos sem precisar re-selecionar o texto (como funcionaria se não tivesse o gv).</p>
<h2>Movimentação de Texto</h2>
<p>Bom, tudo começou no mover linha para cima ou para baixo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">&quot;&quot; Move bloco de texto selecionado pra cima
function! MoveUp()
    let end=line(&quot;'&gt;&quot;)
    let start=line(&quot;'&lt;&quot;)
    if (start &gt; 1)
        let dif=end - start
        exec &quot;'&lt;,'&gt;d&quot;
        exec &quot;normal kP&quot;
        exec &quot;normal &quot; . (start-1) . &quot;GV&quot; . (end-1) . &quot;G&quot; 
    else
        exec &quot;normal &quot; . (start) . &quot;GV&quot; . (end) . &quot;G&quot; 
    endif
endfunction 
&quot; Move bloco de texto selecionado para baixo
function! MoveDown()
    let end=line(&quot;'&gt;&quot;)
    let start=line(&quot;'&lt;&quot;)
    if (end &lt; line(&quot;$&quot;)-1)
        let dif=end - start
        exec &quot;'&lt;,'&gt;d&quot;
        exec &quot;normal p&quot; exec &quot;normal &quot; . (start+1) . &quot;GV&quot; . (end+1) . &quot;G&quot;
    else
        exec &quot;normal &quot; . (start) . &quot;GV&quot; . (end) . &quot;G&quot;
    endif
endfunction
&quot; Duplica um bloco de texto
function! Duplicate()
    let end=line(&quot;'&gt;&quot;)
    let start=line(&quot;'&lt;&quot;)
    let dif=end - start exec &quot;'&lt;,'&gt;y&quot;
    exec &quot;normal &quot; . end . &quot;G&quot; exec &quot;normal $p&quot;
    exec &quot;normal &quot; . (start+dif+1) . &quot;GV&quot; . (end+dif+1) . &quot;G&quot;
endfunction
&quot; Move bloco de texto selecionado pra cima 
vnoremap &lt;C-S-UP&gt; :&lt;C-U&gt;call MoveUp()&lt;CR&gt;
&quot; Move bloco de texto selecionado pra baixo
vnoremap &lt;C-S-DOWN&gt; :&lt;C-U&gt;call MoveDown()&lt;CR&gt;
&quot; Duplica o bloco de texto selecionado
vnoremap &lt;C-D&gt; :&lt;C-U&gt;call Duplicate()&lt;CR&gt;</pre></td></tr></table></div>

<p>Pois bem, virou um monstro. O script acima mapeia 3 funcionalidades de alguns editores de textos. Ao selecionar um bloco de texto, vamos supor que sejam 10 linhas, CTRL+SHIFT+CIMA te permitem que todo o código seja movido 1 linha acima, o inverso com CTRL+SHIFT+DOWN. O CTRL+D duplicaria as 10 linhas selecionadas. Mas nos 3, o texto selecionado continua selecionado.</p>
<h2>E você?</h2>
<p>Bom, que funcionalidade de outros editores de texto você sente falta no GVim? Só não me venha com CTRL+S, CTRL+C e CTRL+V!!! Use o notepad++ neste caso ^_____^.</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/72/dicas-de-movimentacao-e-identacao-no-gvim/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>15 dicas para maior produtividade usando o GVim</title>
		<link>http://gustavodutra.com/post/48/15-dicas-para-maior-produtividade-usando-o-gvim/</link>
		<comments>http://gustavodutra.com/post/48/15-dicas-para-maior-produtividade-usando-o-gvim/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 21:33:14 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[gvimrc]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://blog.gustavodutra.com/?p=48</guid>
		<description><![CDATA[Olá! \o/
Hoje vou falar sobre dicas (algumas bem simples, mas que fazem diferença) para aumentar a produtividade no GVim/Vim. Algumas delas são plugins, outras vão direto para o ~/.gvimrc!

Color Picker
Saindo sem estresse
Colocando Headers nos arquivos
Abrindo arquivos escritos no arquivo
Trabalhando com buffers
Aprimorando a busca
Mudando a fonte
Documentando o código
Autocomplete de código
Rodando comandos do Shell
Solução para arquivos chatos [...]]]></description>
			<content:encoded><![CDATA[<h2>Olá! \o/</h2>
<p>Hoje vou falar sobre dicas (algumas bem simples, mas que fazem diferença) para aumentar a produtividade no GVim/Vim. Algumas delas são plugins, outras vão direto para o ~/.gvimrc!</p>
<ol>
<li>Color Picker</li>
<li>Saindo sem estresse</li>
<li>Colocando Headers nos arquivos</li>
<li>Abrindo arquivos escritos no arquivo</li>
<li>Trabalhando com buffers</li>
<li>Aprimorando a busca</li>
<li>Mudando a fonte</li>
<li>Documentando o código</li>
<li>Autocomplete de código</li>
<li>Rodando comandos do Shell</li>
<li>Solução para arquivos chatos de backup</li>
<li>Removendo Linhas em Branco</li>
<li>Compilando arquivos e analizando erros</li>
<li>Mostrando a identação</li>
<li>Autorrecarregando nosso .gvimrc</li>
</ol>
<ol>
<span id="more-48"></span></p>
<h2>1. Color Picker</h2>
<p>Quem trabalha com web, geralmente precisa rapidamente selecionar uma cor em hexadecimal. Geralmente recorremos à sites para isso. Existe um plugin que resolve nossos problemas, você pode baixar ele aqui: http://www.vim.org/scripts/script.php?script_id=927</p>
<p>Para instalar é muito fácil. Baixe o arquivo colorsel.vim do site mencionado acima, jogue para dentro do diretórios de plugins, no meu caso /usr/share/vim/vim71/plugins. Ao reiniciar o gvim, basta digitar</p>
<pre>:colorSel</pre>
<p>Ele deve aparecer algo como:</p>
<p><img class="aligncenter size-full wp-image-50" title="colorsel" src="http://blog.gustavodutra.com/wp-content/uploads/2009/01/colorsel.png" alt="colorsel" width="364" height="260" /></p>
<p>Notem, que caso o vim seja aberto pelo terminar, ele dispara um erro, dizendo que o plugin instalado é para uso com interface gráfica. Para resolver isso, na linha 24 do colorsel.vim, que começa com &#8217;stderr&#8217;&#8230;</p>
<p>Apenas apague esta linha e o erro não é mais mostrado para você!</p>
<h2>2. Saindo sem estresse</h2>
<p>Muitos devem ficar brabos ao tentar sair do vim e digitar o Q maiúsculo</p>
<pre>:Q</pre>
<p>Para isso, vamos por no nosso ~/.gvimrc</p>
<pre>cab W w
cab Q q
cab Wq wq
cab wQ wq
cab WQ wq</pre>
<p>Isso vai fazer com que ao digitar algum comando da segunda coluna, ele deve interpretar como o da terceira, logo se for digitado :Q, ele vai entender :q. Isso nos livras de muitas dores de cabeça!</p>
<h2>3. Colocando Headers nos arquivos</h2>
<p>Muita gente gosta de identificar o arquivo que está escrevendo ou até mesmo ao documentar arquivos. Às vezes precisa por uma licensa, o autor do arquivo, a hora em que foi escrito. Algumas IDE&#8217;s oferecem isso normalmente, o GVim, apesar de não ser uma IDE, também oferece algo parecido. Basta acrescentar estas linhas no .gvimrc, mapeando a tecla F8 (você pode modificar à sua preferência).</p>
<pre>map &lt;F8&gt; O/**&lt;CR&gt;
\* Descrição do arquivo&lt;CR&gt;
\* @author Gustavo Dutra &lt;mechamo@gustavodutra.com&gt;&lt;cr&gt;
\* @created &lt;esc&gt;:r!date '+\%d/\%m/\%y'&lt;cr&gt;kJA&lt;cr&gt;
\*/</pre>
<p>Ao abrir um novo arquivo, basta pressionar F8, ele acrescentará nosso header (que você pode modificar para o que você desejar!).</p>
<h2>4. Abrindo arquivos escritos no arquivo</h2>
<p>Algumas linguagens não usam &#8216;import&#8217;, porém incluem arquivos dentro de arquivos, o que salva muito a vida do programador. Mas supondo que estamos editando o arquivo X, que inclui o arquivo Y, e precisamos, por alguma eventualidade, editar algo no arquivo Y. Precisamos abrir o arquivo passando todo o caminho até ele. Para isso, facilitar isso, façamos um atalho:</p>
<pre>nmap gf :new %:p:h/&lt;cfile&gt;&lt;CR&gt;</pre>
<p>Basta posicionar o cursor sobre o nome do arquivo, e digitar &#8216;gf&#8217;. Nomeei gf para significar Go to File. Você pode colocar o atalho que desejar! Basta mudar o gf para o que quiseres.</p>
<h2>5. Trabalhando com buffers</h2>
<p>Eu particularmente não gosto de um monte de instâncias do GVim aberta ao mesmo tempo, muito menos gosto de tabs. Eu gosto mesmo é de buffers. Para isso criei alguns atalhos para navegar entre eles</p>
<pre>map &lt;A-1&gt; :b1&lt;cr&gt;
map &lt;A-2&gt; :b2&lt;cr&gt;
map &lt;A-3&gt; :b3&lt;cr&gt;
map &lt;A-4&gt; :b4&lt;cr&gt;
map &lt;A-5&gt; :b5&lt;cr&gt;
map &lt;A-6&gt; :b6&lt;cr&gt;
map &lt;A-7&gt; :b7&lt;cr&gt;
map &lt;A-8&gt; :b8&lt;cr&gt;
map &lt;A-9&gt; :b9&lt;cr&gt;
map &lt;A-0&gt; :b10&lt;cr&gt;
map &lt;S-F1&gt; :b11&lt;cr&gt;
map &lt;S-F2&gt; :b12&lt;cr&gt;
map &lt;S-F3&gt; :b13&lt;cr&gt;
map &lt;S-F4&gt; :b14&lt;cr&gt;
map &lt;S-F5&gt; :b15&lt;cr&gt;
map &lt;S-F6&gt; :b16&lt;cr&gt;
map &lt;S-F7&gt; :b17&lt;cr&gt;
map &lt;S-F8&gt; :b18&lt;cr&gt;
map &lt;S-F9&gt; :b19&lt;cr&gt;
map &lt;S-F10&gt; :b20&lt;cr&gt;
map &lt;S-F11&gt; :b21&lt;cr&gt;
map &lt;S-F12&gt; :b22&lt;cr&gt;
map &lt;C-Q&gt; :bwipeout&lt;cr&gt;
map &lt;F6&gt; :buffers&lt;cr&gt;</pre>
<p>Para quem não sabe, para iniciar um buffer, utilizamos :e. Logo, para abrir nosso .gvimrc num buffer diferente, digitamos</p>
<pre>:e ~/.gvimrc</pre>
<p>À cada buffer aberto, o GVim da um número sequencial começando em 1. Nos mapa descrito ali em cima, ALT+1 até ALT+0 navegam nos 10 primeiros buffers. SHIFT+F1 até SHIFT+F12, navegam do buffer 11 até o 22. CTRL+Q, fecha o buffer (remove da lista) e F6 lista todos os buffers disponíveis com os nomes dos arquivos e seus respectivos números.</p>
<h2>6. Aprimorando a busca</h2>
<p>Para buscar por algum trecho de texto no gvim, é utilizado a barra (/).</p>
<pre>/texto da busca</pre>
<p>Adicionando no nosso .gvimrc o seguinte:</p>
<pre>set incsearch
set hlsearch</pre>
<p>É possível fazer com que à medida em que é digitado, o GVim saliente o texto (highlight), caso encontrado. Para navegar entre os resultados, utilizamos n (próxima ocorrência) ou N (ocorrência anterior). Mas, uma das coisas interessantes é sobreescrever estes comandos desta forma:</p>
<pre>nmap n nzz
nmap N Nzz</pre>
<p>zz é responsável por por a linha atual no centro da tela. Logo, isto permite que ao encontrar uma próxima ocorrência do texto, o texto ficará no meio da tela.</p>
<h2>7. Mudando a fonte</h2>
<p>No Vim a fonte utilizada é a do Terminal no qual ele foi executado. No GVim, por ser gráfico, possibilita com que seja modificada a fonte atual.</p>
<pre>set guifont=Fonte\ Desejada\ 8</pre>
<p>Lembre-se de escapar os espaços. Logo depois do nome da fonte, é colocado o tamanho dela. Se por alguma acaso você ficar em dúvida em qual fonte utilizar, você pode digitar o seguinte no GVim</p>
<pre>:set guifont=*</pre>
<p>Com isso, ele abrirá o seletor de fontes do seu OS. Basta selecionar o dar OK. Quando feito e fonte for modificada, você pode digitar somente</p>
<pre>:set guifont</pre>
<p>Ele retornará a sintaxe correta de como usar a fonte e o tamnho da mesma. Então, basta copiar e colar no .gvimrc!</p>
<h2>8. Documentando o código</h2>
<p>Todos sabem da importância que é documentar os códigos, assim como sabem a chatisse que é! Para nos ajudar com isso, seguem alguns plugins:</p>
<ul>
<li><a rel="nofollow" href="http://www.vim.org/scripts/script.php?script_id=1355" target="_blank">PHPdoc</a></li>
<li><a rel="nofollow" href="http://github.com/hotchpotch/perldoc-vim/tree/master" target="_blank">Perl<br />
</a></li>
<li><a rel="nofollow" href="http://www.vim.org/scripts/script.php?script_id=20" target="_blank">Javadoc</a></li>
</ul>
<h2>9. Autocomplete de código</h2>
<p>Maneira simples de autocompletar o código é usando CTRL+X + CTRL+O, mas isso é difícil de assimilar, logo podemos criar uma funçãozinha para ajudar:</p>
<pre>function! CleverTab()
if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
return "\&lt;Tab&gt;"
else
return "\&lt;C-X&gt;\&lt;C-O&gt;"
endfunction
inoremap &lt;Tab&gt; &lt;C-R&gt;=CleverTab()&lt;CR&gt;
set completeopt=menu,preview
</pre>
<p>Ao digitar &#8216;tex&lt;TAB&gt;&#8217; ele vai tentar utilizar o omnicompletition para completar a palavra, que pode ser uma função/variável criada dentro do arquivo ou nativa da linguagem.</p>
<h2>10. Rodando comandos do Shell</h2>
<p>Quantas vezes você já precisou ordenar algo em ordem alfabética? copiar um arquivo inteiro para o arquivo que está digitando? Para quem domina o shell, isso vai ser muito útil. No nosso .gvimrc vamos por o seguinte:</p>
<pre>set shell=/bin/bash</pre>
<p>Feito isso, vamos fazer alguns testes. Abra algum no gvim e cole o seguinte:</p>
<pre>Banana
Maçã
Amora
Pêra
Batata
Melancia</pre>
<p>Agora, vamos à mágica:</p>
<p>Digite o seguinte:</p>
<pre>:%!sort</pre>
<p>Tcharam! O % diz que é o arquivo inteiro; o ! exige que seja executado no shell. sort é comando do shell. O GVim automaticamente pega o conteúdo do arquivo, executa o comando no shell e substitui pelo resultado! Então, para copiar um arquivo no fim do nosso aberto, podemos utilizar o &#8216;cat&#8217;</p>
<pre>:$!cat /meu/arquivo</pre>
<p>Observem que eu utilizei $, ele vai começar a colar na última linha do arquivo. É legal, então, sempre ter certeza que esta linha está em branco, para que não haja perda de dados. Você também pode por numa linha específica.</p>
<pre>:6!cat /meu/arquivo</pre>
<p>Ele vai substituir o texto da linha 6 com o que contiver no arquivo, conservando da linha 1 até a linha 5, e da linha 7 até o fim do arquivo.</p>
<h2>11. Solução para arquivos chatos de backup</h2>
<p>Sabe aqueles arquivos de backup do vim? Que ficam .ext~ ? Você edita algo no projeto e o vim polui o projeto inteiro, quando você vê, já perdeu as contas de quantos arquivos novos foram criados. Ou até mesmo já commitou aqueles arquivos de swap (.swp) do vim sem querer.</p>
<p>Para resolver isso, podemos mudar o diretório onde eles são criados ou até mesmo desabilitá-los, basta acrescentar no .gvimrc:</p>
<pre>set backup
set backupdir=/tmp
set dir=/tmp</pre>
<p>Se você deseja desabilitar, utilize &#8217;set nobackup&#8217;, caso contrário os arquivos de backup irão para o /tmp, e não mais para o diretório do seu projeto! O mesmo acontece com os .swp, especificado pelo &#8217;set dir&#8217;.</p>
<h2>12. Removendo Linhas em Branco</h2>
<p>Para remover todas as linhas em branco do arquivo (vazias ou que contenham somente espaços) podemos utilizar:</p>
<pre>:g/^\s*$/d</pre>
<h2>13. Compilando arquivos e analizando erros</h2>
<p>Para compilar um arquivo, basta especificarmos o compilador. Vamos usar o exemplo do javac.</p>
<pre>:compiler javac</pre>
<p>Para compilar arquivos em java, abra ele no gvim, execute o comando acima e digite:</p>
<pre>:make %</pre>
<p>Ele irá compilar com o javac o arquivo atual e mostrar os erros em tempo de compilação. Por mais louco que pareça, há também como fazer isso com o php, por exemplo. Mas ao invés de compilar o código, ele checa a sintaxe.</p>
<pre>:compiler php
:make %</pre>
<p>Ele irá executar `php -l arquivo.php`, retornando os erros de sintaxes! É bom para testes antes de rodá-lo, evitando erros bobos como o esquecimento de 1 ponto e vírgula, um ponto ao concatenar, etc.</p>
<p>Ah! Caso você desejar, pode modificar o comando do make! Se quiser adicionar mais parâmetros, por exemplo, jogar todos os erros que já teve para um determinado lugar (é legal saber o quanto de erro produzimos, para que, ao programar, tentamos cometer cada vez menos e nunca os mesmos (né? ^__^)):</p>
<pre>au FileType php set makeprg=php\ -l\ %\ &gt;&gt;\ /tmp/errors.log</pre>
<p>assim, ele modificará somente se o arquivo for interpretado como php. Basta dar um :make que ele joga para o arquivo. No final do dia podemos avaliar nossos erros e ver (olha, preciso melhor em tal aspecto).</p>
<h2>14. Mostrando a identação</h2>
<p>Quem nunca se perguntou (o que este } está fechando? é este ou aquele if?). Pois é, bater o olho e de cara descobrir é complicado, ainda mais quando o início (if () {) não está na mesma página, digo, não é visível, é preciso rolar pra vê-lo.</p>
<pre>set list listchars=tab:»·,trail:·,eol:$</pre>
<p>Assim, primeiro habilitamos a exibição deles. Depois substituimos com os valores. Isso fará com que o nossa identação fique visível, e possamos ver (hmm&#8230; esse if tem 3 tabs antes, então vai fechar na } que tiver 3 tabs antes também!). O arquivo ficará mais ou menos assim:</p>
<pre>»····»····»····if (condicao) {$
»····»····»····»····//codigo$
»····»····»····}$</pre>
<p>Assim, o código fica claro. Você se acha no tab e consegue enxergar se há espaços desnecessários no final da linha, pois $ representa o nosso amigo \n.</p>
<h2>15. Autorrecarregando nosso .gvimrc</h2>
<p>Bom, apresento para vocês o autocmd bufwritepost. Ele é executado depois do arquivo ser salvo. Então ao salvar o arquivo ele executa o(s) comando(s) que seguem ali. Acrescentamos, então, ao nosso gvimrc os seguintes comandos:</p>
<pre>autocmd! bufwritepost .gvimrc source %
autocmd! bufwritepost .vimrc source %</pre>
<p>Assim, ao salvar .gvimrc ou .vimrc, ele recarregará as configurações automaticamente! Voltando ali na dica 13, podemos fazer isso:</p>
<pre>autocmd! bufwritepost *.php make %</pre>
<p>Rá! Agora, ao salvar um arquivo .php, ele executa no :make % que manda para /tmp/errors.log! Não é feitiçaria, é tecnologia.</p>
<p>Espero que alguma coisa seja útil para vocês! Fui!</ol>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/48/15-dicas-para-maior-produtividade-usando-o-gvim/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
