Vim 2

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Vim 2 as PDF for free.

More details

  • Words: 14,800
  • Pages: 20
Lição 5 - Acesso ao texto: Buscando ocorrências Os comandos de busca e de substituição são possivelmente os mais difíceis e elaborados do Vim. Suas combinações sintáticas são extensas e com eles encontramos todo tipo de strings e pedaços de texto. A versatilidade, assim como a complexidade, devem-se ao uso que se pode fazer das expressões regulares, ou seja, dos padrões de texto que usamos para encontrar o exato trecho de texto que procuramos. Não será apresentada nesta página a utilização dos comandos de substituição, pois esta lição se destina à operacionalidade de leitura, consulta e análise no Vim, e não da edição. Naturalmente, também não especificarei todos os parâmetros ou opções possíveis que podemos passar às buscas, visto que existe uma infinidade deles. Aconselho que os interessados e necessitados busquem por conta própria os recursos de que precisam no manual de ajuda do Vim digitando ' :help :/ '. Aprenderemos aqui os comandos de busca mais básicos e importantes. Como alguns devem saber, a barra ' / ' é um comando de busca convencionado em silêncio entre os criadores de software para Linux. Digite ' / ' em um navegador, em um processador de texto ou em um gerenciador de pacotes e será possível realizar uma busca. No Vim não é diferente. Em modo Normal ao digitar ' / ' é iniciado um comando de busca em modo linha de comando, ou seja, sujeito às mesmas regras de operação que os comandos iniciados por ' : '. No Vim, o mesmo comando de busca pode ser realizado no sentido inverso, ou seja, a partir do cursor e para cima, digitando ' ? ' no lugar de ' / '. Porém, fora os comandos de busca no texto que suportam a sintaxe para buscarmos todo tipo de ocorrência, serão apresentados primeiramente quatro comandos simples de busca de caracteres na linha corrente. Não somente estes quatro comandos de busca de caracteres, mas todas as buscas que são realizadas movem o cursor para a posição da ocorrência encontrada. Portanto, todos os comandos de busca poderiam ser, em algum sentido, também considerados como comandos de movimentação do cursor. Ainda que eles possam e até devam ser utilizados com essa finalidade, esta não é a função mais importante de um comando de busca. Os quatro comandos que serão apresentados agora procuram um caractere especificado na linha atual do cursor e o move até a ocorrência. O comando " f 'caractere' " procura a primeira aparição do caractere à frente do cursor na linha atual. Já o comando " F 'caractere' " faz a mesma busca atrás do cursor. Este é movimentado até o caractere encontrado. Ação: digite " f 'caractere' " para mover o cursor até a primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! Ação: digite " F 'caractere' " para mover o cursor até a primeira ocorrência do caractere especificado encontrada antes da posição atual do cursor! Os próximos dois comandos buscam caracteres somente após o caractere do cursor na linha atual. Eles se diferenciam, no entanto, por moverem o cursor para antes ou depois do caractere encontrado. " t 'caractere' " move o cursor até a posição anterior do caractere especificado encontrado na linha atual à frente do cursor. " T 'caractere' " faz o mesmo, mas posiciona o cursor uma coluna após o caractere encontrado. Ação: digite " t 'caractere' " para mover o cursor até a posição imediatamente anterior à primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! Ação: digite " T 'caractere' " para mover o cursor até a posição imediatamente posterior à primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! Como podemos supor, é possível informar um valor numérico antes de todas estas buscas para encontrar a enésima ocorrência do caractere especificado. Outros dois comandos que convém explicar são os de repetição de buscas. ' ; ', após a realização de uma busca com ' f ', ' F ', ' t ' ou ' T ' realiza a última busca novamente e ' , ' da mesma forma a repete, mas no sentido inverso. Ação: informe um valor numérico antes de um dos comandos de busca de caracteres na linha corrente para encontrar a sua enésima aparição! Ação: digite ' ; ' para realizar a última busca novamente e sua movimentação de cursor ao próximo caractere que estiver à frente do cursor; digite ' , ' para fazer a mesma busca na linha atual para trás do cursor!

Busca simples As buscas de ocorrências no texto utilizam uma pequena sintaxe necessária para que informemos de forma razoável todas as especificações das expressões regulares que queremos encontrar. Os comandos básicos começam todos com ' / ' e a mesma busca pode ser realizada no sentido inverso, ou seja, para cima, iniciando-o com ' ? '. Assim como as buscas de caracteres na linha atual, podemos repetir a última busca com ' n ' e a mesma busca no sentido inverso com ' N '. Apesar dessa diferenciação, se sabemos que existe somente uma ocorrência no texto do padrão que procuramos, não vai haver diferença entre procurá-lo com ' / ' ou com ' ? ', pois o Vim considera para as buscas o início do texto como uma continuação do seu final em uma busca com ' / ' e o final do texto como uma continuação do início em uma busca com ' ? '. Ou seja, o Vim dá uma volta no texto quando procura por uma ou mais ocorrências até ter vistoriado todo o texto. Ele avisa quando encontra a primeira aparição após ter dado a volta, que atingiu o topo ou a base, e prossegue a busca na outra ponta: "search hit BOTTOM, continuing at TOP", no caso do aviso de que foi realizada uma volta para cima (logo, em uma busca com ' / '); e "search hit TOP, continuing at BOTTOM", quando uma volta para baixo foi feita durante a busca (neste caso uma busca com ' ? '). Como é razoável pensar, se buscamos algo a partir do meio do texto, ou seja, com o cursor no meio do texto, seja para cima ou para baixo, o Vim dará uma volta até ler todo o texto em sua procura. Pelo mesmo motivo, se iniciamos uma busca para baixo ' / ' com o cursor posicionado no primeiro caractere do texto, ou na primeira coluna da primeira linha do arquivo, o Vim certamente não dará volta alguma, encontrando ou não uma aparição da objeto de busca.

As buscas, em princípio, são case sensitive, ou melhor, são sensíveis ao tipo de 'caixa' dos caracteres, se são caixa baixa ou caixa alta. Logo, se procurarmos a palavra 'ocorrência', a busca não encontra a palavra "Ocorrência" ou mesmo "ocoRRência". Por outro lado, a busca simples reconhece strings que sejam, ao nossos olhos, somente parte de outra. Logo, se buscarmos "ência", encontramos o trecho "ência" de "ocorrência" (assim como em "Ocorrência" e em "ocoRRência"). Essa característica da busca é muito natural, visto que os espaços e outras unidades invisíveis que identificamos entre as palavras são igualmente caracteres do ponto de vista do editor. Esta é, aliás, a mesma característica que nos permite procurar as ocorrências de uma letra dentro das palvras de uma linha, por exemplo. O comando de busca de string mais simples possível tem a forma ' /'. Experimente. Ação: digite '/' para encontrar a primeira ocorrência da string "texto" na linha após o cursor! Busca Introdução

completa às

expressões

regulares

A princípio, o sistema de busca simples satisfaz àqueles que procuram uma string em um texto redigido. Na verdade, em geral os processadores de texto e até os editores oferecem somente ferramentas de busca padrão, visto terem em mente usuários que editam e consultam textos como redações e livros. Naturalmente as ferramentas do Vim são altamente capazes de atender aquelas pessoas que pretendem escrever também cartas, artigos e etc. O Vim, no entanto, é um editor especialmente desenhado para a edição de códigos, de textos técnicos e de arquivos de configuração. Nestes arquivos só procurar por uma expressão pode ser obviamente inútil, visto que muitas vezes existem palavras e strings que se repetem, como, por exemplo, em valores de colunas. Nestes casos não nos é suficiente buscar por uma ocorrência mesmo com a definição de valores numéricos para a busca. Precisamos, muitas vezes, procurar por uma mesma expressão repetida, mas que é cercada por características que a distingue, como sua posição na linha e os tipos, tamanhos e quantidade de caracteres que a antecedem ou que a sucedem, por exemplo. Ou outras muitas vezes precisamos visualizar todas as expressão que não compartilham nenhum caractere idêntico, mas somente caracteres que possuam alguma espécie de familiaridade que definimos. Este uso, podemos dizer, é uma terceira função de acesso ao texto de que podemos usufruir com os recursos da ação de busca. O primeiro uso possível de uma busca é a simples movimentação do cursor. Podemos fazer uma busca não para "descobrir" uma ocorrência, mas simplesmente para movermos o cursor rapidamente para ela, como é usualmente o uso de buscas em linha. O segundo uso que podemos dar à busca é a típica procura por uma determinada aparição de expressão, caractere, frase ou string perdida. Normalmente é um uso precioso no caso de precisarmos encontrar uma ou mais ocorrências em um texto muito grande ou mesmo ocorrências complexas em um texto confuso ou de leitura difícil. A terceira utilidade que podemos dar à ferramenta de busca, considerando que ela seja suficientemente elaborada, é a procura por e/ou a seleção (colorir, marcar) de uma ou de mais expressões específicas entre as várias que muitas vezes são até obviamente visíveis, que possuam características singulares que as diferenciam. Este é o uso que fazemos da busca quando queremos selecionar todas as palavras da primeira coluna de uma tabela e ignorar todas as palavras de todas as outras colunas por exemplo, não importando os caracteres das expressões elas mesmas. Também a usamos quando precisamos de encontrar entre várias frases idênticas, as únicas que precedem um ponto final seguido de uma letra maiúscula qualquer - observe que se fosse uma letra maiúscula específica, seria possível incluí-la na string de busca! Todos esses recursos que completam a ferramenta de busca do Vim são realizados através da inclusão das chamadas expressões regulares no comando de busca. Porém se vamos incluir caracteres dentro do comando de busca que não deverão ser interpretados como sendo literais, mas sim como de controle, certamente teremos de respeitar uma sintaxe que permite o Vim entender o comando. Os comandos de busca possuem uma sintaxe não somente elaborada, mas especial se comparada à dos outros comandos do Vim em geral. Além do verbo de busca, do objeto procurado e do seu valor numérico, existe um outro parâmetro que determina a realização da ação de busca. O Vim precisa saber em que região do texto a busca será realizada. Em uma busca precisamos dizer onde pretendemos procurar a ocorrência. Esta região pode ser especificada de diversas maneiras inteligentes, mas caso nenhuma região seja informada, assume-se por padrão que se procura o objeto da busca na linha em que o cursor se encontra atualmente. Como informá-lo sobre a região da busca? Devemos especificar um trecho do texto apontando para objetos que marcam seu início e seu fim. Ou seja, selecionar a região apontando os seus objetos limites. Este é o formato típico do parâmetro região dos comandos de busca, mas podemos também informar um parâmetro simples, com apenas um valor, para apontar a regiões descritíveis com um só objeto em casos especiais como no caso do objeto ser o texto todo, representado pelo caractere ' % '. Este parâmetro de região de texto somente se mostra necessário nos usos da busca aliados à ferramenta de substituição de ocorrências, que veremos quando estudarmos a lição de texto, na segunda parte do curso. A sintaxe dessa ferramenta de substituição de texto respeita a sintaxe de busca simples e completa, sendo aquela somente um apêndice a esta. Deve-se, portanto, atentar ao máximo à sintaxe das buscas, que provavelmente é uma das ferramentas mais difíceis do Vim. Como foi dito, certamente vai haver caracteres que não serão interpretados literalmente - metacaracteres - se quisermos especificar características gerais a partir de dentro do comando de busca. Esses caracteres de controle podem especificar uma busca por ocorrências de expressões que estejam no início da linha ou no final, expressões com caracteres únicos e quaisquer indeterminados, expressões ou parte de expressões que estejam especificamente no início ou no final de outras palavras, ou até strings cujos caracteres sejam quaisquer dentro de um conjunto de caracteres de determinado tipo. Existem ferramentas também para o armazenamento dos padrões encontrados em buffers e ferramentas para a repetição da última especificação de expressão regular em uma nova busca. Provavelmente a função mais básica de todas as expressões regulares seja a representação de um caractere qualquer. Como o asterisco em sistemas Unix e sistemas baseados no DOS ( como o FreeDOS) o símbolo ' . ' representa a aparição de um caractere único qualquer, simples assim. Um comando de busca completo que utilize ' . ' em uma sintaxe simples tem o formato " /(s).(s) ". Foi escrito assim pois o símbolo ' . ' pode ou não aparecer junto de uma string, o que foi indicado com os parênteses, que indicam um uso optativo. Façam seus testes! Ação: digitem /(c).(c) para buscar por uma ocorrência qualquer de um único caractere em uma determinada posição da string dada! Entretanto, construir um comando do tipo " /. " resulta na busca por qualquer caractere possível, ou seja, encontraríamos todos os caracteres e o cursor andaria, em um texto normal, praticamente casa por casa. Vale notar que os caracteres invisíveis ou fantasmas, espaços, tabulações, retornos de linha e outros não são possibilidades do símbolo ' . ', o que pode tornar o comando citado acima útil no caso de querermos manipular ou consultar um texto com raros caracteres vísiveis distribuídos em um vazio amplo e aleatório de caracteres fantasmas. Imagine buscar a olho nu todas as ocorrências de "x" que se siga a uma string qualquer (que neste caso são

sempre valores binários) em um arquivo texto em proporções gigantescas de dezenas ou centenas de linhas como o do exemplo abaixo: _________________________ x 1110zy x e x x 2sd 1 x web ge 01100 p 5y x 01010 001x 011 x 3 73 x x 11 x 10101 2f x 1010x :%s/M$/#2&!%@arg/g 0101 010 0001 e e9 x x x 1011100 x 6.4vim 0111 x 10101x 2e1001x 10100011 A2F0 x x x _________________________ Seria possível achar aqui o que precisamos com um padrão de busca que utilize o símbolo ' . ' com o comando " /.x " . Porém essa é uma de algumas possíveis soluções ao nosso problema. Nosso senso e capacidade de solução se aperfeiçoará na medida em que aprendermos a montar mais expressões regulares. Mas e se eu quiser buscar as ocorrências do ponto final? O Vim procurará por qualquer caractere? Como o símbolo ' . ' é por padrão interpretado como um metacaractere, caso queiramos procurar pelo caractere ponto ele mesmo devemos inserir o símbolo que indica literalidade ' \ ' antes do nosso metacaractere a ser interpretado literalmente. Ou seja, se quisermos procurar pela string "fim." devemos digitar "/fim\.", pois se digitarmos "/fim." vamos encontrar além da string que procurávamos expressões como "fim!" ou "fim?",o seja , "fim" com qualquer caractere em seguida. Alternativamente a construir uma busca para cada padrão que procuramos, o que daria bastante trabalho se precisarmos fazer de forma intercalada e mais de uma vez em buscas complexas, podemos construir um comando de busca duplo. Nele informamos mais de um padrão que queremos encontrar, e buscaremos as aparições de cada expressão indicada, ou seja, o comando encontrará na ordem do texto cada ocorrência de cada padrão indicado. O símbolo responsável por essa estrutura é o pipe: ' | '. Como queremos que seja interpretado como um meta-caractere e por padrão não era para o ser, devemos antecedê-lo com a barra invertida, ou seja, acompanhá-lo desta forma '\|'. Logo, um comando desses teria o formato " / s1 \| s2 ". Ou seja, procure pela string um e pela string dois. Se quisermos procurar por mais de dois padrões simplesmente concatenamos as expressões com o símbolo ' \| ', como em " / s1 \| s2 \| s3 \| s4 ". Ação: digite / s1 \| s2 \| s3 \| s4 para buscar as ocorrências de todas as strings informadas! Observem o conteúdo de um texto como este:

txt txt txt txt

txt txt txt txt

txt txt txt txt

txt txt txt txt

Muitas vezes existem strings repetidas que impedem que encontremos e selecionemos o que precisamos com os recursos de uma busca simples. Pode ser o caso de precisarmos, por exemplo, de selecionar especificamente as strings repetidas que finalizam as linhas, o que na tabela equivale a todas as quatro últimas expressãos "txt": txt txt txt txt

txt txt txt txt

txt txt txt txt

txt txt txt txt

Podemos precisar também, por exemplo, encontrar em um texto somente as letras maiúsculas que iniciem linhas novas, ou exclusivamente pontos finais que as finalizem. Para satisfazer este tipo de necessidade utilizamos dois símbolos que indicam a regularidade de iniciar ou de terminar linhas procurada nas expressões. Inserir ' ^ ' imediatamente antes da string, ou seja, no início do comando, indica ao Vim uma busca por uma expressão que deve estar no início de uma ou de mais linhas; por outro lado, se digitarmos imediatamente após a string procurada o símbolo ' $ ', encontramos somente as ocorrências da string estipulada que estejam no final das linhas. Voltando ao nosso exemplo, o comando " /txt$ " resolve o nosso primeiro problema, das palavras da última coluna, enquanto " /^txt " resolveria o problema de termos de selecionar exclusivamente as palavras da primeira coluna. Façam seus testes! Ação:

digitem

/^s

para

procurar

as

ocorrências

da

string

'

s

'

que

estejam

exatamente

Ação:

digitem

/s$

para

procurar

as

ocorrências

da

string

'

s

'

que

estejam

exatamente

em em

inícios

de

linha!

finais

de

linha!

Como podemos imaginar, se quisermos buscar os próprios símbolos literais ' ^ ' ou ' $ ' basta digitarmos " \^ " ou " \$ ". No entanto, note que estes são símbolos só são interpretados como meta-caracteres se estiverem em posições em que eles fariam sentido como metacaracteres! Ou seja, se buscamos pela string " R$ 1,00 ", não precisamos incluir a barra invertida no comando de busca. Mas se

procuramos exclusivamente as strings" M$ " na linha " M$? Eu não apoio a M$ ", temos de informar que o cifrão deve ser lido literalmente, com " /M\$ ", caso contrário a busca encontrará não apenas o último " M$ ", mas assim como o final de outras linhas que terminem com " M ". E se quiséssemos encontrar somente a última aparição de " M$ " na linha exemplificada? Agora teríamos que buscar assim: " /M\$$ ". E, por fim, para buscar somente a primeira aparição, escreveríamos " /^M\$ ", a não ser caso terminemos o comando com outro caractere literal, como seria em "/R$ 1,00", que se buscado no início de linha seria "/^R$ 1,00" e, no final, "/R$ 1,00$". As mesmas regras valem para o símbolo ' ^ ', mas elas se aplicam para o início do comando construído. Também pode ser útil buscar somente as ocorrências de um determinado padrão que iniciem ou terminem palavras, em oposição a linhas. Ou seja, podemos buscar somente as aparições da letra ' o ' que finalizem as palavras. Neste caso o cursor marcaria somente letras ' o ' como em " subversão ", " anarquismo " e a segunda aparição da letra em " outro ". Para encontrar padrões no início de palavras usamos o meta-caractere ' < ', e para encontrá-los no final usamos o ' > '. Como estes não são símbolos metacaracteres por padrão, devemos informar ao Vim inserindo a barra invertida ' \ ' antes deles. Logo, um comando de busca poderia ser " / \ < 123 ", para encontrar a string ' 123 ' somente nas suas aparições no início de palavras, que poderiam ser, por exemplo, como ' 1234567890 '. Não encontraríamos o trecho ' 123 ' em uma palavra como ' 0123456789 ', por exemplo. Para encontrar somente os últimos caracteres de uma palavra que sejam ' 789 ', digitaríamos o comando de busca " / 123 \ > ". Com algum raciocínio vemos que se pode usar esta ferramenta para encontrar um padrão em suas ocorrências que sempre formem uma palavra separada. Podemos querer encontrar somente as strings ' ana ', e não ' analógico ' ou mesmo ' Poliana '. Para tanto, podemos escrever " / \ < ana \ > ". Como podemos imaginar, para procurar por qualquer expressão que contenha os caracteres ' < ' e/ou ' > ' basta incluí-los nas buscas sem qualquer barra, como na busca " /<Esc> ", que encontrará todas as aparicões de " <Esc> " em quaisquer posições de linha e de palavra, sendo uma palavra por si só ou não! Ação:

digite

/

\

<

Ação:

digite

/

s

\

s >

para para

encontrar encontrar

a a

string string

em em

suas suas

ocorrências ocorrências

que que

iniciem

uma

palavra!

finalizem

uma

palavra!

Ação: digite / \ < s \ > para encontrar a string em suas ocorrências que sejam uma palavra! Aprenderemos agora um conceito muito importante sobre expressões regulares. Ele será chamado de átomo. Existem alguns símbolos que podem ser incluídos em comandos de busca que só se aplicam e fazem sentido se seguirem um átomo. Átomo é a designação de um ou mais caracteres que ainda não tenham sido determinados. O átomo leva esse nome pois é uma estrutura que é tratada por outros símbolos como sendo uma unidade de busca. Tipicamente, designamos um átomo de busca indicando os possíveis caracteres dentro de colchetes como no comando " / [ c c c c... c ] " . Um comando com esse formato buscará quaisquer caracteres que estão entre os listados. Podemos também buscar quaisquer caracteres que não estejam entre os listados com o símbolo ' ^ '. Repare com atenção que este é o mesmo símbolo que, do lado de fora dos colchetes, se colocado no início do comando, significa a busca pela expressão dada nos casos em que estejam no início das linhas. Este símbolo se opõem ao ' $ ', quando fora dos colchetes. Infelizmente, o acento circunflexo quando dentro dos colchetes significam a negação das possibilidades indicadas no átomo. Um comando do formato " / [ ^ c c c c... c ] " buscará no texto quaisquer caracteres que sejam diferentes das possibilidades indicadas no átomo de busca. Para ilustrar a confusão um comando do tipo " / ^ [ ^ c c c c... c ] " encontrará quaisquer caracteres que não são possibilidades da lista e que estejam no início de uma ou mais linhas. Ação: digite / [ c c ] para buscar as ocorrências de todos os caracteres listados entre os colchetes! Açãos: digite / [ ^ c c ] para buscar as ocorrências de todos os caracteres que não estão listados entre os colchetes! Para evitar que tenhamos de digitar muitos caracteres possíveis que componham um átomo podemos listá-los utilizando o símbolo hífen, ' - '. Ele indica todos os caracteres que estão contidos em um escopo da ordem, por padrão ASCII, de caracteres. Por exemplo, a construção " [ a - z ] " inclui nas possibilidades de busca todas as letras minúsculas do alfabeto romano, " [ 1 - 5 ] " todos os cinco números, 1, 2, 3, 4 e 5. Um comando de busca que pretende encontrar todas aparições dos números 1, 2 ou 3 pode ser construído assim: " / [1 - 3] ". Façam seus experimentos! Ação: digite / [ c - c ] para buscar as ocorrências de todos os caracteres entre os colchetes que estão listados implicitamente na ordem de caracteres do escopo indicado pelo símbolo - ! Para elaborar nossa expressão regular, temos a possibilidade de faz algumas referências aos átomos que construímos. Podemos buscar não somente pelas aparições das possibilidades de um átomo, mas inclusive buscar por nenhuma ou mais aparições consecutivas de cada possibilidade, ou mesmo buscar por ao menos uma aparição ou mais de um dos caracteres listados. Determinamos a procura de uma ou mais ocorrências inserindo o símbolo ' \+ ' após o átomo formado. Um comando assim teria o formato " / [ c ] \ + ". Em geral, para a maioria das finalidades, a diferença entre fazer uma busca por cada aparição singular de um caractere e fazer uma busca por uma ou mais aparições desse caractere é que ao percorrermos pelas ocorrências encontradas com os comandos ' n ' ou ' N ' o Vim saltará as aparições consecutivas do caractere buscado. Determinamos a busca por nenhuma ou mais aparições das possibilidades informadas inserindo o símbolo ' * ' após o átomo de busca. Um comando desse teria a forma " / [ c ] * ". Ora, mas as buscas em que uso o asterisco encontram todos os caracteres do texto! Ela não serve pra nada! Mas observe que caso ela encontre aparições consecutivas de um dos caracteres que estava a procurar seu comportamento será como o da busca por uma ou mais ocorrências: saltará o conjunto de ocorrências seguidas. Imagine um texto em que a maioria dos caracteres sejam repetidos, e que buscamos justamente pelas diferenças! Além do mais, caso formemos no comando de busca uma expressão regular complexa, ou seja, que forme um padrão muito exigente, a presença do asterisco será de uma aplicação eventual, que só será testada caso outros requisitos da expressão também sejam satisfeitos. Ação: digite / [ c ] \ + para buscar por uma ou mais aparições das possibilidades entre colchetes! Ação: digite / [ c ] * para buscar por nenhuma das possibilidades entre colchetes! Apesar de ter apresentado cada recurso das expressões regulares do Vim separadamente, os comandos de busca pelo texto serão em geral formados com combinações de todas essas ferramentas. Experimente conjugá-las na construção de comandos cada vez mais específicos de busca!

Lição 6 - Transitando entre os modos Normalmente um editor de textos sempre nos dispõe um cursor para a inserção de caracteres ou nos permite inseri-los após um ou dois clics de um mouse. A verdade é que o Vim é fundamentalmente um editor que trabalha em modo texto e a partir da linha de comando. Existe, para quem preferir, uma versão do Vim destinada ao modo gráfico, o chamado Gvim. Existe também um tipo de Vim que se pretende funcionar como um editor simplista: o Easy Vim Evim. No Vim, no entanto, precisamos para escrever habilitar um modo de operação específico, e então nele operamos praticamente como em um editor simples até querermos gravar e sair. O Vim é assim porque se acredita que vai ser exigido muito dele. Quando falamos em "modos de inclusão" nos referimos aos modos de inserção e de substituição, que para quase todos os fins são análogos. Já conhecemos um comando simples que nos permite entrar em modo de inserção a partir do modo Normal, o ' i ' de insert. Quando apertamos ' i ' o cursor mantém-se para inserção exatamente na posição em que estava em modo Normal, e nada mais acontece. Ou seja, esta provavelmente é a maneira mais básica de se transitar para o modo de inserção. Existem pelo menos doze outras. Vocês estão analisando e editando o texto em modo Normal e percebem que querem começar a escrever a partir do caractere que se segue imediatamente após a posição atual do cursor. Não é suficientemente simples andar uma casa para a direita com ' l ' e apertar ' i ' ? Pois é, a verdade é que podemos fazer isso com um único comando (ao invés de dois) com ' a '. Experimente. Ação:

digite

'

a

'

para

iniciar

o

modo

de

inserção

com

o

cursor

um

caractere

a

frente

da

posição

atual!

Se quisermos começar a escrever imediatamente no final da linha corrente podemos digitar ' A '. Mais ou menos analogamente ' I ' (' i ' maiúsculo) inicia o modo de inserção com o cursor no início da linha corrente. Se quisermos começar a escrever no início da linha onde atualmente está o cursor digitamos ' I ' e já podemos escrever. Ação: Ação:

digite

'

I

digite

'

'

('

i

A

'

'

maiúsculo)

para

para

iniciar

o

modo

iniciar

o

modo

de

de

inserção

inserção

com

com o

o

cursor

cursor

no

no

início

final

da

da

linha linha

atual! atual!

Estes dois comandos mudam a posição do cursor ao longo da linha atual. Existem outros dois comandos que nos permitem iniciar a inserção de texto a partir de uma nova linha que pode ser criada tanto acima quanto abaixo da linha corrente. O comando ' o ', cria uma linha após a atual em modo de inserção. Ele é usado para quando vamos continuar o texto com um novo parágrafo ou linha, se for um script, por exemplo. Já o comando ' O ' abre uma nova linha entre a corrente e a linha imediatamente acima desta. Ação: digite ' o ' para iniciar o modo de inserção com o cursor em uma nova linha imediatamente abaixo da atual! Ação: digite ' O ' para iniciar o modo de inserção com o cursor em uma nova linha imediatamente acima da linha atual! Como visto em "Sintaxe dos comandos", existem dois tipos de verbos, os simples e o verbos pendentes. Existem duas duplas de comandos de controle para iniciar o modo de inserção que se distinguem em nada senão em suas categorias de verbos. As duas duplas de comandos compartilham a caraterística de recortar um objeto de texto antes de iniciar o modo de inserção. Aqulela com verbos simples é ' s ' e ' S '. O comando ' s ' recorta o caractere sob o cursor em modo Normal e entra em modo de inserção com o cursor exatamente na mesma posição (considerando o recuo de um caractere que a linha faz), tudo com somente o dígito ' s ', ou seja, com somente um parâmetro aparente. Já o comando ' S ' recorta toda a linha corrente antes de entrar em modo de inserção, e o cursor permanece pronto para a inserir texto a partir do início da linha em branco. Teste este dois comandos para compará-los com os comandos de verbos pendentes. Ação:

digite

'

s

'

para

recortar

o

caractere

sob

o

cursor

e

iniciar

o

modo

de

inserção!

Ação: digite ' S ' para recortar toda a linha corrente e iniciar o modo de inserção no início da linha em branco! A outra dupla de comandos também recorta o texto antes de nos permitir incluir novos dados. Porém, um desses comandos espera um segundo parâmetro explícito para a determinação do objeto da ação. Esse parâmetro pode ser dado com um direcional, mas como vimos, verbos como esse comportam diversos tipos de objeto, como palavra, linha, parágrafo, texto e inclusive objetos combinados, exatamente como vimos na lição "Acessar o texto" na página "Movendo o cursor". O comando ' c ' espera a indicação do objeto para recortá-lo e iniciar o modo de inserção. Se apontamos horizontalmente, para as colunas, ele recorta um caractere somente. Apontando para a direita após ' c ', o comando se comporta exatamente como quando digitamos ' s '. Apontando para a esquerda o caractere anterior ao que está sob o cursor é recortado e o cursor recua uma coluna juntamente com toda a linha. Ou seja, ' c ' apontado para a esquerda é o mesmo que mover o cursor uma casa para a esquerda e digitar ' s '. Podemos também apontar verticalmente, e neste caso ' c ' recortará duas linhas inteiras, iniciando o modo de inserção com o cursor em uma linha em branco. O objeto também pode ser indicado digitando novamente ' c ', repetindo o comando simples, parâmetro que é um tipo de padrão no Vim para a execução de verbos pendentes. Já digitando 'cc' recorta toda a linha, mas somente a linha atual, deixando o cursor no início de uma linha em branco. Como disse, é claro, podemos indicar qualquer outro objeto a ser recortado, experimentem digitar '3wc', por exemplo. Digitando ' C ', por sua vez, pode também recortar toda uma linha, mas só se o cursor estiver anteriormente posicionado no início dessa. Seu funcionamento é recortar todo o texto existente na linha a partir da atual posição do cursor, ou melhor, seu objeto é "o texto da linha após o cursor". Esse comando não é realizado com um verbo pendente, mas sim simples. É importante dizer que todos esses quatro comandos, ' s ', ' S ', ' c ' e ' C ' comportam um parâmetro numérico para contar os objetos sobre os quais agir. Como sabemos, para isso devemos inserir o valor numérico antes do restante do comando, como '2s' que recorta dois caracteres. Ação: Ação:

digite digite

' '

c C

' '

com para

um recortar

parâmetro todo

texto

de

objeto

existente

para na

recortá-lo

linha

corrente

e

iniciar

após

a

o

modo

posição

atual

de

inserção! do

cursor!

Ação: indique um valor numérico e digite quaisquer dos quatro comandos anteriores para realizar um comando personalizado! Como já foi explicado o modo de substituição é normalmente entendido como um sub-modo derivado do modo de inserção, visto que desempenha um papel semelhante e que não possui as mesmas alternativas de inicialização. O modo de substituição, ao contrário, possui apenas uma maneira de ser iniciado a partir do modo Normal: ' +R ', ou melhor, ' +<Shift>+r ', onde ' R ' tem como origem Replace em inglês, que é substituir. Outra maneira de iniciá-lo é com o botão ' '. Podemos considerar este modo como um modo independente do de inserção, uma vez que ele apresenta as mesmas relações que este com o outros modos, como veremos em tópicos futuros dessa lição. Ação: digite +R para iniciar o modo de substituição! Como já foi explicado, existem modos derivados resultantes de combinações entre os modos básicos. Caso estejem inseguros sobre o que são, quais são ou para que servem os modos de operação, é aconselhável que reler a seção "Modos de operação" do livro introdutório deste curso "Noções preliminares". Um exemplo de interação entre o modo Normal e o de inserção poderia ser quando o objeto da ação de um comando em modo normal é o texto que digitamos em modo de inserção. Fazemos isso passando um comando da forma " n ' i ' " entrando em modo de inserção no momento de passar o parâmetro de objeto. O parâmetro de verbo foi desconsiderado pois neste caso será por padrão a repetição do objeto "texto digitado". Depois da sessão em modo de inserção apertamos <Esc> e voltamos para o modo Normal e o comando é completado e executado. Esse parece de fato ser um exemplo de interação entre dois modos, mas considerado uma sessão de um modo derivado a parte ele não é. Basicamente, existem três modos derivados. Todos são combinações realizadas entre os modos inserção/substituição e um dos três modos Normal, Visual e de Seleção. Tanto o modo de inserção quanto o modo de substituição podem derivar um modo novo com cada um desses três modos básicos. Vamos considerar que existem três, pois os modos de inclusão de caracteres, ou seja, os modos de inserção e de substituição, serão tratados como duas variações de um mesmo modo, que são chamados aqui de modos de inserção/substituição ou de modos de inclusão. Dessa forma existem seis modos derivados possíveis, que são: Modo > > >

Modo Modo Modo

de

de Normal visual seleção

= =

Modo de > Modo Normal = > Modo visual = > Modo de seleção = modo de seleção de substituição;

=

inserção modo modo modo modo modo

de

com normal visual seleção

substituição normal visual

de de de de de

: inserção; inserção; inserção; com: substituição; substituição;

O primeiro modo derivado que veremos é o modo normal de inserção, que normalmente não é o mais utilizado. Sua utilidade pode ser ofuscada pelo uso especial que se faz em geral do modo visual de inserção/substituição. Apesar disso, o uso do modos Normal de incusão pode virar parte constante do trabalho de edição. Os modos Normais de inclusão têm como função permitir um trânsito acessível entre os modos Normal e de inserção e entre os Normal e de substituição. Sua utilidade pode acabar sendo esquecida visto ser antes uma facilitação e não uma ferramenta indispensável. Vale a pena praticar seu uso para que se torne um movimento natural de acesso e retorno automático aos dois (ou três, com o de substituição) importantes modos. Ele só pode ser iniciado de dentro dos modos de inclusão, e o comando possível é apenas esse: ' +o '. Se de dentro do modo de inserção digitamos ' +o ', entramos em modo Normal de inserção. Caso o fizermos a partir do modo de substituição entramos no modo Normal de substituição. Experimentem. Podemos notar que ao digitar ' +o ', o nome do modo no canto inferior esquerdo irá mudar a sua apresentação, colocando-se entre parênteses e trocando suas letras para minúsculas. Estamos em modo Normal de inserção ou de substituição. E agora? Posso desenhar uma margem no meu texto? Não podemos fazer nada de especial senão passar um único comando de modo Normal. O Vim em modo Normal de inclusão espera a execução de um comando de edição e retorna ao modo de inclusão original após sua realização. Útil não é mesmo? Uma maneira prática de digitar <Esc>, um comando e novamente ' i ' ou ' R ', afinal, às vezes acontece de precisarmos fazer uma simples ação de edição para poder continuar a escrever, e pode acabar sendo perda de tempo ficar passeando lentamente entre esses modos de operação. Naturalmente, podemos apertar <Esc> para sair deste modo direto para o modo Normal completo. Podemos também retornar manualmente ao modo de inclusão digitando novamente o comando para que ele seja iniciado, como se estivéssemos mesmo em modo Normal. Pratiquem! Ação: digite +o em modo de inserção ou em modo de substituição para, em modo Normal de inclusão, passar um comando de modo Normal e voltar a digitar! Modo visual

É recomendado que façamos uma nova leitura da descrição do modo visual no livro "Noções preliminares": ----------------O modo visual pode ser visto como uma extensão útil do modo Normal, visto que temos acesso às mesmas operações de edição. Este modo é destinado à seleção de um trecho de texto com a movimentação dos cursores, que formam como uma hachura sobre as linhas a serem selecionadas. Passamos comandos como em modo Normal para manipular o trecho marcado. Ele funciona como qualquer editor visual com suporte a mouse e inclusive podemos configurar o próprio Vim para suportar a utilização de mouse. Este modo é acessado com o caractere " v " em modo Normal. Existe um recurso do modo visual que praticamente poderia ser considerado um modo derivado, o bloco visual, ou visual block. Ele é acessado com "Ctrl-v" a partir do modo Normal. Com ele podemos selecionar blocos quadrangulares de texto, como se ele fosse uma

tabela ou um quadro de caracteres sem linha, nos permitindo selecionar, por exemplo, somente uma coluna de texto para manipulação. Semelhante a este recurso é o visual line, acessível com "Shift-v" a partir do modo Normal. ---------------O modo visual é, em uma explicação simples, o modo Normal com um diferente tratamento de objetos. Enquanto em modo Normal temos de informar um objeto durante a construção do comando para realizar a ação, no modo visual o objeto informado é selecionado manualmente, e só então passamos o verbo a ser aplicado sobre ele. O modo visual é simplesmente uma ferramenta de seleção do objeto de ação para dar suporte às operações do modo Normal, tanto que são essas que funcionam em modo visual. Ele é acessado com o comando ' v '. Como explicado, existem duas alternativas ao modo visual simples para grifarmos nosso objeto de texto. Podemos também marcar o texto segundo o padrão de linhas no modo visual do tipo linha, com ' V ' a partir do modo Normal, assim como segundo o padrão de bloco no modo visual do tipo bloco, o que significa tratar o texto como um quadro, acessado com ' +v ' a partir do modo Normal. Ação: digite ' v ' em modo Normal para entrar em modo visual e grifar exatamente o trecho de texto que deseja editar! Ação: digite ' V ' a partir do modo Normal para entrar em modo visual do tipo linha e hachurar o trecho de texto a se editar por linhas! Ação: digite ' +v ' a partir do modo Normal para entrar em modo visual do tipo bloco e hachurar o trecho de texto a se editar por blocos e colunas!

Modo visual de inclusão

O modo visual de inclusão pode ser compreendido como um tipo possível de modo Normal de inclusão. Seu princípio é o mesmo: entrando nele podemos realizar até um comando e voltar para o modo de inclusão original. Este modo é, por isso, só uma ferramenta facilitadora do trânsito entre os modos. Seu uso é bastante razoável e compreensível: a partir do modo de inclusão digitamos ' +o ' e em seguida ' v '. Ao digitar ' +o ' entramos no modo Normal de inclusão, e até aqui o caminho é o mesmo. Em seguida passamos um comando, só que ele é de controle para entrarmos em outro modo! Entramos então no modo visual de inclusão e no canto inferior esquerdo vai aparecer: -- (insert) VISUAL --, ou seja, a conjunção do modo Normal de inclusão e o modo visual. Podemos também iniciar o modo visual de tipo linha ou bloco dentro do modo Normal de inclusão, se quisermos. Ação: digite ' v ' ou ' V ' ou ' +v ' a partir do modo Normal de inclusão para acessar o modo visual de inclusão e seus tipos! Modo de seleção

Relembremos

da

nossa

introdução

ao

modo

de

seleção:

---------------O modo de seleção é semelhante ao modo visual, mas ele não trabalha em cooperação com o modo Normal, ou seja, o modo de seleção não aceita comandos como o visual. Caso seja digitado qualquer caractere que possa ser imprimido entra-se em modo de inserção, ou seja, sua utilização é análoga a de um editor de texto visual simplista. Este modo é acessado através do comando "gh", de dentro do modo Normal. O comando "Ctrl-g", a partir do modo visual, é uma das outras alternativas que serão apresentadas mais tarde. Existem também os recursos de selection block e selection line no modo de seleção, ativados com "gH" e com "g_Ctrl-h" respectivamente. ----------------O modo de seleção não é análogo ao modo visual, sendo uma ferramenta do modo Normal. Ele é mais como um suporte para o modo de inserção. Seu funcionamento é semelhante à operacionalidade padrão de um editor ou processador de texto gráfico qualquer com suporte a mouse. Selecionamos um trecho do texto e podemos usar nossas teclas como em modo de inserção. Se digitarmos ' d ' sobre o trecho selecionado substituiremos o trecho de texto por ' d ', se teclarmos com um trecho selecionado o trecho de texto é removido. O modo de seleção é provavelmente um modo bastante familiar e é iniciado a partir do modo Normal com ' gh '. Assim como no modo visual, existem duas formas de selecionar o texto, uma é através do modo de seleção de tipo linha (com ' g_+h ') e modo de seleção de tipo bloco (com ' gH '). Ação:

digite

'

gh

'

a

partir

do

modo

Normal

para

inserir

ou

deletar

texto

sobre

um

trecho

selecionado!

Ação: digite ' g_+h ' a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado linha a linha! Ação: digite ' gH ' a

partir do modo

Normal para inserir ou deletar

texto

sobre

um trecho

selecionado

por bloco!

Modo de seleção de inclusão

Quem entendeu o modo visual de inclusão facilmente pode deduzir como funciona o modo de seleção de inserção ou de substituição. Como o outro, pode ser entendido como um dos usos possíveis do modo Normal de inclusão, visto que é acessado a partir deste. Para

entrar em modo de seleção de inclusão, primeiramente entramos no modo Normal de inclusão com ' +o ' a partir de um dos modos de inclusão. Lá dentro então digitamos ' gh ' para entrar no modo de seleção. O modo Normal de seleção nos permite passar um comando antes de voltarmos a inserção de caracteres, no entanto, entre os comandos que podemos passar estão aqueles de inicialização de modos, e entre estes os que fazem diferença são os comandos para entrar em modo visual e em modo de seleção; afinal, entrar em modo de inserção ou mesmo apertar <Esc> de dentro do modo Normal de inserção só nos fará perder tempo. Pratiquem. Ação: digite ' gh ' ou ' gH ' ou ' g_+h ' de dentro de um dos modos Normal de inclusão para entrar em modo de seleção de inserção ou de substituição! Retomando nossa conversa sobre o modo "ex" inciado nas "Noções preliminares": ---------------O modo ex poderia ser considerado por alguns como uma variante do modo linha de comando, visto que ele é operado de maneira praticamente idêntica. A diferença está no controle que temos sobre a linha de comando. Enquanto em modo linha de comando se espera que realizemos uma operação e voltemos para o modo Normal, de certa forma podemos efetuar quantos comandos quisermos e nos manter como em linha de comando. No modo ex, portanto, não temos que continuar digitando " : " a cada comando e a tela não é atualizada, listando cada operação que fazemos. Por este último motivo o modo ex é ideal para que configuremos o Vim em pleno uso com um script "on-line". Para entrar em modo ex, digitamos " Q ". Também podemos iniciá-lo com " gQ ", o que funciona de forma ligeiramente diferente. Enquanto com " Q " as linhas de comando são manipuláveis somente com os comandos padrões de inserção de linhas, ou seja, com , <del> e comandos como "Ctrl-u", "Ctrl-e", etc., o modo ex iniciado com " gQ " é editável com todos os recursos do modo linha de comando, como completar automaticamente palavras por exemplo. ---------------Não há muito o que completar aqui. Para os curiosos, ex era um editor de Unix popular do qual o ed é sucessor. Como talvez tenham notado, em certo sentido o modo "ex" é como se fosse o verdadeiro modo linha de comando, do qual somente saímos se pedirmos para sair. De certa forma o modo linha de comando, frente ao modo "ex", parece uma espécie de modo Normal de linha de comando dentro do qual após realizarmos uma operação voltamos para o modo original. Podemos entender o modo "ex" como um ambiente de configuração, dentro do qual podemos passar quantos comandos de linha quisermos sem sair e sem ter sempre que digitar ' : '. Existem duas formas distintas de usar o modo "ex". Uma é acessada com ' Q ', e neste caso escrevemos o comando como se estivéssemos escrevendo uma linha de texto, com as mesmas ferramentas de edição, ou seja, os caracteres ASCII do teclado. A outra forma é inciada com ' gQ ', e neste caso podemos editar a linha com os recursos de edição padrão de uma linha de comando do Vim, assim como do shell. E como sair? Não saímos quando queremos, então, eu quero! Pois bem, passe o comando " vi " após o ' : ' padrão do modo "ex". " vi " não vem de vi, mas sim de visual, que nada tem a ver com o modo visual. Aliás, também voltamos ao modo normal digitando " visual " por inteiro. Ação: digite ' Q ' ou ' gQ ' para entrar no modo "ex" e passar diversos comandos de linha sem voltar para o modo Normal! Existem alguns outros segredos sobre mudar de modos de operação no Vim. Alguns só podem ser desvendados descobrindo certas configurações, mas em geral não deve haver problema no trânsito entre os modos se aprenderam bem o que foi ensinado nas últimas páginas. Portanto, não se preocupem em entender tudo que vai ser lido no texto abaixo, pois é apenas um apanhado sobre alguns detalhes que dizem respeito à transição entre os modos. Para todos os fins lembre de configurar o Vim para lhe informá-lo do modo atual digitando ' :set smd '; Toda esta passagem que se segue foi tirada do Manual de Referência do Vim 6.4, escrito pelo próprio criador do editor, Bram Moolenaar. Se por qualquer motivo o modo onde você está for desconhecido, você pode sempre voltar para o modo Normal digitando <Esc> duas vezes. Isso não funciona para o modo "ex", entretanto, utilize ":visual". Vocês saberão que estão de volta no modo Normal quando verem a tela piscar ou ouvirem o bipe depois de apertar <Esc>. No entanto, quando apertado <Esc> depois de usar no modo de inserção também ouvimos um bipe, mas ainda estamos no modo de inserção, digitem <Esc> novamente.

*1 Vai do modo Normal para o de inserção passando o comando "i", "I", "a", "A", "o", "O", "c", "C", "s" ou S". *2 Vai do modo Visual para o Normal ao se passar um comando não pendente, que faz o comando ser executado, ou digitando <Esc> "v", "V" ou "CTRL-V" (veja |v_v|), que simplismente pára o modo Visual sem efeitos colaterais. *3 Vai do modo linha de comando para o modo Normal: - Apertando ou , que faz o comando dado ser executado; - Deletando a linha inteira (e.g., com CTRL-U) e por último um . - Apertando CTRL-C ou <Esc>, que sai da linha de comando sem executar o comando. No último caso o <Esc> pode ser o caractere definido com a opção 'wildchar', que neste caso iniciará a completamento de linha de comando. Vocês podem ignorar isso e apertar <Esc> novamente. {Vi: quando apertando <Esc> a linha de comando é executada. Isto é inesperado para a maioria das pessoas; logo foi mudado no Vim. Mas quando o <Esc> é parte de um mapeamento, a linha de comando é executada. Se vocês quiserem o comportamento do Vi também quando apertando o <Esc>, use ":cmap ^V<Esc> ^V^M"} *4 Vai do modo Normal para o de seleção: Usando o mouse para selecionar o texto enquanto a opção 'selectmode' contiver "mouse"; Usando um comando não imprimível para mover o cursor enquanto mantém o <Shift> apertado e a opção 'selectmode' contiver a opção "key"; Usando "v", "V" ou "CTRL-V" enquanto a opção 'selectmode' contiver "cmd"; Usando "gh", "gH" ou "g CTRL-H" |g_CTRL-H|; *5 Vai do modo de seleção para o Normal usando um comando não imprimível para mover o cursor sem manter o <Shift> apertado. *6 Vai do modo de seleção para o de inserção digitando um caráter imprimível. O que estiver selecionado é deletado e o caractere é inserido; Se de

a

opção

'insertmode'

estiver

ligada,

a

edição

de

um

arquivo

começará

no

modo inserção.

*CTRL-\_CTRL-N* *i_CTRL-\_CTRL-N* *c_CTRL-\_CTRL-N* *v_CTRL-\_CTRL-N* O comando CTRL-\ CTRL-N ou pode ser usado para ir ao modo Normal a partir de qualquer outro modo. Isso pode ser usado para termos certeza de que o Vim está no modo Normal, sem provocar um bipe como o <Esc> faria. No entanto, isso não funciona no modo "ex". Quando usado depois de um comando que leva um argumento, como |f| ou |m|, o limite de tempo definido em 'ttimeoutlen' é aplicado. *CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G* O comando CTRL-\ CTRL-G ou pode ser usado para ir ao modo de inserção quando 'insertmode' está setado. Caso contrário, vai para o modo Normal. Isso pode ser usado para termos certeza de que o Vim está no modo indicado pelo 'insertmode', sem saber em que modo o Vim está. Lição 7 - Editar o texto Vamos iniciar nossos estudos sobre a edição propriamente dita. Até agora aprendemos os diversos recursos necessários para que possamos consultar e percorrer arquivos de texto com o Vim. Aprendemos o funcionamento da sintaxe de comandos em modo Normal e vários comandos de movimentação de tela e de cursor, além de como fazer buscas no texto por quaisquer padrões de strings. Esta segunda seção do curso, que diz respeito à edição, é significativamente mais simples e breve. Isto acontece porque os comandos de edição são em princípio baseados nos comandos de movimentação do cursor. Em outras palavras, estes comandos são a base para a

construção de todos os comandos de edição, pois a movimentação do cursor é, nos comandos que agora veremos, o que indicará os parâmetros objeto e valor numérico. Na verdade nas ações de movimento de cursor o verbo do comando é indicado em geral com os direcionais. Os comandos que agora aprenderemos simplesmente vão atrelar à ação de movimentar o cursor um outro verbo, o de apagar, copiar e colar. É claro que podemos também construir comandos de edição simples que possam presumir objetos e valores padrões, e vale lembrar que estamos sempre falando (a não ser se explicitado) de comandos em modo Normal. Estes comandos que se aliam aos de movimentação de cursor são comandos pendentes, ou seja, que esperam parâmtros. Vamos à prática. O comando básico de remoção é o ' x ', que equivale a apertar a tecla . No entanto, não reconhece parâmetros senão o padrão. Logo se digitado apagará um caractere. A deleção por ' x ', apesar de aceitar parêmetros, é um comando de execução imediata, e não pendente. Logo o único parâmetro que podemos passar a ele é o numérico. Tentem digitar ' 2 x ' e verão dois caracteres serem removidos. O ' x ' é designado a apagar caracteres, e seu objeto não é negociável por não ser um verbo pendente. Ação: digite (n) x para apagar (n) caractere(s)! O outro popular comando de remoção do Vim é ' d '. Este sim é um comando pendente. Vejamos o que podemos fazer com ele. Lembre dos comandos de movimentação de cursor. Se digitamos ' 2w ' movimentamos o cursor por duas palavras. Experimente agora digitar o comando ' 2wd ': verão duas palavras sendo deletadas! Tente também comandos mais ousados como ' $ d ' e ' gg G d ' e notarão que o comando ' d ' reconhece todo tipo de comandos de cursor. Repare que caso digitemos simplismente ' d ' nada acontecerá a princípio. Isto acontece justamente por ele ser um comando pendente, e assim não será executado até que passemos algum parâmetro, nem que este seja apontar em algum sentido com os direcionais. Neste caso ele apagará o objeto padrão que se aponta com os direcionais, ou seja, caractere se apontarmos para os lados e linha se o fizermos verticalmente. Como antes dito, comandos pendentes em geral têm algum comportamento padrão que reage a sua repetição, que no caso, é ' dd '. Apertar ' dd ' apaga a linha sobre a qual está atualmente o cursor - que funciona como ' D ' maiúsculo -, o que é diferente, teste isto, de digitar ' d ' seguido de um direcional vertical, pois estes apagam duas linhas, a atual e a seguinte apontada pelo direcional. Ação: digite um comando de cursor para designar objeto, acompanhado de um valor numérico, se quiser, seguido de d para apagar o objeto designado! Ação: digite dd ou D para apagar a linha sob a qual o cursor está atualmente! Existem também aqueles comandos operacionais de transição de modo Normal para o modo de inserção, que também desempenham a função de remoção. Lembrem dos ' s ' e ' S ' e dos ' c ' e ' C '. Existe um comando principal de cópia de texto no Vim. Ele é, e precisa ser, um comando pendente, caso contrário não seria capaz de satisfazer todas as condições de um comando verdadeiramente versátil do Vim. O comando é ' y ', que vem de yank. Como o comando pendente ' d ', podemos informá-lo de valores e objetos particulares que satisfazem nossas necessidades. O comando de cursor, como com ' d ', deve vir antes do verbo principal, pois como aprendemos a ordem sintática do comando é n o v, ou seja, número, objeto e verbo. As mesmas possibilidades de designação de objetos valem para este comando, ou seja, todos os movimentos de cursor são potenciais objetos dos verbos de edição. Já o comando duplicado ' yy ', como a maiúscula ' Y ', de forma semelhante ao ' dd ', copia para o buffer padrão toda a linha atual. Ação: digite y acompanhado de um movimento de cursor para copiar o objeto designado com o comado de cursor para o buffer padrão! Curiosa e inteligentemente, no Vim vários outros comandos que não o ' y ' também podem ser utilizados com a finalidade secundária de copiar um trecho de texto. Na verdade, esses outros comandos são todos aqueles de remoção ensinados (exceto a tecla ). Ou seja, quando deletamos um objeto qualquer de texto, estamos sempre também o copiando para o buffer padrão, logo tanto o comando ' x ' quanto o ' d ' e os outros de mudança de modo que realizam deleção também copiam os trechos de texto removidos. Em certo sentido, existem vários comandos de cópia de texto, dentre os quais ' y' é o único que preserva o texto como está, ou seja, sem removê-lo.

Ora, mas como poderei copiar uma string e colá-la posteriormente se estou realizando diversas remoções? Para isso podemos reservar buffers que não sejam o padrão. Para tanto devemos nomeá-los. Os nomes possíveis são os seguintes: a-z A-Z 0-9 . % # : - " Para atribuí-lo, devemos precedê-lo de uma aspas ( " ) : ' "s ' - neste caso por exemplo, estamos apontando para um buffer chamado ' s ', mas ainda não fizemos nada. Para copiar um conteúdo para um buffer chamado ' b ', por exemplo, escrevemos ' "b yy ', e copiamos a linha atual para ' b '. O último trecho de texto copiado é sempre associado também ao buffer padrão, mas se o atribuímos a um buffer nomeado podemos sobreescrever à vontade o padrão, que quando digitarmos ' "b p ', no nosso exemplo, o mesmo conteúdo antes armazenado será transcrito. Por fim, para conferir os buffers atualmente nomeados digitamos ' :reg ', de registers.

Ação: digite "cy mais o objeto de texto para o copiar para um buffer com o nome do c dado! Ação: digite :reg ou :di para ver os buffers atualmente nomeados! Para colar o trecho de texto copiado para o buffer padrão existe o comando ' p ', que vem de put. Este comando não é pendente e por isso só aceita mais um parâmetro, o de quantidade. Podemos colar n vezes o conteúdo do buffer carregado. Como outra alternativa podemos preferir colar o texto antes da posição do cursor, para isso colamos com ' P '. Caso queiram sofisticar o comando, experimentem digitar ' gp ' ou ' gP ', e o cursor terminará sempre ao final do texto colado. Ação: digite (n) p para colar o conteúdo do buffern vezes após o cursor! Ação: Ação:

digite digite

(n)

(n) g

p

P ou

P

para para

colar

colar o

o

conteúdo

conteúdo

do

buffern

do vezes

buffern e

posicionar

vezes o

antes

cursor

após

o

do

cursor!

texto

colado!

Como explicado, podemos definir buffers diferentes do padrão digitando aspas e o nome do buffer, que é um caractere, seguido do comando de cópia de texto. Para colá-lo, a estrutura do comando é a mesma: ' "c y ' para copiar e ' "c p ' para colar. Ação: digite "c p para colar o texto armazenado no buffer de nome c! Outro recurso de edição é o comando equivalente ao ' +z '. O comando de desfazer (undo) no Vim, não somente é baseado em um histórico cujo tamanho pode ser definido, ou seja, potencialmente interminável, como também o Vim permite que refaçamos os comandos desfeitos. O Vim, quando se trata de voltar e avançar comandos, por compreender o arquivo segundo seu histórico, é também versátil por permitir voltar e avançar números designáveis de ações. O comando de desfazer é ' u '. Alternativamente, podemos desfazer todas as ações feitas na linha corrente com ' U '. O comando de refazer comandos, por sua vez, é ' +R ', de redo. Tanto este quanto ' u ' são capazes de receber um parâmetro numérico, mas naturalmente não esperam por ele, sendo o padrão 1. Ação: digite Ação:

u para desfazer a(s) digite

última(s) ação(ões)!

+R

para

refazer

a(s)

última(s)

ação(ões)

desfeita(s)!

Ação: digite U para desfazer todas as ações feitas na linha corrente! Lembrem agora de tudo o que aprendemos sobre buscar ocorrências com ou sem expressões regulares. Tudo aquilo é aplicável na tarefa de substituir ocorrências, justamente porque aquilo que podemos substituir são ocorrências que encontrarmos com o comando de busca que executarmos. O comando de substituição é somente um complemento possível dos comandos de busca. Como foi dito brevemente, os comandos de busca com substituição requerem que seja informada a região do texto cujas ocorrências encontradas deverão ser substituídas, além do caractere ' s ', de substitute. Essa informação deve vir antes do comando de busca, conferindo o formato ' : região s/busca '. Temos que informar a string que queremos inserir no lugar das que encontramos, e isso é feito após o padrão procurado, separando-os por uma barra. Os comandos completos de substituição têm a forma: ' : região s/busca/substituto '. Após o comando podemos ainda passar algumas opções, sendo as mais populares delas a opção ' g ', de global, que manda o comando substituir todas as ocorrências dentro da região dada e ' c ', de confirmation, que pede que o Vim pergunte pelas confirmações das substituições a serem realizadas. Podemos querer usar tambem o parametro ' i ', que faz o vim ignorar a diferenca entre maiuculas e minusculas, enquanto ' I ' o impede disto. Um comando que substitui todas as palavras ' vi ' por ' Vim ' em todo o texto, por exemplo, poderia ser: ' :1,$s/vi/Vim/g ' . Como podem reparar, a região foi delimitada apontando para duas posições de linhas separadas por uma vírgula, a primeira com 1 e a última com o símbolo ' $ ', que significa normalmente final de linha. Também podemos passar um símbolo único para designar o texto todo, que seria ' % '. Lembrem que ' . ' indica a linha atual, e é um símbolo que também podemos incluir na designação de uma região. Para constar, podemos também simplesmente não designar uma região, como com comandos de busca, no entanto o comando só funcionará se for aplicável sobre a linha corrente, que é a região de texto padrão considerada se faltar sua indicação. Ação: digite : #,# s /expr1/expr2/ [opções] , sendo # um número de linha e #,# uma região do texto, para realizar substituições sobre as ocorrências encontradas! Lição 8 - Configuração do Vim e ferramentas especiais

Como foi explicado quando falamos sobre os modos de operação, as ferramentas de configuração são todas responsabilidade do modo linha de comando. Este modo foi desenhado para cuidar especialmente da personalização da sessão e de comandos relativos ao arquivo e à execução do programa. Como já devem ter reparado, os comandos de linha são sujeitos ao mesmo controle que temos na linha de comando do shell, pois temos acesso a um histórico de comandos, a ações como +u, +a, +e e +c para cancelá-la. Caso digitemos +z de fato suspendemos a execução do Vim, mas para tanto não precisamos estar em linha de

comando, diferentemente do +c. Podemos da mesma forma, para suspender o Vim, digitar ' :sus ', de suspend. O modo linha de comando no Vim também possui os recursos de listagem com +d, como em FreeBSD e com e de busca de comandos do histórico indicando o início da linha, como se fosse um comando de shell grep. A maioria das configurações de uma sessão do Vim são realizadas por variáveis de ambiente do Vim. Seus valores são acessíveis e ajustáveis pelo comando de linha set. Basta digitarmos ' :set ' seguido da variável e seu valor ou de valores que já mostram a variável. Veremos nas ferramentas especiais de edição alguns valores ajustáveis de configuração com o comando ' set ', mas existem inúmeras variáveis no Vim, e seria impossível aprensentá-las todas aqui. Naturalmente, os comandos de configuração executados em modo linha de comando, ou seja, de dentro de uma sessão, só serão válidos para a sessão atual. Da mesma forma temporárias são as configurações realizadas na chamada do programa, que também são possíveis. Para configurar o Vim de forma que possamos posteriormente chamá-lo com a manutenção das características confiuradas da sessão temos de preparar um arquivo externo de configuração para ser lido na entrada do Vim, chamado ' .vimrc '. Podem existir dois arquivos de configuração, um global e um pessoal. O global existe para que sejam desenhados padrões para serem aplicados sobre todas as sessões Vim que existirem em uma determinada máquina. Ele fica localizado na pasta do Vim no diretório etc: " /etc/vim/vimrc ". O arquivo de configuração local do Vim também é chamado ' .vimrc ' e deve ser criado na pasta pessoal de cada usuário que deseja utilizar sessões personalizadas do Vim. Quando o Vim é chamado, ele primeiramente aplica as configurações globais e depois personaliza a sessão lendo o .vimrc da pasta pessoal do usuário que o chamou. Logo, caso haja configurações conflitantes, serão as configurações pessoais que permanecerão. Experimente criar o arquivo .vimrc e editá-lo com uma linha de configuração. Digite na linha de comando ' vim .vimrc ', e insira na primeira linha ' set number '. Observe que no arquivo de configuração não é necessário que digitemos o indicador de comando de linha ' : ', ainda que não seja proibido digitá-lo. Agora salvem e saiam e chamem o Vim para ler qualquer arquivo e verão a sessão já ajustada com a opção de numeração de linhas! Uma dica para aqueles que irão se aventurar na edição do .vimrc e começar a brincar é o uso de comentários. Para comentar linhas no .vimrc as iniciamos com aspas duplas ( " ), utilizem-as! Aproveitem também os exemplos de arquivos de configuração de sessões do Vim que estará disponível para download. Por fim na chamada do Vim podemos passar diversas opções. O modelo de chamada é ' vim opções arquivos ', fora as chamadas alternativas como ' view ', ' gvim ', ' ex ', ' gview '... Vale a pena conhecer o que as opções podem fazer por nós, mas como este conteúdo ultrapassaria um pouco os objetivos deste curso, recomendo que consultem o manual do Vim, que apresenta o editor como um programa e seus argumentos de linha de comando shell. Pedindo ajuda

Como já devem ter notado, podemos consultar o manual de ajuda do Vim simplesmente digitando ' :help ' ou ' :h '. Caso seja necessário consultá-lo sobre um item específico basta informá-lo do assunto com ' :h assunto '. Ação: digite :h assunto para consultar o Vim sobre o assunto dado! Conferindo a versão do Vim

Para

ver

a

versão

do

Vim

basta

digitar

'

:version

'.

Ação: digite :version para ver a versão corrente do editor Vim! Informando-se sobre os caracteres

Especialmente aqueles que programam podem se interessar pelo comando ' ga '. Ele apresenta no canto inferior informações sobre o caractere sob o cursor como seu código hexa e octadecimal e seu valor ASCII. Ação: digite ga sobre um caractere para saber seus códigos hexa e octadecimal e seu valor ASCII! Marcando posições no texto

Talvez a mais importante ferramenta especial do tipo consulta é a marcação de texto. Com ela podemos nomear quaisquer partes do texto tanto para acesso fácil mais tarde quanto para construirmos (ou referenciarmos) novos objetos. Como podemos ver, o comando de marcação não é um comando de movimento, mas sim de mera nomeação. O cursor não sai do lugar marcado e aparentemente nada acontece. Para marcar um local do arquivo, digitamos ' m ' seguido de um caractere nomeador que pode variar de a até z e de A até Z. Para acessarmos a posição anteriormente marcada basta digitarmos aspas simples seguida do caractere nome ( ' c ). Para utilizar a marca como designador de objeto de texto realizamos um comando pendente cujo objeto é diferença, ou seja, o espaço entre posição corrente do cursor e a posição da marca. Por fim, para conferirmos as marcas do texto atual digitamos ' :marks '. Ação:

digite

m

c

para

nomear

a

posição

sob

o

cursor

de

c

e

'

c

para

acessá-la!

Ação: digite ' c e realize um comando para executá-lo sobre todo texto que estiver entre a posição atual do cursor e a posição marcada c! Ação:

digite

:

marks

para

ver

a

lista

de

marcas

do

texto

atual!

Numerando as linhas

Se não for a ferramenta de marcação, certamente o comando de numeração de linhas é o maior facilitador de leituras de arquivos de texto em geral. Com esse recurso podemos visualizar o número das linhas de todo o texto e assim comparar, armazenar e apontar com maior facilidade. O comando é de linha, ' :set number ', ou ' :set nu '. Esse é um dos mais importantes e merece ser lembrado. Ação: digite :set number para numerar todas as linhas do texto e : set nonumber para desfazê-lo! Mapeando a posição do cursor

Podemos também utilizar o comando ' :set ruler ' ou ' :set ru ' para que o Vim nos indique a posição do cursor medida em coluna e linha do texto. Para desativar o mapeamento do cursor digitamos ' :set noruler '. Ação:

digite

:set

ruler

para

que

o

Vim

nos

indique

a

posição

do

cursor

no

texto!

Monitoramento do modo

Como já dito, para facilitar o trânsito que temos de fazer entre os modos podemos solicitar que o Vim sempre apresente no canto inferior esquerdo da tela o modo de operação em que estamos atualmente com o comando ' :set smd '. Para desabilitá-lo digitamos ' :set nosmd '. Esta configuração é padrão no Vim e no vi. Ação: digite :set smd para fazer o Vim sempre nos apresentar o atual modo de operação! Buscando imediatamente

O Vim nos permite realizar buscas em tempo real, no sentido de que a string de busca vai sendo procurada na medida em que é digitada. Esta opção trás grandes mudanças e implicações para os comandos de busca, mas certamente pode valer a pena. O comando é ' :set is ', e para desabilitá-lo digitamos ' :set nois '. Ação: digite :set is para habilitar a busca imediata da string de busca na medida em que vai sendo digitada!

Hachurando ocorrências

Caso haja muitas aparições da expressão procurada pode ser útil colorí-las para uma melhor visualização. Quando realizarmos uma nova busca serão as novas ocorrências a ficarem hachuradas. O comando é de linha - ' :set hls '. Para desfazê-lo, ' :set nohls '. Ação: digite :set hls para hachurar as ocorrências encontradas de cada busca! Consultando textos silmultâneos

Não poderíamos esquecer do recurso de divisão do espaço de tela ' : split arquivo '. Com este comando dividimos a tela em duas ou em mais partes para visualizar textos diferentes ou até partes diferentes de um mesmo texto ao mesmo tempo! Caso seja preferido, podemos fazer também uma divisão vertical da tela com ' : vsplit arquivo '. Para transitar entre as janelas digitamos ' +w_w ', mas existem diversas maneiras práticas de transitar entre inúmeras janelas, como ' +w_b ' ou ' +w_t ' para alcançar a janela de baixo e a de cima, respectivamente. Existem comandos para mudar a posição das janelas e comandos para alterar seus tamanhos. Estes são ' +w_+ ' para aumentar a atual, ' +w_- ' para diminuíla e ' +w_= ' para igualá-las. Vale a pena conferir a entrada de ' :h split ' para compreender todas as possibilidades e seus comandos. Os comandos de edição são aplicados sobre a janela em atuação, e a linha de comando, apesar de ser uma só, se aplica também sobre a janela atual. Porém a sessão é a mesma, então os buffers, entre outras coisas, são os mesmos, o que nos dá a possibilidade de copiar e colar de e para textos diferentes. Caso ' :split ' seja chamado desta forma, ou seja, sem argumentos, será aberto uma janela aprensentando o mesmo texto em edição atualmente. Ação: digite :split (arquivo) para abrir dividir a tela em janelas contendo diferentes textos visualizáveis simultaneamente! Abrindo mais de um texto

Para abrir dois textos em uma mesmas sessão de Vim sem visualizá-los simultaneamente, basta na chamada do programa invocar mais de um arquivo: ' vim arquivo1 arquivo2 '. Para acessá-los, digitamos os comandos ' :next ' e ' :prev '. Estes comandos podem receber valores numéricos no caso de haver muitos arquivos abertos. Ação: digite vim arquivo1 arquivo2 no shell para abrir mais de um arquivo no Vim e :next e :prev para transitar entre os arquivos! Consultando manuais

Digitando ' K ' sobre uma palavra no texto em sessão que corresponda a qualquer comando existente no sistema fará o Vim procurar e tentar abrir seu manual de dentro da sessão do Vim. Quando a consulta ao manual terminar e digitarmos ' q ', voltamos para dentro do Vim. Essa ferramenta é muito útil para a leitura de scripts cujos comandos desconhecemos, por exemplo. Ação: digite K sobre uma palavra que corresponda a um comando para consultar o manual do comando de dentro da sessão do Vim! Substituindo um caractere sem mudar de modo Um comando que pode ser eventualmente útil é o ' r ', que aceitar os parâmetros padrões é pendente por esperar que um caractere para que ele se execute. O ' r ' tem a função de substituição, mas ao contrário deste o ele não entra operação algum. O ' r ' é um comando de substituição do cursor, e sua forma é ' r c '.

apesar de não seja informado do ' R ', a em modo de caractere sob o

Ação: digite r sobre o caractere a ser substituído seguido do novo caractere com o qual queremos substituí-lo! Trocando maiúsculas por minúsculas e vice e versa Um recurso um tanto valor de caixa de de minúscula para comando em um com um comando de cursor.

quanto original, mas também útil, é o um caractere. Digitando ' ~ ' podemos maiúscula e vice e versa. Podemos comando personalizado digitando ' g ~ '

de trocar o mudar uma letra transformar este e completando-o

Ação: digite ' g ~ ' seguido de um trocar as letras minúsculas por maiúsculas e vice e versa!

comando

de

movimentação

de

cursor

para

Unindo linhas Apesar de ser uma ferramenta raramente útil senão na edição de scripts e códigos fonte, quando dela precisamos não hesitamos em reconhecer seu valor. Se digitamos ' J ', de join, trazemos a linha imediatamente abaixo da linha corrente para cima, ou seja, para junto da linha corrente, unindo-as. Ação: digite J para juntar as linhas corrente e seguinte! Avançando e recuando espaços

Uma alternativa a modo Normal alcance da

entrar em utilizar as tabulação

modo teclas será

de < aquele

inserção e e > para definido

pressionar tabular pela

as variável

é em linhas. O shiftwidth.

Ação: digite << e >> para tabular o texto em modo Normal! Atualizando a tela

Para limpar as mensagens digitar ' +l Vim descarregará as sobrecarregados.

que apareceram recentemente '. Nada acontecerá com mensagens da interface

na

o para

tela

do arquivo, acalmar

Vim podemos somente o os usuários

Ação: digite +l para redesenhar a tela atual limpando as mensagens obsoletas!

Repetindo comandos

O comando modo colagem última frase inserção

' . ' (ponto) é um comando genérico de repetição de comandos de Normal. Ele repete o último comando realizado, logo se ele foi a de um texto, ' . ' irá colá-lo novamente. Curiosamente, se a ação que fizemos foi entrar em modo de inserção e digitar uma qualquer, ao voltarmos ao modo Normal ' . ' irá repetir a da frase que digitamos.

Ação: digite ' . ' para repetir o último comando ou ação realizados! Carregando um arquivo para dentro do texto atual

Podemos, de dentro de uma sessão em que editamos um texto qualquer, inserir o conteúdo de texto de um arquivo diferente com o comando ' : r arquivo ', de read. O conteúdo do arquivo lido será inserido a partir da posição em que o cursor estava quando chamado o comando. Ação: digite :r arquivo para inserir o conteúdo de um arquivo dentro do texto em sessão atualmente! Salvando parte do texto

Se quisermos conteúdo designamos substituição. arquivo

podemos no que estiver uma região O comando

lugar de gravar todo texto salvar dentro de uma região delimitada. como fazemos quando construímos um de gravação do arquivo tem o formato

Ação: digite #,# w arquivo para salvar o conteúdo entre as linhas # e # no arquivo dado!

apenas o Para tanto comando de ' região w '.

Desabilitando escrita

Para garantir que abertos podemos aberto o Vim configuração '

a

sessão do Vim não poderá sobrescrever os arquivos definí-la como somente leitura, o que é o mesmo que ter com o comando ' view '. Para tanto digitamos o comando de :set ro '. Para voltar podemos digitar ' :set noro '.

Ação: digite :set ro para tornar a sessão do Vim somente leitura e proibir a escrita do arquivo! Insensibilizando o Vim a maiúsculas e minúsculas

Para facilitar certas a sensibilidade letras maiúsculas. digitamos

funções como que o Vim O comando '

busca e tem para para tal é :set

substituição diferenciar ' :set

podemos desabilitar letras minúsculas de ic ', para voltar noic '.

Ação: digite :set ic para tornar o Vim insensível à diferença entre letras maiúsculas e letras minúsculas! Executando comandos de shell

Uma das características que tornam o Vim poderoso é a sua capacidade de interação com o shell. O Vim é capaz tanto de inciar um shell a partir de dentro de sua sessão quanto de simplesmente executar comandos sem iniciar uma sessão shell nova. A saída do comando pode, inclusive, ser inserida dentro do arquivo texto em edição. O comando para iniciar uma nova shell é ' :shell '. Quando digitarmos ' exit ' voltamos enfim para a sessão do Vim de onde paramos. O comando para executar comandos de shell é ' : ! comandodeshell '; neste caso uma tela com a saída do comando será aprensentada, e qualquer tecla fará o Vim retornar de onde parou. Caso interesse, o comando ' : ! ! comandodeshell ' pode inserir a saída do comando no arquivo corrente a partir da posição atual do cursor. Ação: Ação:

digite digite

:!

comando :shell

para

para

executar

iniciar

uma

um

comando nova

sessão

de

shell shell

de a

dentro partir

do do

Vim! Vim!

Ação: digite :!! comando para inserir a saída do comando de shell dentro do arquivo texto atual! Criptografando o texto

O Vim oferece um recurso extremamente valioso, o da criptografia. O comando é bem simples, ' :X ', e o Vim pedirá por uma chave criptográfica. Pois bem, depois de informá-la basta salvar o arquivo e quando sairmos o arquivo já estará criptografado, e sua leitura exigirá a chave, ainda que não sua escrita. Não se iludam com o poder deste recurso no Vim, ele visa somente impedir que se veja o conteúdo dos arquivos indiscriminadamente, mas ele jamais impedirá que pessoas determinadas o leiam. Mas, de qualquer forma, notem que quanto maior for a chave utilizada maior será a segurança do seu texto. Para desabilitar o pedido da chave para a próxima vez que forem acessar o texto, digitem ' :set key= ' quando o texto estiver descriptografado. Ação: digite :X e informe uma chave para criptografar o texto corrente! Completando palavras

Para facilitar início aquelas escrita

a de já a

digitação palavras digitadas palavra '

de

textos, o Vim oferece o recurso de com suas terminações prováveis, que no texto anteriormente. Ou seja, se já Vim ' no texto anteriormente, ao digitarmos

completar o são todas havia sido ' V '

em modo apresentará Vim

de todas

inserção as opções

podemos de

apertar completamento

'

+n disponíveis

' até

e chegar

o à

Vim ' '.

Ação: digite +n para completar a palavra a ser digitada com alguma terminação antes digitada no texto! Formatando o texto

Entre os comandos e organizar quebra de :set :set :set :set :set :set :set

de o linha,

configuração ' :set ' existem texto. Essas funções são parágrafo, indentação etc.

alguns que visam formatar para definir margem, Eis algumas possibilidades:

textwidth=80 | ajusta a quebra de linha para 80 colunas, ou caracteres; nowrap | ajusta o Vim para não separar linhas que não sejam quebradas de verdade; wrapmargin=10 | ajusta a margem do texto em 10; tabstop=4 | ajusta a tabulação para 4 espaços; shiftwidth=2 |ajusta o alcance dos comandos +d e +t (<, >) para 2 espaços; expandtab | avança na verdade espaços; autoindent | indenta automaticamente as linhas que quebrarem;

Um comando Depois execução,

útil nessa hora é de setar as medidas experimente digitar n gq,

' gq ', de quebra sendo n o

que ordena linhas de linha em um número de linhas a

e texto serem

parágrafos. já em ajustadas.

Ação: digite n gq para quebrar ordenadamente as n linhas seguintes!

Gravando seqüências de ações

Para evitar que tenhamos que repetir grandes conjuntos de comandos, que muitas vezes são trabalhosos e até difíceis de se reproduzir, existe a ferramenta de gravação. Ao executá-la o Vim imprime na tela recording, que significa gravando, e ela é iniciada digitando ' q c ', sendo c um caractere qualquer que nomeará a sessão de gravação, ao final digite q novamente. Para executar os comandos gravados posteriormente basta digitarmos ' @ c ', sendo c o caractere escolhido. Ação: digite qc para inicar e q para finalizar a gravação de uma determinada seqüência de comandos, depois digite @c para executá-la nova e automaticamente!

Utilizando abreviações

Para compridas, criá-las modo no

evitar digitar palavras frequentemente utilizadas e podemos criar abreviações com o comando ' :abbr abreviação abreviado '. Podemos, e até devemos, no nosso arquivo de configuração e ao digitar a abreviação em de inclusão a palavra abreviada será transformada automagicamente que determinamos como sendo seu correspondente.

Ação: digite :abbr abreviação abreviado para poder escrever palavras abreviadas que são convertidas automaticamente! ".vimrc, por Tomás RC; "Algumas destas linhas foram tiradas de outros arquivos de configuração do Vim "e ele deve ser entendido como um arquivo sempre em expansão potencial; "Ele é dividido em 7 âmbitos de configuração: "1 "2 "3 "4 "5 "6 "7

Controle de arquivo; Interface do Vim; Interface do texto; Formatação; Edição; Comandos; Programação (em geral).

"Cada um destes possuem comandos de linha atualmente operantes e outros que "deixei para serem descomentados, se for o caso. Procurei comentar todas as "linhas do arquivo para aqueles que tiverem interesse em bisbilhotá-lo.

"Experimentem, se quiserem, ler este arquivo de configuração já utilizando ele "na sua seção para acompanhar sua leitura com a experiência da configuração! "Controle de arquivo: :set nocompatible " Pede ao Vim para não se preocupar em simular os comportamentos do Vi! :set autowrite " Salva automaticamente antes de comandos como :next e :make :set browsedir=buffer " Lembra o diretório do último arquivo aberto :set history=100 " Determina o tamanho máximo de linhas (ou de comandos, não sei) do histórico filetype plugin indent on " Reconhece os tipos de arquivos set backup "Faz backup do arquivo atual, set nowritebackup "e deleta o antigo backup posteriormente. "Estes dois comandos funcionam geralmente juntos, "vide ':help backup'. "Interface do Vim: :set :set :set :set :set

ruler " Mapeia a posição do cursor em linhas e colunas number " Numera as linhas showcmd " Mostra os comandos de modo Normal passados smd " Mostra o atual modo de operação laststatus=2 " Sempre exibe a barra de status

" :set statusline=%F%m%r%h%w [FORMATO=%{&ff}] [TIPO=%Y] [ASCII=\%03.3b] [HEX=\%02.2B] [POSIX??O=%04l,%04v][%p%%] [TAMANHO=%L] " Mostra o código ASCII do caractere sob o cursor e outras coisas, mas não tá funcionando bem "colorscheme darkblue " Esquema de cores legal ":set background=white " Fundo branco anti-claustrofóbico ":set visualbell " Não apita, pisca ":set mousehide " Esconde o mouse "Interface do texto: :set showmatch " Mostra os parênteses, chaves e colchetes que abrem o trecho que com eles fechamos :set hls " Opção maravilhosa para programadores, pois hachura todas ocorrências de uma busca syntax enable " Faz o mesmo que 'sintax on', mas não sobreescreve minhas configurações ":set incsearch " Busca string enquanto a digitamos ":set guifont=Monospace 12 " Configura a fonte "sintax on " Colore elementos típicos da sintaxe do texto do tipo de arquivo do texto atual "Formatação: :set :set :set :set :set

textwidth=80 " Ajusta a quebra de linha para 80 colunas, ou caracteres; autoindent " Indenta automaticamente as linhas que quebrarem; expandtab " avança na verdade espaços; tabstop=4 " Ajusta a tabulação para 4 espaços; shiftwidth=2 " Ajusta o alcance dos comandos +d e +t (<, >) para 2 espaços;

":set wrapmargin=10 " Ajusta a margem do texto em 10; ":set nowrap " Ajusta o Vim para não separar linhas que não sejam quebradas de verdade; ":set formatoptions=tcqor " t=text, c=comments, q=format with gq command, o,r=autoinsert comment leader "Edição: :set wildmenu " Completa linha de comando de forma melhorada "Abreviações ortográficas ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr

ai aí ha há aa à eh é so só doh dó pa pá ca cá la lá va vá ta tá nao não sao são pao pão

":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr ":abbr

tao tão vao vão veem vêm teem têm voce você po pó cao cão terca terça sabado sábado setima sétima cetico cético magico mágico magica mágica icone ícone unico único unica única ultimo último ultima última musico músico musica música nucleo núcleo ideia idéia tambem também proprio próprio propria própria proprios próprios proprias próprias

"Comandos: "De substituição ortográfica de texto "%s/avel\>/ável/g "%s/ivel\>/ível/g "%s/evel\>/ével/g "%s/encia\>/ência/g "%s/ancia\>/ância/g "%s/\/ânsia/gi "%s/ontic/ôntic/gc "%s/antic/ântic/gc "%s/omeno\>/ômeno/g "%s/oria\>/ória/g "%s/orio\>/ório/g "%s/aria\>/ária/g "%s/ario\>/ário/g "%s/atic/átic/gc "%s/otic/ótic/gci "%s/etic/étic/gci "%s/itica\>/ítica/g "%s/utica\>/útica/g "%s/agio\>/ágio/g "%s/orio\>/ório/g "%s/icit/ícit/gc "%s/icio\>/ício/g "%s/icia\>/ícia/g "%s/ofica\>/ófica/g "%s/ofico\>/ófico/g "%s/osof/ósof/gc "%s/amic/âmic/gc "%s/assemos\>/ássemos/g "%s/issemos\>/íssemos/g "%s/essemos\>/êssemos/g "%s/avamos\>/ávamos/g "%s/enca\>/ença/gc "%s/ido\>/ído/gc " "%s/tambem/também/gi "%s/ultimo/último/gi "%s/ultima/última/gi "%s/icone/ícone/gi "%s/propri\>/própri/gci "%s/ultipl/últipl/gc "%s/conteudo/conteúdo/gi "%s/nucleo/núcleo/gi "%s/musico/músico/gi

"%s/musica/música/gi "%s/ideia/idéia/gi "%s/\<esta\>/está/gc "%s/\<para\>/pára/gc "%s/\/você/gi "%s/ao\>/ão/gc "%s/cão/ção/gc "%s/oes\>/ões/g "%s/cões/ções/g "%s/\/à/gi "%s/ah/á/g "%s/ih/í/g "%s/oo/ô/g "%s/oh/ó/gi "%s/ee/ê/gi "%s/eh/é/gi "%s/\/há/gic "%s/veem/vêm/g "%s/teem/têm/g "%s/\<so\>/só/g "%s/soh/só/g "%s/\/aí/gci "%s/pre-/pré-/gi "%s///g " "%s/e-l/ê-l/gc "%s/a-l/á-l/g "%s/i-l/í-l/g "Programação (em geral): :set cin " indenta códigos .c

Bom, espero que tenham ganho, senão habilidades, ao menos muita familiaridade com o Vim. Não deixe, é claro, de utilizá-lo no dia-a-dia do seu GNU/Linux e nem de procurar conhecer mais sobre suas capacidades. Procure construir seus arquivos de configurações, baixe scripts e plugins para suas linguagens prediletas e façam do uso Vim um estilo de vida! O curso certamente foi bastante teórico, o que infelizmente pode ter feito faltas no aprendizado prático do uso do Vim. Aproveitem o guia de comandos enquanto puderem e, se interessar, copiem-no. Em seguida indicarei alguns endereços eletrônicos para consulta sobre o Vim, entre eles os principais sites atrelados oficialmente ao editor e até páginas pessoais com dicas e exemplos. www.unb.ca/documentation/UNIX/tips/vim/ www.vi-improved.org/tutorial.php http://vimdoc.sourceforge.net www.vim.org http://www.rayninfo.co.uk/vimtips.html http://redvip.homelinux.net:81/aggregator/sources/45 http://www.moolenaar.net/habits.html http://www.ukuug.org/events/linux2004/programme/paper-SMyers/Linux_2004_slides/vim_tips/ http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html http://www.iccf.nl/click1.html http://www.usinglinux.org/editors/

Related Documents

Vim 2
November 2019 10
Vim
November 2019 30
Vim
May 2020 17
Vim Recipes
June 2020 7
Vim Cheatsheet
June 2020 9
Go Vim
November 2019 26