<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Jedi Tux</title>
	<atom:link href="http://jeditux.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeditux.wordpress.com</link>
	<description>Para que todos saibam que o Tux é um Mestre Jedi</description>
	<lastBuildDate>Wed, 11 Jan 2012 14:01:02 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jeditux.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Jedi Tux</title>
		<link>http://jeditux.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jeditux.wordpress.com/osd.xml" title="Jedi Tux" />
	<atom:link rel='hub' href='http://jeditux.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Indetação no Vim &#8211; Tabs e Espaços</title>
		<link>http://jeditux.wordpress.com/2012/01/11/indetacao-no-vim-tabs-e-espacos/</link>
		<comments>http://jeditux.wordpress.com/2012/01/11/indetacao-no-vim-tabs-e-espacos/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 13:53:47 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[configuração]]></category>
		<category><![CDATA[indent]]></category>
		<category><![CDATA[indetação]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[tab]]></category>
		<category><![CDATA[tabs]]></category>
		<category><![CDATA[Tabs vs Espaços]]></category>
		<category><![CDATA[tabs vs spaces]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=446</guid>
		<description><![CDATA[====================================== = Indentação no Vim - Tabs e Espaços = ====================================== = Introdução = -------------- Há duas maneiras de indentar um código fonte: 1. com tabs reais, também chamado de hard tabs. 2. com espaços no lugar de tabs (sim, o vim pode ser configurado para substituir uma tabulação por um certo número de espaços). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=446&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre>
======================================
= Indentação no Vim - Tabs e Espaços =
======================================

= Introdução =
--------------

Há duas maneiras de indentar um código fonte:
  1. com tabs reais, também chamado de hard tabs.
  2. com espaços no lugar de tabs (sim, o vim pode ser configurado para
     substituir uma tabulação por um certo número de espaços).

Há vantagens e desvantagens em cada um dos métodos. Há alguns artigos que
discutem o assunto na web, embora parece que mais pessoas preferem Espaços
no lugar de Hard Tabs, mas isso é pura questão de gosto, e cada caso é um
caso.

Basicamente temos as opções:
 1.     'tabstop' - altera a largura da tabulação (Tabs reais).
 2.   'expandtab' - causa espaços serem usados/inseridos no lugar de
                    caracteres Tab.
 2. 'softtabstop' - configura detalhadamente a quantidade de espaço a serem
                    inseridos quando a tecla Tab é pressionada.
 3.  'shiftwidth' - afeta o uso de "&gt;&gt;", "&lt;&lt;&quot;, modo normal, &quot;Ctrl-t&quot; e
                    &quot;Ctrl-d&quot; no Modo Insert, além de ter influência em como
                    indetação automática funciona.

Para iniciar , execute isso no vim:
    :set list
    :set listchars=tab:T_ 

A partir de agora, toda vez que o vim &quot;enxergar&quot; um Tab real, ele vai
mostrar algo como &quot;T_____&quot; no lugar do tab, para que o Tab fique
visualmente percebível.

Pra desabilitar basta fazer:
    :set nolist 

= Indentação com Hard Tabs Apenas =
-----------------------------------

Por padrão, o vim vem configurado com:
  tabstop = 8
  softtabstop = 0
  shiftwidth = 8
  noexpandtab 

Independente da sua configuração, digite esta linha para testar
(simplesmente coloca os valores default):
    :set tabstop=8 softtabstop=0 shiftwidth=8 noexpandtab 

O que acontece então?
 1. Com essa configuração, pressionar a tecla Tab no modo insert insere um
    caractere Tab real, com largura de 8 colunas.
 2. Nesse caso, o  deleta o caractere Tab (deleta 8 colunas), o
    que visualmente parece que vários espaços foram deletados ao mesmo tempo.
 3. No modo Normal, usar &gt;&gt; e &lt;&gt; e &lt;&gt; e &lt;&gt; e &lt;&lt; insere ou deleta *4* espaços. O mesmo
    occorre ao se pressionar Ctrl-t e Ctrl-d no modo Insert.

= Espaços = Caso 4 =
--------------------

Mas (note o NOexpandtab):
    :set tabstop=8 softtabstop=4 shiftwidth=4 noexpandtab 

Agora, &#039;noexpandtab&#039; não está habilitado, e portanto, pressionar
insere um Tab real (e não espaços no lugar do Tab). Se pressionar Tab, e
'tab=8', um Tab terá largura de 8 colunas.

Como você sabe, "&gt;&gt;", "&lt;&gt;" duas vezes.
Você vai notar que ele se transforma em um Tab real. Isso porque "tabstop=8"
e "shiftwidth=4", etão, 4 + 4 = 8. Se "tabstop=12", por exemplo, então
pressionar "&gt;&gt;" 3 vezes se gera uma Tab real, porque 4 + 4 + 4 = 12.  

Isso tudo acontece porque 'softtabstop' tem precedência sobre 'tabstop'.
Então, quando pressionamos, por exemplo, "Ctrl-t" uma vez, ele insere 4
espaços, mas quando pressionamos "Ctrl-t" uma segunda vez, ele diz "Hmm,
isso está igual a "largura" do 'tabstop', e então os 8 espaços são
deletados e um Tab real é inserido. Quando usamos , "Ctrl-d" ou
"&lt;&lt;&quot;, o processo inverso ocorre.

= Misturando - Caso 5 =
-----------------------

Vamos deixar &#039;tabstop&#039; igual 4, com &#039;expandtab&#039; desabilitado:
    :set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab 

 1. Agora, como &#039;tabstop&#039; está igual &#039;shiftwidth&#039; e &#039;expandtab&#039;, quando
    , "&gt;&gt;" ou "Ctrl-t" for pressionado, uma Tab real será inserida
    pois o Vim notou que as configurações estão iguais. Quando as
    configurações estão iguais.

NOTE que tabs reais e espaços antigos no arquivo continuam sendo o que eram.
O que pode mudar é o tamanho das Tabs reais, mas não o fato de serem Tabs
reais ou não. O que já era Tab real continua sendo Tab real, e o que era
(grupos) de espaços continuam sendo (grupos) de espaços (grupos de espaços
que por venturam tenham sido inseridos em lugar de Tabs reais).

= Possíveis Escolhas =
======================

= Hard Tabs (Tabs Reais) =
--------------------------
Quem prefere trabalhar com Tabs reais, uma boa escolha é deixar 'tabstop'
igual 'shiftwidth', pois eles trabalharão de maneira consistente e
homogênea. Espaços não serão usados.

= Espaços em vez de Tabs Reais =
--------------------------------
Deixar 'softtabstop' igual 'shiftwidth' assegura que "&gt;&gt;", "&lt;&lt;&quot;,
&quot;Ctrl-t&quot; e &quot;Ctrl-d&quot; adicionem e removam Tabs (não reais, pois agora é
substituída por espaços) com o mesmo comportamento de se adicionar e deletar
tabs pressionando a tecla  e . Ou seja, todos eles vão
adicionar ou remover o mesmo número de espaços - vão funcionar de forma
homogênea. Pode-se também, nesse caso (e alguns acham aconselhável), deixar
'tabstop' com o mesmo valor de 'shiftwidth' e 'softtabstop'.

-------------------------------------------------------------------------------

= Notas Finais =
---------------------

Saiba que o Vim permite configurar tudo isso de acordo com o 'filetype'. Por
exemplo, é possível configurar que arquivos "html" utilizem 2 espaços no
lugar do Tab, um arquivo em "C" utilize 4 espaços no lugar de um Tab, e
ainda, quando um arquivo "bash" for editado, um Tab real de 6 colunas seja
usado. Ou seja, quando o arquivo é aberto, o vim usa as configurações
predefinidas automaticamente.

Alguns exemplos.

Vamos criar os diretórios necessários:
    mkdir --parents ~/.vim/after/ftplugin/ 

Para HTML:
Criar o um arquivo chamado "html.vim" dentro do último diretório criado:
    vim ~/.vim/after/ftplugin/html.vim 

E coloque o seguinte conteúdo dentro do arquivo:
    set softtabstop=2 expandtab shiftwidth=2 

Para CSS:
Criar o arquivo css.vim, no mesmo diretório que do exemplo anterior:
    vim ~/.vim/after/ftplugin/css.vim 

E cole o seguinte conteúdo:
    set softtabstop=4 expandtab shiftwidth=4 

Para "bash", com Hard Tabs:
    vim ~/.vim/after/ftplugin/bash.vim
E cole:
    set tabstop=6 softtabstop=6 shiftwidth=6 noexpandtab 

= Dica final =
--------------

Se você optar por usar Espaços no lugar de tabs, há uma maneira de inserir
Tabs reais sem ter que mudar temporariamente a configuração. Isto é
conseguido inserindo-se caracteres não imprimíveis literalmente. 

No vim, isso é muito fácil. Basta pressionar "Ctrl-v" no modo Inserte, e
então pressionar a tecla Tab em seguida. Passo-a-passo:

            vim --&gt; abre o vim no terminal (poderia ser o gvim).
              i --&gt; entra no modo insert na posição onde está o cursor.
         Ctrl-v --&gt; pressionar a combinação "ctrl-v". Vai aparecer um
                    caractere parecido com um "^". Neste momento, o Vim está
                    esperando você digitar o caractere que termina a
                    sequência, no nosso exemplo, um .
           --&gt; pressione Tab.
  "hello world" --&gt; escreva "hello world" por que esse é um encantamento que
                    garante que você aprenda o conteúdo. Sempre foi assim em
                    todas as linguagens, e essa é a razão. São palavras
                    mágicas.

Como mesmo exemplo você poderia inserir um caractere  ou
literalmente no texto.
</pre>
<p>Aqui está o arquivo que fiz no Vim, mas convertido para html. Tive que renomear para .pdf para fazer o upload. Depois de baixar, troque a extensão para .html novamente e abra no seu navegador favorito. Está bem colorido, facilitando a leitura.<br />
<a href='http://jeditux.files.wordpress.com/2012/01/indentando_cc3b3digo_fonte_no_vim.pdf'>Indentando_Código_Fonte_no_VIM</a></p>
<pre>
Referências:
------------

  No Vim:
    :help 'softtabstop'
    :help 'tabstop'
    :help 'shiftwidth'
    :help 'expandtab'

http://vimcasts.org/

http://vim.wikia.com/wiki/Indenting_source_code
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/446/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/446/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/446/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/446/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/446/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/446/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/446/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=446&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2012/01/11/indetacao-no-vim-tabs-e-espacos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>acidentes comando rm &#8211; trash-cli</title>
		<link>http://jeditux.wordpress.com/2012/01/07/acidentes-comando-rm-trash-cli/</link>
		<comments>http://jeditux.wordpress.com/2012/01/07/acidentes-comando-rm-trash-cli/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 21:27:50 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=437</guid>
		<description><![CDATA[Fiz esse arquivo no vim. Quem quiser pode baixar a versão que converti com o :TOhtml. rm_accidents.smr NOTA: O wordpress não me permitiu fazer upload do arquivo html, nem zip, então eu renomeei ele para .pdf para poder fazer o upload. Baixe o arquivo e renomeie a extensão para .html novamente antes de tentar abrir [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=437&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Fiz esse arquivo no vim. Quem quiser pode baixar a versão que converti com o :TOhtml.<br />
<a href='http://jeditux.files.wordpress.com/2012/01/rm_accidents-smr.pdf'>rm_accidents.smr</a><br />
NOTA: O wordpress não me permitiu fazer upload do arquivo html, nem zip, então eu renomeei ele para .pdf para poder fazer o upload. Baixe o arquivo e renomeie a extensão para .html novamente antes de tentar abrir o arquivo.</p>
<pre>
=============================
= Rm - Previnindo Acidentes =
=============================

= Tópicos =
-----------
  - Comando rm não tem trash
  - Solução nº 1 - interactive mode
  - Solução nº 2 - um alias para o interactive mode
  - Solução nº 3 - trash-cli - lixeira na linha de comando

== Comando rm não tem trash ==
------------------------------

Cuidado!!! No terminal, na linha de comando, quando se digita
    rm segredo_mundial.txt
o segredo_mundial.txt já era. Não tem mais o que fazer.

===============================================================================

== Solução nº 1 - interactive mode ==
-------------------------------------

Sempre use a opção "-i", ou "--interactive" com o comando "rm" e torne isso
um hábito. Essa opção se prontifica a nos perguntar se realmente desejamos
deletar o arquivo.
    rm -i segredo_mundial.txt
    rm --interactive segredo_mundial.txt

CUIDADO com a flag "-f" ou "--force". Com ela, as opções "-" ou
"--interactive" se tornam inúteis, ou seja, eles são completamente
igonorados. 

Há um truque que pode ser aplicado. Digamos que temos um diretório
contendo arquivos muito importantes. Podemos criar um arquivo chamado "-i"
dentro desse diretório. Como o arquivo contém "-" no nome, não podemos
simplesmente fazer "touch -i", pois o comando "touch" vai pensar que estamos
passando a opção "-i" como argumento, e o comando "touch" nem tem uma opção
chamada "-i". As duas possíveis maneiras de criar o tal arquivo estão
exemplificadas abaixo:
    touch -- -i
ou
    touch ./-i

A partir de agora, se você fizer
    rm -Rf *
o shell vai expandir o "-i" na linha de comando, de tal forma que seu
comando na verdade se transforma em
    rm -Rf -i

Note que isso só funciona se você usar o "glob" (*). Se tentar deletar um
arquivo por vez, o arquivo "-i" não vai te ajudar. Vamos aprender outro
truque quando falarmos do programa "trash-cli".

Se quiser remover o arquivo "-i", não basta fazer rm -i porque o rm tem de
fato a opção "-i". Então "rm -i" é o comando "rm", seguido da opção "-i",
mas ainda falta dizer ao "rm" qual arquivo ou arquivos deletar, por que ele
não sabe que "-i" é um arquivo e não uma opção. Usamos uma técnica similar a
que usamos para criar o arquivo. As duas soluções possíveis são:
    rm -- -i
ou
    rm ./-i

===============================================================================
== Solução nº 2 - um alias para o interactive mode {{{
------------------------------------------------------

A solução número dois consiste em colocar o que apprendemos acima em um
"alias" (um "apelido", em Inglês). Vamos criar um alias que faz com que o
comando "rm" sempre seja executado com "rm --interactive".
    alias rm='rm --interactive'

Digite o comando acima em um terminal e tente remover um arquivo (não teste
com nada que seja importante). Para testar, rode apenas "rm arquivo.txt" e
você vai notar que ele pergunta se temos mesmo certeza de que queremos
deletar o arquivo em questão.

Se você gostou da ideia coloque o comando que cria o alias no ~/.bashrc.
Para que o alias entre em vigor, feche e abra o terminal novamente ou rode
o comando:
    source ~/.bashrc

A partir de agora, toda vez que você digitar "rm", o bash interpreta o alias
e na verdade vai executar "rm --interactive". 

===============================================================================
== Solução nº 3 - trash-cli - lixeira na linha de comando ==
------------------------------------------------------------

Instale o programa "trash-cli". Enquanto escrevo este documento, "trash-cli"
está disponível pelo AUR para o Arch Linux, mas pesquisas pela web fazem
acreditar de que já está nos repositórios oficiais de muitas distribuições.

O programa "trash-cli" vem com três comandos principais:
    1. trash-empty - esvazia a lixeira;
    2. trash-list - lista os arquivos da lixeira;
    3. trash-put - manda arquivos para a lixeira.

Para mais informações leia o help de cada uma das variações do trash-cli.

    trash-empty --help
    trash-list --help
    trash-put --help

O problema agora é criar o hábito de usar o "trash-cli" em vez do bom e
velho "rm". Sim, porque nós instalamos o programa, mas por força do hábito é
bem provável que continuemos usando o "rm" sem nem notar.

Vamos então usar um truque para, digamos, desabilitar o comando "rm". O
truque consiste em, novamente, criar um alias. Mas antes disso vamos falar
de comentários no bash (com poucos ajustes todas essas dicas funcionam em
ourtos SHELLs).

Um comentário no bash inicia com #. Rode o seguinte comando direto do
terminal:
    # echo 'Hello, world.'
Essa linha não vai executar nada. É um comentário apenas.
Tente esta outra:
    echo 'Hello, ' # world'.
O echo acima só vai mostrar "Hello, ". O resto da linha é comentário.

Então, a ideia é criar um alias que comente o "rm". É fácil:

    alias rm='# rm'

Pode colocar o alias no ~/.bashrc e rodar "source ~/.bashrc". A partir de
agora, toda vez que você digitar "rm", ele simplesmente nem sequer será
executado, pois agora ele foi "comentado". No então, há alguns pontos a
serem considerados:

   1. Se você executar outro SHELL a partir do shell que contém o alias, o
      outro shell não vai herdar o alias, portanto, "rm" desse outro shell
      vai funcionar normalmente.

   2. IMPORTANTE: você executou essas operações no terminal como usuário, e
      configurou o ~/.bashrc em nível de usuário. A conta do ROOT continua
      com as configurações default. Como o ROOT é um usuário ainda mais
      crítico no sistema, considere colocar essas configurações no
      /root/.bashrc.

================================================================================
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/437/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=437&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2012/01/07/acidentes-comando-rm-trash-cli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Bash &#8211; comandos, argumentos e a importância das apas</title>
		<link>http://jeditux.wordpress.com/2012/01/04/bash-comandos-argumentos-e-a-importancia-das-apas/</link>
		<comments>http://jeditux.wordpress.com/2012/01/04/bash-comandos-argumentos-e-a-importancia-das-apas/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 10:52:00 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[5584]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[shell scripting]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=429</guid>
		<description><![CDATA[Intro → Interactive mode: modo de operação onde um prompt de comando espera que você digite um comando por vez. → Script: um arquivo que contém uma sequência de comandos para serem executados um após o outro. Ao iniciar o Bash, bash &#8211;posix ou set -o posix se o Bash já está em execução coloca [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=429&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Intro</h1>
<p>→ <span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><strong>Interactive mode:</strong> modo de operação onde um <em>prompt </em>de comando espera que você digite um comando por vez.</span></span></p>
<p>→ <span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><strong>Script</strong>: um arquivo que contém uma sequência de comandos para serem executados um após o outro.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Ao iniciar o Bash, <span style="color:#ff00ff;"><span style="font-size:x-small;">bash &#8211;posix</span></span> ou <span style="color:#ff00ff;"><span style="font-size:x-small;">set -o posix</span></span> se o Bash já está em execução coloca o Bash em modo POSIX.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">No Arch Linux (e quase todas as outras distribuições), <span style="color:#ff00ff;"><span style="font-size:x-small;">/bin/sh</span></span> é um symlink para <span style="color:#ff00ff;"><span style="font-size:x-small;">/bin/bash</span></span>. Se o Bash é invocado com o nome &#8220;sh&#8221;, ele tenta imitar o comportamento de versões históricas do sh o melhor possível, enquanto conformando com o padrão POSIX. Neste modo, o Bash lê os arquivos de inicialização e então entra em modo de compatibilidade com o padrão POSIX.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;"><strong>/etc/profile</strong></span></span> é lido por todos todo Bourne-compatible shell no login. Ele configura o ambiente e carrega configurações específicas a certas applicações (/etc/profile.d/*.sh).</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;"><strong>.profile</strong></span></span> é lido pelo Bash quando um shell com login interativo é iniciado.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;"><strong>.bashrc</strong></span></span> é lido pelo Bash quando um interativo <em>non-login</em> shell é iniciado, por exemplo, quando alguém abre um console virtual (x terminal) a partir de um Window Manager ou Desktop Environmen (Openbox, LXDE, Gnome, KDE, etc.). Este arquivo é útil para configurar o ambiente de shell específico do usuário.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Leia mais: <a href="https://wiki.archlinux.org/index.php/Bash">https://wiki.archlinux.org/index.php/Bash</a></span></span></p>
<h1>Comandos e Argumentos</h1>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">O Bash lê linhas do terminal (usuário digitando comandos) ou de arquivos. Cada linha é uma comando – uma tarefa para ser executada.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">IMPRTANTE: O Bash divide cada linha em <strong>palavras</strong><em><strong>. </strong></em>Palavras são separadas por espaços.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">A primeira palavra em uma linha/comando é o nome do comando. Todas as outras (palavras) são os argumentos que são passados para o comando especificado.</span></span></p>
<pre> <span style="color:#ff00ff;"><span style="font-size:x-small;"><span style="color:#7a0874;"><strong>echo</strong></span><span style="color:#ff00ff;"><span style="font-size:x-small;"> This is a test</span></span></span></span><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;"><strong> echo</strong></span></span> → é o nome do comando;</span></span></pre>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;">this</span></span> → é um argumento.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;">is</span></span> → outro argumento.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;">a</span></span> → mais outro argumento.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;">test</span></span> → ainda mais um argumento – e o último, no exemplo.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">MAS:</span></span></p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"><span style="color:#7a0874;"><strong>echo</strong></span><span style="color:#ff0000;">"This is a test"</span></span></span></pre>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;"><strong>echo</strong></span></span> → é o nome do comando.</span></span></p>
<p><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;">&#8220;This is a test&#8221;</span></span> → é um <strong>único</strong> argumento.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">As aspas não são parte do argumento. O Bash as remove antes de lidar com o argumento.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">CUIDADO: Digamos que temos dois arquivos em um diretório. Os arquivos são:</span></span></p>
<p lang="zxx"><span style="color:#4c1900;"><span style="font-size:x-small;">&#8220;The secret voice in your head.ogg&#8221;</span></span></p>
<p lang="zxx"><span style="color:#4c1900;"><span style="font-size:x-small;">&#8220;secret&#8221;</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">&#8220;secret&#8221; contém um segredo muito importante que pode salvar o mundo.</span></span></p>
<p lang="pt-BR"><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">E agora você faz:</span></span></p>
<p lang="zxx"> <span style="color:#ff00ff;"><span style="font-size:x-small;"><span style="color:#c20cb9;"><strong>rm</strong></span> The secret voice <span style="color:#000000;"><span style="color:#ff00ff;">in</span></span> your <span style="color:#c20cb9;"><span style="color:#ff00ff;">head</span></span>.ogg</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><strong>O Bash vai pensar que você passou seis argumentos</strong>, e um deles é &#8220;secret&#8221; – seu venerado arquivo. Você recebeu erros porque o comando rm não conseguiu remover/encontrar os arquivos &#8220;The&#8221;, &#8220;voice&#8221;, &#8220;in&#8221;, &#8220;your&#8221;, e &#8220;head.ogg&#8221; (já que eles não são arquivos por si próprios), exceto &#8220;secret&#8221;, é que sim um arquivo. É por isso quo Bash reclamou dos outros mas não reclamou de &#8220;secret&#8221;. Agora o pior: <strong>o arquivo chamado &#8220;secret&#8221; já era. Para sempre se foi (não tem lixeira na linha de comando)</strong>, e a música (que é o que queríamos deletar) ainda está lá. A maneira correta é usar apas:</span></span></p>
<p lang="zxx"> <span style="color:#ff00ff;"><span style="font-size:x-small;"><span style="color:#c20cb9;"><strong>rm</strong></span> <span style="color:#ff0000;">&#8220;The secret voice in you head.ogg&#8221;</span></span></span></p>
<p lang="pt-BR"><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Assim, você está <strong>agrupando todas as palavras em um único argumento</strong>. Descanse em paz. O &#8220;segredo&#8221; está seguro agora.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Veja este próximo caso.</span></span></p>
<p> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><span style="color:#ff00ff;"><span style="font-size:x-small;">[</span></span> é um comando, similar ao comando <span style="color:#ff00ff;"><span style="font-size:x-small;">test</span></span>. Se testarmos alguma coisa assim:</span></span></p>
<p lang="pt-BR"> <span style="color:#ff00ff;"><span style="font-size:x-small;">[-f file.txt]</span></span></p>
<p> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">&#8230;está errado. <span style="color:#ff00ff;"><span style="font-size:x-small;">-f</span></span> não deve estar &#8220;colado&#8221; ao <span style="color:#ff00ff;"><span style="font-size:x-small;">[</span></span>. Devemos separá-los. <span style="color:#ff00ff;"><span style="font-size:x-small;">[</span></span> é o nome do comando, portanto uma palavra. <span style="color:#ff00ff;"><span style="font-size:x-small;">-f</span></span> é a segunda palavra (um argumento), file é a terceira palavra (outro artumento) e o <span style="color:#ff00ff;"><span style="font-size:x-small;">]</span></span> é o ultimo argumento – que é mandatório toda vez que usamos <span style="color:#ff00ff;"><span style="font-size:x-small;">[</span></span>. Esta é a maneira correta (note os espaços):</span></span></p>
<p lang="zxx"> <span style="color:#ff00ff;"><span style="font-size:x-small;"><span style="color:#000000;"><strong>[</strong></span> <span style="color:#660033;">-f</span> <span style="color:#c20cb9;"><strong>file.txt</strong></span> <span style="color:#000000;"><strong>]</strong></span></span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">A propósito, uma maneira mais aconselhável ainda é colocar o nome do arquivo entre aspas (você já viu o que pode acontecer se um nome de arquivo contém espaços, e não o protejemos com aspas).</span></span></p>
<p lang="zxx"> <span style="color:#ff00ff;"><span style="font-size:x-small;"><span style="color:#000000;"><strong>[</strong></span> <span style="color:#660033;">-f</span> <span style="color:#ff0000;">"my file"</span> <span style="color:#000000;"><strong>]</strong></span></span></span></p>
<p lang="pt-BR"><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">É boa prática sempre usar apas.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Uma dica rápida: use o <span style="color:#663300;"><span style="font-size:x-small;">perl-rename</span></span> para mudar todos os espaços nos nomes dos arquivos por <em>underscores</em>:</span></span></p>
<p lang="zxx"> <span style="color:#ff00ff;"><span style="font-size:x-small;">perl-rename <span style="color:#ff0000;">&#8216;s/ /_/&#8217;</span> .<span style="color:#000000;"><strong>/*</strong></span>.txt</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">&#8230;para arquivos .txt (mude a extensão para outros tipos de arquivos), ou</span></span></p>
<p lang="zxx"> <span style="color:#ff00ff;"><span style="font-size:x-small;">perl-rename <span style="color:#ff0000;">&#8216;s/ /_/&#8217;</span> .<span style="color:#000000;"><strong>/*</strong></span> </span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">&#8230;para todos os arquivos do diretório.</span></span></p>
<p lang="pt-BR"> <span style="font-family:Times New Roman,serif;"><span style="font-size:small;">NOTA: No Arch Linux, no nome é <span style="color:#663300;"><span style="font-size:x-small;">perl-rename</span></span>. <span style="color:#663300;"><span style="font-size:x-small;">prename</span></span> em outras distros – não confunda com rename, que é um comando bem simplificado e não faz o que o exemplo mostra. (Se não me engano já vi uma distro em que <span style="color:#663300;"><span style="font-size:x-small;">rename</span></span> era na verdade o um symlink para o perl-rename).</span></span></p>
<p lang="pt-BR">Este conteúdo é basicamente um tradução livre do (excelente) site:</p>
<p lang="pt-BR">http://mywiki.wooledge.org/BashGuide</p>
<p lang="pt-BR">Este conteúdo não é, de forma alguma, mérito meu, mas sim dos proprietários do site acima mencionado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/429/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=429&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2012/01/04/bash-comandos-argumentos-e-a-importancia-das-apas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Simular margem no vim para ler o :help</title>
		<link>http://jeditux.wordpress.com/2012/01/01/simular-margem-no-vim-para-ler-o-help/</link>
		<comments>http://jeditux.wordpress.com/2012/01/01/simular-margem-no-vim-para-ler-o-help/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 20:56:30 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=415</guid>
		<description><![CDATA[Simular margem no vim para ler o :help Uma coisa que me incomoda quando estou lendo o :help no vim é que o texto fica &#8220;grudado&#8221; na borda esquerda da janela do vim (ou gvim). Então, o que costumo fazer é habilitar os números de linha com :set number. para ter algo no lado esquerdo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=415&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Simular margem no vim para ler o :help</h2>
<p>Uma coisa que me incomoda quando estou lendo o :help no vim é que o texto fica &#8220;grudado&#8221; na borda esquerda da janela do vim (ou gvim). Então, o que costumo fazer é habilitar os números de linha com <span style="color:#ff00ff;"><span style="font-size:x-small;">:set number</span></span>. para ter algo no lado esquerdo da janela funcionando como uma espécie de margem.</p>
<p>Tem dois detalhes que me incomodam. Um é que não adiante colocar <span style="color:#ff00ff;"><span style="font-size:x-small;">set number</span></span> no <span style="color:#333333;"><span style="font-size:x-small;">vimrc</span></span> porque <span style="color:#333333;"><span style="font-size:x-small;">help</span></span> é um <span style="color:#333333;"><span style="font-size:x-small;">filetype</span></span> no vim, então, as configurações do <span style="color:#333333;"><span style="font-size:x-small;">filetype</span></span> <span style="color:#333333;"><span style="font-size:x-small;">help</span></span> (que usa <span style="color:#ff00ff;"><span style="font-size:x-small;">set nonumber</span></span>) sobrescreve o <span style="color:#ff00ff;"><span style="font-size:x-small;">set number</span></span> do <span style="color:#333333;"><span style="font-size:x-small;">vimrc</span></span>. Outra coisa é que ter números de linhas para ler o help pode não agradar muito ou fazer muito sentido. Fortunadamente, há uma maneira de simular uma margem, sem que fique aparecendo os números.</p>
<h3>Entendendo o processo</h3>
<p>Quando usamos a opção <span style="color:#333333;"><span style="font-size:x-small;">set number</span></span>, o vim usa um espaço ao lado esquerdo da janela para mostrar esses números, e também nos fornece os grupos de cor chamados <span style="color:#ff00ff;"><span style="font-size:x-small;">LineNr</span></span> que é justamente para definir a cor que aparece naquela parte onde os números são mostrados, tanto o background como o foreground.</p>
<p>Pois bem, se configurarmos <span style="color:#ff00ff;"><span style="font-size:x-small;">LineNr</span></span> para ter a mesma cor de background que do resto do vim não veremos diferença de cor entre o fundo do texto normal e a cor da região usada para mostrar o números das linhas. Ainda mais, se configurarmos a cor que <span style="color:#ff00ff;"><span style="font-size:x-small;">LineNr</span></span> usa para mostrar os números propriamente ditos para a mesma cor do background, não vamos ser capazes de ler/ver número algum, pois a cor do texto será exatamente igual a cor de fundo. Os números ainda estão lá, mas não dá pra notar.</p>
<p>O que vamos fazer então é criar (se já não existir) o diretório <span style="color:#333333;"><span style="font-size:x-small;">~/.vim/after/ftplugin</span></span>. O comando abaixo se encarrega disso, e se os diretórios já existem, ele simplesmente não faz nada:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">mkdir --parents ~/.vim/after/ftplugin</span></span></pre>
<p>Precisamos criar também, (se já não existir) o arquivo help.vim dentro de <span style="color:#333333;"><span style="font-size:x-small;">~/.vim/after/ftplugin/</span></span>:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">vim <span style="color:#ff00ff;"><span style="font-size:x-small;">~/.vim/after/ftplugin/help.vim</span></span></span></span></pre>
<p>Agora, vamos descobrir quais as cores que o nosso colorscheme está usando para o background. Os grupos de cores para isso são <span style="color:#ff00ff;"><span style="font-size:x-small;">ctermbg</span></span> (background no terminal) e <span style="color:#ff00ff;"><span style="font-size:x-small;">guibg</span></span> (background no gvim). Para descobrir as cores configuradas para os grupos mencionados, execute os seguinte comando:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">:highlight Normal</span></span></pre>
<p>Isso vai mostrar as cores configuradas para <span style="color:#ff00ff;"><span style="font-size:x-small;">ctermfg</span></span>, <span style="color:#ff00ff;"><span style="font-size:x-small;">ctermbg</span></span>, <span style="color:#ff00ff;"><span style="font-size:x-small;">guifg</span></span>, entre outras coisas.</p>
<p>Para ter certeza da <strong>cor que o gvim usa</strong> como background (há fatores que podem fazer com que o vim no terminal use cor x, e o gvim use cor y para determinado grupo) é mais seguiro abrir o gvim e rodar o mesmo comando para ver o que ele mostra sobre si próprio para <span style="color:#333333;"><span style="font-size:x-small;">guifg</span></span> e <span style="color:#333333;"><span style="font-size:x-small;">guibg</span></span>.</p>
<p><span style="color:#ff0000;"><strong>NOTE</strong></span> que o comando é digitado no <strong>modo de comando do vim</strong>. Entramos no modo de comando quando, estando no modo normal pressionamos <span style="color:#ff00ff;"><span style="font-size:x-small;"><strong>:</strong></span></span> (chegamos no modo normal pressionando <span style="color:#333333;"><span style="font-size:x-small;">&lt;Esc&gt;</span></span> ou <span style="color:#333333;"><span style="font-size:x-small;">CTRL-[</span></span>).</p>
<p>Finalmente, no <span style="color:#333333;"><span style="font-size:x-small;">~/.vim/after/ftplugin/help.vim</span></span> colocamos o configuramos os backgrounds e foregournds para o vim e gvim com os valores das cores conforme foram mostrados com o comando anterior.</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">set number</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">highlight LineNr ctermfg=235 ctermbg=235 guifg=#dfd6c1 guibg=#242424</span></span></pre>
<p>Veja, a cor do <span style="color:#333333;"><span style="font-size:x-small;">ctermfg</span></span>, <span style="color:#333333;"><span style="font-size:x-small;">ctermbg</span></span>, <span style="color:#333333;"><span style="font-size:x-small;">guifg</span></span> e <span style="color:#333333;"><span style="font-size:x-small;">guibg</span></span> são iguais (fg = FackGround, bg = BackGround). E lembre-se que essa cor é igual a cor do background da janela normal do vim. Isso cria a impressão que há uma margem.</p>
<p>De agora em diante, toda vez que você abrir um <span style="color:#333333;"><span style="font-size:x-small;">:help</span></span> no vim, terma uma &#8220;margem&#8221; no lado esquerdo da janela. Pra mim pelo menos, parece tornar a leitura mais confortável.</p>
<h3>Colocando em uma função (opcional)</h3>
<p>Podemos também deixar a configuração padrão do vim ficar como é quando abrimos um <span style="color:#333333;"><span style="font-size:x-small;">:help</span></span>, e colocar o código que criamos em uma função, e criar uma outra função que desabilita a margem.</p>
<p>A função que habilita:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">function! CriaMargem()</span></span>
 <span style="color:#ff00ff;"><span style="font-size:x-small;">set number</span></span>
<span style="color:#ff00ff;"> <span style="font-size:x-small;">highlight LineNr ctermfg=235 ctermbg=235 guifg=gray16 guibg=gray16</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">endfunction</span></span></pre>
<p>Para criar a função que desabilita a margem, vamos descobrir a as cores que são definidas para LineNr por padrão. Certifique-se de que não tenha chamado a função acima e não tenha aberto um :help usando o nosso truque, senão o comando abaixo não vai mostrar as cores originais. Em todo caso, rode o comando (novamente, no modo de comando):</p>
<p><span style="color:#ff00ff;">:hightlight Normal</span></p>
<p>E coloque as cores que aparecerem aí na função que desabilita a margem (volta as cores padrão para que possamos ver os números):</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">function! MargemOff()</span></span>
<span style="color:#ff00ff;"> <span style="font-size:x-small;">highlight LineNr ctermfg=180 ctermbg=242 guifg=#cdaa7d guibg=bg</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">endfunction</span></span></pre>
<p>Essas funções também vão dentro do help.vim que criamos. Chame as funções assim no vim:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">:call CriaMargem()</span></span></pre>
<p>e</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">:call MargemOff()</span></span></pre>
<p>Pode usar <span style="color:#333333;"><span style="font-size:x-small;">&lt;Tab&gt;</span></span> para autocompletar.</p>
<p>Note que colocando essas funções no <span style="color:#333333;"><span style="font-size:x-small;">~/.vim/after/ftplugin/help.vim</span></span>, elas só estarão disponíveis quando você estiver lendo um <span style="color:#333333;"><span style="font-size:x-small;">:help</span></span> no vim. Portanto, não adianta esta editando um html, C, ou perl e querer chamar essas funções. Se quiser que elas fiquem disponíveis para outros filetypes, coloque-as no <span style="color:#333333;"><span style="font-size:x-small;">~/.vimrc</span></span>.</p>
<p>Supondo que deixamos elas no help.vim, vamos deixar CriaMargem() habilitada por padrão. Para tal, basta chamar a função de dentro do próprio help.vim. Aqui vai o exemplo completo:</p>
<pre><span style="color:#666699;"><span style="font-size:x-small;">" Habilita a simulação de margem.</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">function! CriaMargem()</span></span>
<span style="color:#ff00ff;"> <span style="font-size:x-small;">set number</span></span>
<span style="color:#ff00ff;"> <span style="font-size:x-small;">highlight LineNr ctermfg=235 ctermbg=235 guifg=gray16 guibg=gray16</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">endfunction</span></span>
<span style="color:#666699;"><span style="font-size:x-small;">" Mostra set mumber normalmente.</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">function! MargemOff()</span></span>
<span style="color:#ff00ff;"> <span style="font-size:x-small;">highlight LineNr ctermfg=180 ctermbg=242 guifg=#cdaa7d guibg=bg</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;">endfunction</span></span></pre>
<p lang="zxx"><span style="color:#666699;"><span style="font-size:x-small;">&#8221; Vamos deixar a função habilitada por padrão.</span></span></p>
<p lang="zxx"><span style="color:#ff00ff;"><span style="font-size:x-small;">autocmd BufEnter * call CriaMargem()</span></span></p>
<p>Com certeza deve ter como colocar tudo em uma única função, tornando o código mais profissional, mas no momento em que escrevo, é o que deu pra fazer sem perder muito tempo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/415/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=415&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2012/01/01/simular-margem-no-vim-para-ler-o-help/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Expressões regulares no Vim  &#8211; Update 1</title>
		<link>http://jeditux.wordpress.com/2011/12/31/expressoes-regulares-no-vim/</link>
		<comments>http://jeditux.wordpress.com/2011/12/31/expressoes-regulares-no-vim/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 12:24:55 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Vim]]></category>
		<category><![CDATA[expressões regulares]]></category>
		<category><![CDATA[gvim]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=406</guid>
		<description><![CDATA[Expressões Regulares no Vim Boa parte do que está aqui é uma adapatação do :help usr_27.txt (arquivo de ajuda integrada do Vim). Básico Início e fim de linha  :help 03.9 (Simple search patterns) Use as opções :set incsearch e :set hlsearch para praticar. Para &#8220;resetar as cores&#8221;, :nohlsearch. Crie um arquivo com pedaços de texto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=406&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1></h1>
<h1>Expressões Regulares no Vim</h1>
<p align="JUSTIFY">Boa parte do que está aqui é uma adapatação do :help usr_27.txt (arquivo de ajuda integrada do Vim).</p>
<h2><a name="__RefHeading__1539_968202224"></a>Básico</h2>
<h3><a name="__RefHeading__1541_968202224"></a>Início e fim de linha</h3>
<p align="JUSTIFY"> <span style="color:#4c4c4c;"><span style="font-family:Consolas,sans-serif;"><span style="font-size:x-small;"><span style="color:#333333;"><span style="font-size:x-small;">:help 03.9 (Simple search patterns)</span></span></span></span></span></p>
<p><span style="color:#333333;"><span style="font-size:x-small;"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;">Use as opções </span></span></span></span><span style="color:#333333;"><span style="font-size:x-small;">:set incsearch</span></span><span style="color:#333333;"><span style="font-size:x-small;"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"> e </span></span></span></span><span style="color:#333333;"><span style="font-size:x-small;">:set hlsearch</span></span><span style="color:#333333;"><span style="font-size:x-small;"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"> para praticar. Para &#8220;resetar as cores&#8221;, </span></span></span></span><span style="color:#333333;"><span style="font-size:x-small;">:nohlsearch</span></span><span style="color:#333333;"><span style="font-size:x-small;"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;">. Crie um arquivo com pedaços de texto que torne possível praticar as dicas aqui apresentadas.</span></span></span></span></p>
<p>O caractere ^ faz correspondência ao início da linha. O caractere $ corresponde ao fim da linha.</p>
<p>Econtra &#8220;teste&#8221; somente se estiver no final da linha:</p>
<pre><span style="color:#ff00ff;"> /teste$</span></pre>
<p>Encontra teste somente se estiver no início da linha;</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /^teste</span></span></pre>
<p>Encontra &#8220;teste&#8221; somente se ele for a única coisa da linha. Não pode haver espaços nem antes e nem depois de &#8220;teste&#8221;:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /^teste$</span></span></pre>
<h3><a name="__RefHeading__1543_968202224"></a>Qualquer caractere uma vez</h3>
<p>O <span style="font-size:small;"><strong>. </strong></span>(ponto) corresponde a qualquer caractere – uma vez.</p>
<p>Corresponde a &#8220;abc&#8221;, &#8220;azc&#8221;, &#8220;aYz&#8221;, &#8220;a b&#8221;, &#8220;a-b&#8221;, etc:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /a.b</span></span></pre>
<h3><a name="__RefHeading__1545_968202224"></a>Escapar caracteres especiais</h3>
<p>Se queremos encontrar literalmente um ponto, devemos escapar o ponto, pois no vim ele é um caractere especial.</p>
<p>Se fizer somente</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /.</span></span></pre>
<p>vai corresponder a todos os caracteres, até mesmo espaços em branco. Para encontrar somente o ponto literalmente:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">    /\.</span></span></pre>
<p>Escapando o <span style="color:#ff00ff;"><span style="font-size:x-small;"><strong>.</strong></span></span> ele se torna um reles mortal e perde todos os seus superpoderes de caractere especial.</p>
<h2><a name="__RefHeading__1547_968202224"></a>RegExp nível intermediário</h2>
<p><span style="color:#333333;"><span style="font-size:x-small;">:help usr_27.txt</span></span></p>
<h3><a name="__RefHeading__1549_968202224"></a>Ignorando maiúsculas e minúsculas</h3>
<p>Por padrão, o vim é sensível à caixa da letra. Portanto, &#8220;else&#8221;, &#8220;ELSE&#8221;, Else&#8221; são palavras diferentes. Para que o vim ignore a caixa da letra (case):</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> :set ignorecase</span></span></pre>
<p>Agora, tanto faz procurar por &#8220;else&#8221;, &#8220;ELSE&#8221;, ou &#8220;Else&#8221;, pois o vim vai tentar encontrar a palavra não importa quais letras nes estejam maiúsculas ou minúsculas.</p>
<p>Para voltar a se importar com o <em>case</em> da letra:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> :set noignorecase</span></span></pre>
<p>Há também a opção <span style="color:#333333;"><span style="font-size:x-small;">smartcase</span></span>, que é &#8220;ignorecase&#8221; por padrão, mas se você realizar a procura com pelo menos uma letra maiúscula o vim detecta e passa a ser sensível ao <em>case</em> automaticamente.</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> :set ignorecase smartcase</span></span></pre>
<p>Para fazer procura sensível à caixa em uma pesquisa apenas, usamos <span style="color:#333333;"><span style="font-size:x-small;">\C</span></span> (maiúsculo):</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /\Cteste</span></span>
<span style="color:#ff00ff;"><span style="font-size:x-small;"> /\CTeste</span></span></pre>
<p>O primeiro só combina com &#8220;teste&#8221;, todas minúsculas. O segundo só combina com &#8220;Teste&#8221; com o primeiro &#8220;T&#8221; maiúsculo.</p>
<p>Para tornar a pesquisa insensível ao case use <span style="color:#333333;"><span style="font-size:x-small;">\c</span></span> (minúsculo):</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /\cteste</span></span></pre>
<p>Encontra &#8220;teste&#8221;, &#8220;TESTE&#8221;, &#8220;teSTE&#8221;, etc.</p>
<p>A vantagem de usar <span style="color:#333333;"><span style="font-size:x-small;">\c</span></span> e <span style="color:#333333;"><span style="font-size:x-small;">\C</span></span> é que eles ficam no histórico junto com o &#8216;pattern&#8217; da pesquisa.</p>
<p>NOTA: O uso de <span style="color:#333333;"><span style="font-size:x-small;">\</span></span> depende da opção <em>magic</em>. :<span style="color:#333333;"><span style="font-size:x-small;">help &#8216;magic&#8217;</span></span>.</p>
<h3><a name="__RefHeading__2052_1022113894"></a>Offsets de linhas</h3>
<p>Quando fazemos uma busca, o cursor para na linha da busca. Se queremos parar duas linhas após o elemento procurado:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /teste/2</span></span></pre>
<h3><a name="__RefHeading__2054_1022113894"></a>Offset de caracteres</h3>
<p>Parar o cursor no último caractere do elemento procurado (e = end):</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /teste/e </span></span></pre>
<p>Coloca o cursor 3 caracteres após o último caractere do elemento procurado:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;">    /teste/e+3</span></span></pre>
<p>Coloca o cursor no penúltimo caractere do elemento procurado:</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /teste/e-1</span></span></pre>
<p>Coloca o cursor na segunda no terceiro caractere do elemento buscado (b = beggin):</p>
<pre><span style="color:#ff00ff;"><span style="font-size:x-small;"> /teste/b+2</span></span></pre>
<p>É b+2 por que b já é o primeiro caractere, então + 2 dá 3.</p>
<p>Estes offsets serão mais úteis quando estudarmos o conteúdo do <span style="color:#333333;"><span style="font-size:x-small;">:help pattern.txt</span></span>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/406/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=406&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2011/12/31/expressoes-regulares-no-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Xdefaults VS Escape Sequences, Bash &#8211; Cores do Prompt</title>
		<link>http://jeditux.wordpress.com/2011/12/27/xdefaults-vs-escape-sequences-bash-cores-do-prompt/</link>
		<comments>http://jeditux.wordpress.com/2011/12/27/xdefaults-vs-escape-sequences-bash-cores-do-prompt/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 21:44:48 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=385</guid>
		<description><![CDATA[Leia todo o texto antes de tentar configurar algo. Algumas coisas que você ler mais no início do texto fará sentido quando se juntar com conceitos explicados mais adiante. A intenção deste post não é mostrar TUDO sobre configuração do prompt do bash propriamente dito, mas sim mostrar a relação que tem as cores do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=385&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Leia todo o texto antes de tentar configurar algo. Algumas coisas que você ler mais no início do texto fará sentido quando se juntar com conceitos explicados mais adiante.</p>
<p>A intenção deste post <span style="text-decoration:underline;">não</span> <span style="text-decoration:underline;">é</span> <span style="text-decoration:underline;">mostrar</span> <span style="text-decoration:underline;">TUDO</span> sobre configuração do prompt do bash propriamente dito, mas sim mostrar a <strong>relação que tem as cores do terminal/prompt com as sequências de escape que usamos para configurar o prompt</strong>, pois sem essa noção, ficamos tentando configurar as cores &#8220;às cegas&#8221;. Esse tutorial funciona para o <span style="color:#ff00ff;"><strong>xterm</strong></span>, mas os conceitos são os mesmos para configurar outros emuladores de terminal.</p>
<p>Quando queremos configurar o prompt do Bash, usamos sequências de escape como:</p>
<p><pre class="brush: bash;">
    '&#092;&#048;33[31m'
    </pre></p>
<p>Faça um teste:</p>
<p><pre class="brush: bash;">
    echo -e &quot;&#092;&#048;33[31m Hello, World.&quot;
</pre></p>
<p><span style="color:#ff00ff;">&#092;033[</span> significa que estamos iniciando uma sequência de caracteres que não serão imprimidos, ou seja, inicia a sequência de escape. O próximo número (<span style="color:#ff00ff;">31</span>, no exemplo) indica a cor que queremos imprimir, seguido de "<span style="color:#ff00ff;">m</span>", que termina a sequência de escape. O que vem em seguida é o texto que queremos realmente mostrar.</p>
<p>A parte numérica que determina a cor do texto pode indicar que queremos o texto em <strong>negrito</strong>, para isso, a sintaxe fica assim:</p>
<p><pre class="brush: bash;">
    echo -e '&#092;&#048;33[31;1m Hello, World.&quot; # Note o &quot;;1&quot;.
</pre></p>
<p>Ou seja, aquele <span style="color:#ff00ff;">31;1</span>, onde <span style="color:#ff00ff;">31</span> é a cor, e <span style="color:#ff00ff;">1</span> habilita o negrito. O número que especifica a cor e o número que habilita o negrito devem estar separados por ponto e vírgula (<span style="color:#ff00ff;">;</span>). Mas agora vem a questão: 31 é qual cor? Aí é que entra o arquivo ~/.Xdefaults ou ~/.Xresourses.</p>
<p>No <span style="color:#ff00ff;">~/.Xdefaults</span> temos entradas como as do exemplo abaixo:</p>
<p><pre class="brush: plain;">

    ! Black, &#092;&#048;33[30m
    XTerm*color0: #000000
    ! DarkGrey, &#092;&#048;33[30;1m
    XTerm*color8: #BABDB6

    ! DarkRed, &#092;&#048;33[31m
    XTerm*color1: #FF6565
    ! Red, &#092;&#048;33[31;1m
    XTerm*color9: #FF8D8D

</pre></p>
<p>No ~/.Xdefaults usamos cores que vão de <span style="color:#ff00ff;">color0</span> até <span style="color:#ff00ff;">color15</span>. As cores do <span style="color:#ff00ff;">color0</span> a <span style="color:#ff00ff;">color7</span> são cores <em>normais</em>, e de <span style="color:#ff00ff;">color8</span> até <span style="color:#ff00ff;">color15</span> são as cores em <strong>negrito</strong>, ou brilhosas.</p>
<p><span style="color:#800080;">Aqui temos um conceito importante.</span> Note nos comentários (linhas iniciadas com !). Por exemplo, <span style="color:#ff00ff;">*color0</span> é a cor que será usada na sequência de escape <span style="color:#ff00ff;">&#092;33[30m</span> (cor normal), e a <span style="color:#ff00ff;">color8</span> será usada com a sequência <span style="color:#ff00ff;">&#092;33[30;1m</span>, ou seja, a cor em negrito. Continuando, <span style="color:#ff00ff;">color1</span> é usada pela sequência <span style="color:#ff00ff;">&#092;33[31m</span> (cor normal) e <span style="color:#ff00ff;">color9</span> é usada pela sequência <span style="color:#ff00ff;">&#092;33[31;1m</span>, a cor em negrito, e assim sucessivamente, até a <span style="color:#ff00ff;">color7</span> para cores normais, e <span style="color:#ff00ff;">color15</span> para os negritos.</p>
<p>Agora, configure as cores do<strong> xterm</strong> no <strong>~/.Xdefaults</strong> da maneira que quiser, ou simplesmente copie as minhas (que pode modificar depois):</p>
<p><pre class="brush: plain;">
! ***** My Xterm Colors ***** ! {{{
! 1 to 7 are normal colors. 8 to 15 are the bright/bold ones.
XTerm*foreground: yellow
XTerm*background: #242424

! Black, &#092;&#048;33[30m
XTerm*color0: #000000
! DarkGrey, &#092;&#048;33[30;1m
XTerm*color8: #BABDB6

! DarkRed, &#092;&#048;33[31m
XTerm*color1: #FF6565
! Red, &#092;&#048;33[31;1m
XTerm*color9: #FF8D8D

! DarkGreen, &#092;&#048;33[32m
XTerm*color2: green3
! Green, &#092;&#048;33[32;1m
XTerm*color10: #C8E7A8

! DarkYellow, &#092;&#048;33[33m
XTerm*color3: #EAB93D
! Yellow, &#092;&#048;33[33;1m
XTerm*color11: #FFC123

! DarkBlue, &#092;&#048;33[34m
XTerm*color4: #204A87
! Blue, &#092;&#048;33[34;1m
XTerm*color12: #3465A4

! DarkMagenta, &#092;&#048;33[35m
XTerm*color5: #CE5C00
! Magenta, &#092;&#048;33[35;1m
XTerm*color13: #F57900

! DarkCyan, &#092;&#048;33[36m
XTerm*color6: #89B6E2
! Cyan, &#092;&#048;33[36;1m
XTerm*color14: #46A4FF

! LightGrey, &#092;&#048;33[37m
XTerm*color7: #CCCCCC
! White, 0\33[37;1m
XTerm*color: #FFFFFF

! }}} Xterm ends here.
</pre></p>
<p>Para que as configurações entrem em vigor, execute o comando:</p>
<p><pre class="brush: bash;">
    xrdb ~/.Xdefaults
</pre></p>
<p>Feche e abra o terminal novamente. Lembre-se que isso funciona para o xterm. Não adianta usar o gnome-terminal (do gnome) ou o konsole (do kde). Agora sim estamos preparados para brincar com o prompt.</p>
<p>O prompt do bash é definido pela variável <span style="color:#ff00ff;">PS1</span> (tem a PS2 também, entre outras, que é usada quando continuamos um comando na próxima linha).</p>
<p>Vamos fazer uma configuração básica do prompt. Não precisa editar arquivo nenhum por enquanto, pois vamos fazer direto pelos comandos. Antes, porém, dê uma olhada nesta lista:</p>
<p><pre class="brush: bash;">
    \$ # Mostra o prompt de usuário '$', ou root '#'.
    \u # Mostra o username.
    \h # Mostra o hostname.
    \t # Mostra a hora (time).
    \d # Mostra a data (date).
</pre></p>
<p>Tem outros. <em>man bash</em>, na seção PROMPTING tem mais informações.</p>
<p>Digite o próximo comando, e veja como fica o prompt (não se preocupe, poi s essas alterações não são definitivas).</p>
<p><pre class="brush: bash;">
    PS1='\$ '
</pre></p>
<p>Agora tente este:</p>
<p><pre class="brush: bash;">
     PS1='&#092;&#048;33[31m \$ '
</pre></p>
<p>Mais um:</p>
<p><pre class="brush: bash;">
    PS1='&#092;&#048;33[31m\h@\u, &#092;&#048;33[33m \s-v &#092;&#048;33[0m\$'
</pre></p>
<p>Notou a diferença das cores? Vamos tentar com negrito (lembre-se, depende de como as cores foram configuradas no ~/.Xdefaults):</p>
<p><pre class="brush: bash;">
    PS1='&#092;&#048;33[31;1m\h@\u, &#092;&#048;33[33;1m \s-v, &#092;&#048;33[0m\$ '
</pre></p>
<p>IMPORTANTE: Quando usamos uma cor, ela fica em vigor até sobrescrevermos ela usando outra. No final, temos que fazer a cor voltar ao modo padrão/default. Para isso usamos a sequência de escape:</p>
<p><pre class="brush: bash;">
    &#092;&#048;33[0m
</pre></p>
<p>Aqui está uma configuração da minha variável <span style="color:#ff00ff;">PS1</span>, juntamente com mais duas linhas, pois a minha PS1 depende dessas duas outras linhas:</p>
<p><pre class="brush: bash;">
    shopt -s checkwinsize # For hr='=='stuff to work.
    hr='============================================================================================================================================================='
    PS1='${hr::COLUMNS}\r\n\[\e[1;32m\]\s-\v, \[\e[0;32m\]\h@\u, \d \t \n\$PWD=\[\e[1;36m\]&quot;\w&quot; \[\e[1;37m\] \n\$ \[\e[1;37m\]'
</pre></p>
<p>Quem quiser tirar umas ideais, aqui estão minhas <a title="config_files, FernandoBasso, github" href="https://github.com/FernandoBasso/config_files">config files</a>no github.http://snipt.net/FernandoBasso/my-bashrc-dec-26-2011</p>
<p>Como eu disse no início, a intenção é mostrar a relação <strong><em>Xdefaults vs Escape Sequences</em></strong>. Tem vários tutoriais na web que tratam exclusivamente do prompt do bash. No entanto, nunca vi nenhum documento ou tutorial mencionar essa relação. Sem saber disso, ficamos configurando cores às cegas&#8230;</p>
<p>Descobri essa questão da relação Xdefaults/Escape Sequences perguntando no <a title="arch forums, bash prompt colors in relation with xdefaults" href="https://bbs.archlinux.org/viewtopic.php?id=132593">fórum do arch</a> (em inglês), depois de levar as tradicionais broncas &#8220;vai ler no wiki&#8221;, ou &#8220;RTFM&#8221;. Ou seja, o pessoal adora assumir que os &#8216;aprendizes&#8217; não gostam de ler e querem respostas prontas. PS: eu tinha lido metade da web tentando aprender mais sobre isso, e no wiki do arch também não menciona isso. :)</p>
<p>May the force be with you. Always.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/385/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=385&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2011/12/27/xdefaults-vs-escape-sequences-bash-cores-do-prompt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Expressões Regulares no BASH – Parte 2</title>
		<link>http://jeditux.wordpress.com/2011/12/25/expressoes-regulares-no-bash-parte-2/</link>
		<comments>http://jeditux.wordpress.com/2011/12/25/expressoes-regulares-no-bash-parte-2/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 17:35:15 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[shell scripting]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=328</guid>
		<description><![CDATA[BASH &#8211; Expressões Regulares &#8211; Parte 2 Sunday, 10:47 &#8211; December 25 &#8211; 2011 Extrair Nome do Script ou o Path para o Script Verificando por Sub-Strings Substituições Básicas Remover do início da string Remover do fim da string Dando continuação aos exemplos do primeiro tutorial sobre expressões no bash, vamos a mais alguns exemplos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=328&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>BASH &#8211; Expressões Regulares &#8211; Parte 2</h1>
<p>Sunday, 10:47 &#8211; December 25 &#8211; 2011</p>
<ol>
<li><a href="#paths">Extrair Nome do Script ou o Path para o Script</a></li>
<li><a href="#check_substr">Verificando por Sub-Strings</a></li>
<li><a href="#subst_basicas">Substituições Básicas</a></li>
<li><a href="#rm_inicio">Remover do início da string</a></li>
<li><a href="#rm_final">Remover do fim da string</a></li>
</ol>
<p>Dando continuação aos exemplos do primeiro tutorial sobre expressões no<br />
bash, vamos a mais alguns exemplos diversos, que basicamente usam o que já<br />
aprendemos anteriormente.</p>
<h1 id="paths">Extrair Nome do Script ou o Path para o Script</h1>
<p>Sabemos que no linux os caminhos de diretórios são compostos pelos nomes<br />
dos diretórios separados pela barra (/). Em muitos dos nossos próximos<br />
exemplos, a barra não será usada como delimitador, mas como o próprio<br />
elemento que queremos encontrar. Tenha isso em mente enquanto estuda os<br />
próximos exemplos.</p>
<p>A variável &#8220;$0&#8243; é interna do bash, e ela mostra o nome do script.<br />
Se executamos o script do diretório onde ele está, tudo bem, o output<br />
mostrará o nome do script normalmente.</p>
<p><pre class="brush: bash;">echo &quot;$0&quot;</pre></p>
<p>É lógico que a variável <code>$0</code> só fará sentido se utilizada<br />
dentro de um script. Para testar pela linha de comando podemos simular<br />
criando uma variável que contém um path (caminho) qualquer e usar a essa<br />
variável em vez de <code>$0</code>:</p>
<p><pre class="brush: bash;">var=&quot;/usr/local/bin/my_script&quot;</pre></p>
<p>Continuando o assunto, se o script está em <code>/usr/local/bin/</code><br />
por exemplo, então $0 vai mostrar o caminho completo do arquivo, e não<br />
apenas o nome dele. A solução é deletar a parte que não queremos.</p>
<p><pre class="brush: bash;">echo &quot;${0##*/}&quot;</pre></p>
<p>NOTE que agora o <code>/</code> não é mais o delimitador. Ele é o próprio<br />
caractere que queremos encontrar. Suponha que o script se chama<br />
<code>my_script</code>, então o caminho completo será<br />
<code>/usr/local/bin/my_script</code>. Em português ficaria &#8220;mostre o<br />
conteúdo da variável $0, e delete tudo (*) até a ultima barra possível (/).<br />
Restará só o nome final: <code>my_script</code></p>
<p>.</p>
<p>Por outro lado, se queremos mostrar somente o caminho, sem o nome do<br />
arquivo propriamente dito, temos que deletar de trás pra frente, usando o<br />
<code>'%'</code> ou o <code>'%%'</code>.</p>
<p><pre class="brush: bash;">echo &quot;${0%%/*}&quot;</pre></p>
<p>Em português, &#8220;do final da string (%%), delete tudo (*) até encontrar a<br />
barra (/). Sei que é estranho, por que mesmo sendo de trás pra frente, o<br />
&#8216;%%&#8217; continua logo após a variável, como é o caso do &#8216;#&#8217; ou &#8216;##&#8217;. O jeito é<br />
acostumar, pois é assim mesmo.</p>
<p>Os créditos do próximo exemplo vão para <a href="http://mywiki.wooledge.org/BashFAQ/100">mywiki.woolege.org</a>. A<br />
única coisa que fiz foi tentar explicar de uma maneira um pouco<br />
diferente.</p>
<p>Digamos que não queremos apenas o nome final, mas as duas ultimas partes.<br />
Bom, vamos pensar um pouco por vez. Primeiro, pegamos as partes que não<br />
queremos, e salvamos em uma variável. Antes vamos testar. Vamos ver se a<br />
expressão está realmente mostrando somente a parte que não queremos:</p>
<p><pre class="brush: bash;">echo &quot;${var%/*/*}&quot;</pre></p>
<p>Deleta do final até a primeira barra (/*) e deleta mais uma vez até a<br />
próxima barra (/*). Por isso usamos <code>/*/*</code>. Agora sim, assine<br />
essa <em>regexp</em> na variável <code>tmp</code>. Veja que executando o<br />
<code>echo</code>, acima na verdade a espressão está deletando as duas ultimas<br />
partes. Não tem problema, desde que salvemos essa expressão na variável.</p>
<p><pre class="brush: bash;">tmp=&quot;${var%/*/*}&quot;</pre></p>
<p>Para se certificar de que a expressão está correta, vamos ver o que foi<br />
salvo na var <code>tmp</code>:</p>
<p><pre class="brush: bash;">echo &quot;$tmp&quot;</pre></p>
<p><code>tmp</code> agora possui <code>'/usr/local'</code>. Vamos então<br />
deletar do início da string, todo o conteúdo que está em<br />
<code>tmp</code>:</p>
<p><pre class="brush: bash;">echo &quot;${var#$tmp}&quot;</pre></p>
<p>É o mesmo que:</p>
<p><pre class="brush: bash;">echo &quot;${var#/usr/local/}&quot;</pre></p>
<p>Ou seja, deleta <code>'/usr/local'</code> deixando somente o final que<br />
queriamos <code>'/bin/my_script'</code>. Faça você mesmo várias vezes e<br />
invente exemplos próprios parecidos com esse até acostumar.</p>
<p>Mais um exemplo:</p>
<p><pre class="brush: bash;">var=&quot;nada importante &lt;jackpot&gt; ... não interessa&quot;</pre></p>
<p>Agora, por algum motivo, queremos ficar somente com <em>jackpot</em>:</p>
<p><pre class="brush: bash;">tmp=&quot;${var##*&lt;}&quot; # Remove do início até o &lt;.</pre><br />
<pre class="brush: bash;">echo &quot;${tmp%&gt;*}&quot; # Remove do &gt; até o fim da string.</pre></p>
<p>Pronto, só nos restou o que estava entre <code>&lt;</code> e <code>&gt;</code>.</p>
<p>Mais um exemplo:</p>
<p><pre class="brush: bash;">
      var=&quot;Isto é 'melhor' que aquilo.&quot;
      tmp=&quot;${var#*\'}&quot; # Temos que escapar a aspa simples (\').
      echo &quot;${tmp%\'*}&quot; # Sobra apenas &quot;melhor&quot; (sem as apas).
    </pre></p>
<p><a href="#inicio">Voltar</a></p>
<hr />
<h1 id="ranges">Trabalhando Com Posições Fixas &#8211; Ranges</h1>
<p>Se sabemos quantos caracteres à direita ou a esquerda queremos, fica muito fácil:</p>
<p><pre class="brush: bash;">var=&quot;ABCDEFGHIJ&quot;</pre></p>
<p>Mostramos somente os dois primeiros caracteres, ou seja, do <em>zero</em> ao<em> dois</em>:</p>
<p><pre class="brush: bash;">echo &quot;${var:0:2}&quot;</pre></p>
<p>Mostrar as últimas três posições, ou seja, da posição 7 a posição 10:</p>
<p><pre class="brush: bash;">echo &quot;${var:7:10}&quot;</pre></p>
<p>O mesmo pode ser conseguido com:</p>
<p><pre class="brush: bash;">echo &quot;${var:(-3)}&quot;</pre></p>
<p>Tenha cuidado com a sintaxe.</p>
<h3>Em construção&#8230;</h3>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/328/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=328&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2011/12/25/expressoes-regulares-no-bash-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Expressões Regulares no BASH &#8211; Parte 1</title>
		<link>http://jeditux.wordpress.com/2011/12/24/expressoes-regulares-no-bash-parte-1/</link>
		<comments>http://jeditux.wordpress.com/2011/12/24/expressoes-regulares-no-bash-parte-1/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 18:58:03 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=304</guid>
		<description><![CDATA[BASH &#8211; Expressões Regulares Saturday, 10:33 &#8211; December 24 &#8211; 2011 Introdução Verificando por Sub-Strings Substituições Básicas Remover do início da string Remover do fim da string Introdução Estes exemplos podem ser digitados diretamente na linha de comando, ou então colocados em em arquivo. Não vou explicar isso detalhadamente agora, mas um escript bash pode [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=304&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>BASH &#8211; Expressões Regulares</h1>
<p>Saturday, 10:33 &#8211; December 24 &#8211; 2011</p>
<p>
<a id='inicio'></a></p>
<ol>
<li><a href='#intro'>Introdução</a></li>
<li><a href='#check_substr'>Verificando por Sub-Strings</a></li>
<li><a href='#subst_basicas'>Substituições Básicas</a></li>
<li><a href='#rm_inicio'>Remover do início da string</a></li>
<li><a href='#rm_final'>Remover do fim da string</a></li>
</ol>
<h1 id='intro'>Introdução</h1>
<p>Estes exemplos podem ser digitados diretamente na linha de comando, ou<br />
então colocados em em arquivo. Não vou explicar isso detalhadamente agora, mas<br />
um escript bash pode ser algo como esse exemplo:</p>
<p><pre class="brush: bash;">
  #!/usr/bin/env bash

  # Descomente a próxima linha para um output mais verbose.
  #set -xv

  var=&quot;May the force be with you. Always! - Master Yoda.&quot;
  echo &quot;$var&quot;

  if [[ -z &quot;$var&quot; ]]; then
      echo &quot;A string é vazia.&quot;
  else
      echo &quot;A string não é vazia.&quot;
  fi # Fim do 'if'.

  # Script termina aqui.
</pre></p>
<p>Com o terminal na pasta onde está o script, execute este comando para<br />
rodar o script:</p>
<p><pre class="brush: bash;">bash nome_do_script</pre></p>
<p>Vamos criar uma variável contendo uma string. Essa variável/string<br />
será usada nos exemplos.</p>
<p><pre class="brush: bash;">var=&quot;May the force be with you. Always! - Master Yoda.&quot;</pre></p>
<p>Mostrar quantos caracteres uma string possui.</p>
<p><pre class="brush: bash;">echo &quot;${#var}&quot;</pre></p>
<p><a href='#inicio'>Voltar</a></p>
<hr />
<h1 id='check_substr'>Verificando por Sub-Strings</h1>
<p>Colocamos a sub-string desejada entre &#8216;*&#8217; (o chamado <b>glob</b>). Vamos<br />
verificar se a string contém a sub-string <i>ama</i>:</p>
<p><pre class="brush: bash;">
#!/usr/bin/env bash
var=&quot;programador&quot;
if [[ &quot;$var&quot; = *&quot;ama&quot;* ]]; then
    echo &quot;&lt;$var&gt; contém a substring &lt;ama&gt;.&quot;
else
    echo &quot;&lt;$var&gt; não contém a substring &lt;ama&gt;.&quot;
fi
</pre></p>
<p>Colocando a sub-string e uma variável, o código ficaria assim:</p>
<p><pre class="brush: bash;">
#!/usr/bin/env bash
var=&quot;programador&quot;
substr=&quot;ama&quot;
if [[ &quot;$var&quot; = *&quot;$substr&quot;* ]]; then
    echo &quot;&lt;$var&gt; contém a substring &lt;$substr&gt;.&quot;
else
    echo &quot;&lt;$var&gt; não contém a substring &lt;$substr&gt;.&quot;
fi
</pre></p>
<p><a href='#inicio'>Voltar</a></p>
<hr />
<h1>Substuições Básicas</h1>
<p>Usamos a barra (/) como delimitador.</p>
<p>Substituir &#8216;e&#8217; por &#8216;E&#8217;. Somente a primeira ocorrência:</p>
<p><pre class="brush: bash;">echo &quot;${var/e/E}&quot;</pre></p>
<p>Para mudar todas as ocorrências de &#8216;e&#8217; para &#8216;E&#8217;, usamos a barra duas vezes.<br />
Dizemos que substitui <b>globalmente</b>.</p>
<p><pre class="brush: bash;">echo &quot;${var//e/E}&quot;</pre></p>
<p>Para efeito de ilustração, suponhamos que queremos substituir o &#8216;e&#8217;<br />
mais os próximos dois caracteres, não importa quais sejam, por 1, 2 e 3<br />
respectivamente:</p>
<p><pre class="brush: bash;">echo &quot;${var//e??/123}&quot;</pre></p>
<p>Substitui o &#8216;!&#8217; por um ponto final &#8216;.&#8217;. Precisamos <b>escapar</b> o<br />
ponto de exclamação pois ele é um caractere especial no bash.</p>
<p><pre class="brush: bash;">echo &quot;${var/\!/.}&quot; # O . não é um metacaractere no bash. </pre></p>
<p>Subsituir spaços em branco por underscores &#8211; globalmente.</p>
<p><pre class="brush: bash;">echo &quot;${var// /_}&quot;</pre></p>
<p>Substituir . por &#8230;:</p>
<p><pre class="brush: bash;">echo &quot;${var//./...}&quot;</pre></p>
<p><a href='#inicio'>Voltar</a></p>
<hr />
<h1 id='rm_inicio'>Remover do Início da String</h1>
<p>Para remover parte do início de uma string, não usamos mais o delimitador (/).<br />
Usamos apenas o &#8216;#&#8217; ou &#8216;##&#8217;. Vamos aos exemplos.</p>
<p>Remover do início até o primeiro espaço. Um único # é <i>non-greedy</i> (não<br />
ganancioso/guloso).</p>
<p><pre class="brush: bash;">echo &quot;${var#* }&quot;</pre></p>
<p>Explicando: o # busca pelo início, o * é <i>tudo</i>, e o espaço em branco é o<br />
que queremos encontrar. Então, em português ficaria algo como &#8220;do início da string (#),<br />
tudo o que for possível (*), até o <b>primeiro</b> espaço em branco que encontrar ( )&#8221;.</p>
<p>Remove do início até o último espaço em branco possível. ## é<br />
<i>greedy.</i></p>
<p><pre class="brush: bash;">echo &quot;${var##* }&quot;</pre></p>
<p><b>NOTE</b> que o <b>glob</b> vai ANTES do item que queremos encontrar. No<br />
exemplo, o * vem antes do espaço em branco.</p>
<p>Parar antes do ponto, ou seja, não incluir o ponto.</p>
<p>  <pre class="brush: bash;">echo &quot;${var##*([!.])}&quot;</pre> # ! é o operador de negação ou &#8220;NOT&#8221;.</p>
<p>Remove tudo, do início até o hífen (-).</p>
<p><pre class="brush: bash;">echo &quot;${var#*-}&quot;</pre></p>
<p>Remove do início até o espaço que vem após o hífen.</p>
<p><pre class="brush: bash;">echo &quot;${var#*- }&quot;</pre></p>
<p>Colocando em português, &#8220;do início (#), tudo (*),continua até o hífen (-), e inclui o espaço em branco ( )&#8221;.</p>
<p><a href='#inicio'>Voltar</a></p>
<hr />
<h1 id='rm_final'>Remover do Final da String</h1>
<p><pre class="brush: bash;">var=&quot;May the force be with you. Always! - Master Yoda.&quot;</pre></p>
<p>Agora procuramos para trás. Por isso, o * vai do lado oposto do que<br />
vinhamos usando até agora e o operador &#8216;#&#8217; muda para &#8216;%&#8217;.<br />
Pra frente:  &#8220;${var#*-}&#8221;<br />
Pra trás: &#8220;${var%-*}&#8221;<br />
- é o que queremos encontrar. É importante observar que agora a expressão<br />
começa e ser procurada do fim do string e vai &#8220;caminhando&#8221; até o início</p>
<p>Remove do fim até o primeiro espaço &#8211; contando de trás pra frente. Ou<br />
seja, o último contando do início.</p>
<p><pre class="brush: bash;">echo &quot;${var% *}&quot;</pre></p>
<p>Remove do final até o último espaço &#8211; contanto de trás pra frente. Ou<br />
seja, o primeiro contando normalmente.</p>
<p><pre class="brush: bash;">echo &quot;${var%% *}&quot;</pre></p>
<p>Remove do fim até o hífen</p>
<p><pre class="brush: bash;">echo &quot;${var%-*}&quot;</pre></p>
<p>Remove do fim até o primeiro &#8216;ç&#8217; que encontrar:</p>
<p><pre class="brush: bash;">echo &quot;${var%ç*}&quot;</pre></p>
<p>Se o caractere que queremos encontrar ocorre mais de uma vez na string,<br />
e queremos encontrar justamente a ocorrência dele que está o mais distante<br />
possível do final da string, usamos &#8216;%%&#8217; em vez de &#8216;%&#8217;. O &#8216;e&#8217; mais distante<br />
do final da string nesse caso está na palavra &#8216;Que&#8217; bem no início. Veja<br />
como ficaria o código:</p>
<p><pre class="brush: bash;">echo &quot;${var%%e*}&quot;</pre></p>
<p><a href='#inicio'>Voltar</a></p>
<hr />
<p>A maior parte do que postei aqui eu aprendi no site<br />
<a href='http://mywiki.wooledge.org/'>wooledge.org</a> &#8211; um excelente site<br />
sobre shell scripting com o bash. O que não aprendi lá aprendi lendo na web, conversando em IRCs, forums, e nos &#8211;help e man (que confesso serem<br />
difíceis de entender as vezes).</p>
<p>Por enquanto é isso. Teremos mais exemplos em futuros posts.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/304/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=304&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2011/12/24/expressoes-regulares-no-bash-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Restaurando o Gnote no tray (bandeja) tint2</title>
		<link>http://jeditux.wordpress.com/2011/11/17/carregar-icone-do-gnote-no-systray-do-tint2/</link>
		<comments>http://jeditux.wordpress.com/2011/11/17/carregar-icone-do-gnote-no-systray-do-tint2/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 09:59:44 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[arch linux]]></category>
		<category><![CDATA[bandeja]]></category>
		<category><![CDATA[dconf]]></category>
		<category><![CDATA[gnote]]></category>
		<category><![CDATA[openbox]]></category>
		<category><![CDATA[tint2]]></category>
		<category><![CDATA[tray icon]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=293</guid>
		<description><![CDATA[Restaurando o Gnote no tray (bandeja) tint2 Depois de um upgrade, o tint2 parou de aparacer no systray do meu tint2. Eu uso arch linux com openbox + titn2 e o gnome-settings-daemon pra ajudar no look and feel. Menciono isso porque o tint2 tem configurações que são manipuladas pelo deconf. Pesquisando, encontrei uma solução, que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=293&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Restaurando o Gnote no tray (bandeja) tint2</h1>
<p>Depois de um upgrade, o tint2 parou de aparacer no<br />
systray do meu tint2. Eu uso arch linux com openbox + titn2<br />
e o gnome-settings-daemon pra ajudar no look and feel.<br />
Menciono isso porque o tint2 tem configurações que são<br />
manipuladas pelo deconf.</p>
<p>Pesquisando, encontrei uma solução, que é usar a linha<br />
de comando para mexer no gsettings e &#8220;setar&#8221; a variável<br />
<i>use-status-icon</i> para <b>true</b>.</p>
<p><code><br />
  gsettings set org.gnome.gnote use-status-icon true<br />
</code></p>
<p>Essa opção pode ser habilitada através do dconf-editor<br />
também.</p>
<p>Aqui está o link do local onde achei a dica de como restaurar<br />
or ícone do gnote no systray:<br />
<a href="https://bbs.archlinux.org/viewtopic.php?id=127213" title="Gnote not loading in tint2 tray"></a></p>
<p>Uma coisa que eu me pergunto é: por que esse tipo de opção<br />
não está no &#8220;preferences&#8221; do próprio aplicativo? Sem contar que<br />
me parce mais natural as pessoas que usam um aplicativo deste tipo<br />
queiram ele lá no systray, pois assim é fácil ler ou adicionar novas<br />
anotações ou lembretes. Que bom que há uma maneira (escondida) de<br />
restaruar o ícone. :)</p>
<p>May the force be with you. Always.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/293/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=293&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2011/11/17/carregar-icone-do-gnote-no-systray-do-tint2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
		<item>
		<title>Shutdown No Openbox</title>
		<link>http://jeditux.wordpress.com/2011/08/25/shutdown-no-openbox/</link>
		<comments>http://jeditux.wordpress.com/2011/08/25/shutdown-no-openbox/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 01:06:38 +0000</pubDate>
		<dc:creator>Fernando Basso</dc:creator>
				<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://jeditux.wordpress.com/?p=287</guid>
		<description><![CDATA[O Arch Linux é uma distribuição que gosto muito. Leve! Totalmente customizável. Nada vem &#8216;pronto de fábrica&#8217;. Você praticamente faz ela pra você do jeito que você quer. Não vem com gnome nem kde nem nada por padrão. Esta distro realmente segue a filosofia KISS ao pé da letra. Gosto do openbox não só por [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=287&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O Arch Linux é uma distribuição que gosto muito. Leve! Totalmente customizável. Nada vem &#8216;pronto de fábrica&#8217;. Você praticamente faz ela pra você <b>do jeito que você quer</b>. Não vem com gnome nem kde nem nada por padrão.</p>
<p>Esta distro realmente segue a filosofia KISS ao pé da letra.</p>
<p>Gosto do openbox não só por ser lightweight, mas por causa do look-and-feel clean que ele tem. Contudo, ter que sair do openbox e virar root ou usar o sudo pra desligar ou reiniciar o sistema é meio chato. Depois de umas tentativas falhas, encontrei um jeito de conseguir reboot e shutdown no openbox sem precisar da senha do root. Eis aqui o que fiz:</p>
<p>1. Primeiro, instale o sudo:</p>
<p><pre class="brush: plain;">
su -c 'pacman --sync sudo'
</pre></p>
<p>2. Configure um grupo para poder rodar o shutdown e o reboot sem precisar de senha. Aqui, vamos configurar<br />
o gruop <i>users</i>:<br />
<pre class="brush: plain;">
su -c 'visudo'
</pre></p>
<p>Adicione isto no final do arquivo, ou abaixo dos exemplos que já (porvavelmente) existem no arquivo:<br />
<pre class="brush: plain;">
%users ALL=NOPASSWD: /sbin/reboot
%users ALL=NOPASSWD: /sbin/shutdown
</pre><br />
Salve o arquivo e feche. Se não sabe como fazer isto, <a href='http://jeditux.wordpress.com/2010/03/01/como-fazer-o-sudo-sempre-pedir-senha/'>aqui</a> tem um pequeno tutorial de como mexer no arquivo /etc/sudoers.</p>
<p>3. Temos também que adicionar o nosso usuário de login ao grupo users. Vou dar o exemplo usando o meu usuário, que é &#8216;jeditux&#8217;:<br />
<pre class="brush: plain;">
su -c 'gpasswd -a jeditux users'
</pre><br />
Obviamente, substitua &#8216;jeditux&#8217; pelo seu usuário do sistema.</p>
<p>4. Faça logout. Não adianta só sair do X (modo gráfico). Tem que dar um logout e fazer login novamente.</p>
<p>5. Abra o arquivo ~/.config/openbox/menu.xml e adicione isto perto do fim do arquivo:(procure por entradas similares com Exit e/ou Logout e coloque depois delas):<br />
<pre class="brush: xml;">
&lt;item label=&quot;Reboot&quot;&gt; &lt;action name=&quot;Execute&quot;&gt;
    &lt;execute&gt;sudo /sbin/reboot&lt;/execute&gt;
 &lt;/action&gt; &lt;/item&gt;
&lt;item label=&quot;Shudown&quot;&gt; &lt;action name=&quot;Execute&quot;&gt;
    &lt;execute&gt;sudo /sbin/shutdown -h now&lt;/execute&gt;
&lt;/action&gt; &lt;/item&gt;
</pre><br />
Salve e feche o arquivo.</p>
<p>6. Finalmente, dê um reload no openbox para que a nova configuração do menu entre em vigor:<br />
<pre class="brush: plain;">
openbox --reconfigure
</pre></p>
<p>Agora você deve ver &#8216;Shutdown&#8217; e &#8216;Reboot&#8217; no menu do openbox, e ser capaz de reiniciar e desligar o sistema sem precisar ficar digitando comandos e dando a senha do root. Qualquer dúvida, é só colocar nos comentários.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeditux.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeditux.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeditux.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeditux.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeditux.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeditux.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeditux.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeditux.wordpress.com/287/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeditux.wordpress.com&amp;blog=7183836&amp;post=287&amp;subd=jeditux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeditux.wordpress.com/2011/08/25/shutdown-no-openbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4eec321d4316e16f3cbb269410e2357b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fernandolb</media:title>
		</media:content>
	</item>
	</channel>
</rss>
