====== Emacs ====== ===== O que é o Emacs? ===== **//Vi//** e seus clones são editores bastante poderosos e funcionais. Porém, geralmente, eles não são considerados particularmente extensíveis. Fugindo dessa tendência, o **//vim//** é uma variante potente e exitosa do **//vi//**, sendo leve e extremamente extensível. No entanto, muitos usuários preferem um editor mais //“robusto”// e extensível. Por esse motivo, muitas pessoas (incluindo o autor deste capítulo) preferem o **//Emacs//**. O **//Emacs //** eleva a extensibilidade a outro patamar. Com exceção do núcleo em C, o restante do **//Emacs//** é escrito em uma variante de Lisp, que fica exposta para o usuário quase integralmente, de forma que é possível configurá-la ou estendê-la conforme sua vontade (excelentes tutoriais de Emacs Lisp podem ser encontrados na internet). As pessoas já escreveram todos os tipos de extensões em Emacs Lisp, desde marcadores de sintaxe para uma linguagem obscura até um terminal integrado. De fato, existe até um modo de emulação de **//vii//** dentro do **//Emacs//** chamado Viper. Ou seja, você consegue até mesmo manter o modo de edição do **//vii//** enquanto utiliza todo o poder do **//Emacs//**. Como ocorre com o **//vi//**, também há muitas variantes de **//Emacs//** (denominadas //“emacsen”//). No entanto, a mais comumente utilizada (e a única no Slackware) é o GNU Emacs. Quando as pessoas fazem referência direta a //“Emacs”// , elas querem dizer GNU Emacs na maioria das vezes. Diferente do **//vi//**, por padrão, o **//Emacs//** opera mais como um editor tradicional. Isso significa que a maioria dos atalhos de teclado podem ser executados sem alterar modos repetidamente. Você pode abrir um arquivo e começar a digitar, sem ter que aprender o que os modos fazem ou até mesmo esquecer qual você está utilizando no momento. ===== Começando ===== O **//Emacs//** pode ser inicializado simplesmente executando o comando **//emacs//** no terminal. Ao abrir o programa pela primeira vez sem argumentos em um console, você verá algo semelhante à imagem ao lado. {{:pt-br:slackbook:emacs_startingout.png?nolink&600 }} Se você estiver em um sistema X Window, o **//Emacs//** pode iniciar em GUI (interface gráfica) em vez de rodar no console. Se for esse o caso e você não quiser uma GUI, você pode invocar o programa com o sinalizador //'-nw'//. Neste momento, você pode navegar utilizando as setas do teclado. Elementos sublinhados são links que podem ser ativados ao pressionar 'Enter' sobre eles. A documentação do programa é muito boa e pode ajudá-lo caso tenha algum problema. Observe também como são descritas as sequências de teclas, como ’C-h’, que indica pressione 'h' enquanto segura a tecla 'CTRL'. O mesmo ocorre com **M-`**, que indica segure a tecla **Meta** (geralmente 'Alt') e pressione a tecla de acento grave '`'. Quando a orientação é, por exemplo, C-x C-c, isso significa pressione a tecla 'x' enquanto segura a tecla 'CTRL' e, em seguida, pressione a tecla 'c' enquanto ainda mantém a tecla 'CTRL' pressionada. Convenientemente, esse exemplo é um dos comandos mais importantes do **//Emacs//**: a ação de fechar. Como alternativa, se você chamar **//emacs//** com um nome de arquivo como argumento, o arquivo será aberto, assim como no **//vi//**. Ao fazê-lo, o conteúdo do arquivo em questão será apresentado. Neste momento, você pode navegar pelo documento utilizando as setas tradicionais do teclado e digitar informações à vontade sem nenhum problema. Digamos que você fez algumas alterações e agora quer salvar o arquivo. A seguinte sequência de teclas fará isso: C-xC-s. Se você criou um novo arquivo, você será solicitado por isso no //“minibuffer”//, a linha em branco abaixo da cinza na parte inferior da tela. Digite um nome de arquivo de sua escolha e pressione 'Enter'. Se você não quiser salvar o arquivo, você pode pressionar C-g, sequência que aborta operações que solicitam uma entrada. Vale destacar que o preenchimento com Tab geralmente está disponível para operações que utilizam o minibuffer. Caso queria abrir um arquivo novo dentro de uma mesma sessão do **//Emacs//**, digite C-xC-f. Você será solicitado no minibuffer para fornecer um nome de arquivo. O **//Emacs//** não se importa se o arquivo existe ou não. Se não existir, um novo buffer será criado para ele (o arquivo será criado ao salvar o buffer com C-xC-s). Se existir, o arquivo será aberto como o esperado. Todavia, o arquivo antigo ainda estará aberto. Você pode voltar para ele utilizando C-xC-b, inserindo o nome do arquivo (ou, mais tecnicamente, o nome do buffer) e pressionado 'Enter'. ======= Como se movimentar ===== Como o **//vi//**, o **//Emacs//** também é mais antigo do que as setas do teclado. Apesar disso, como no **//vi//**, é possível utilizar as teclas de seta para navegar pelos arquivos. Enquanto as teclas de movimento do **//vi//** são mais ergonômicas, as do **//Emacs//** são mais //“mnemônicas”//. Ainda assim, é perfeitamente possível operar de maneira rápida e eficiente utilizando as principais combinações de teclas do **//Emacs//**. Eis uma tabela das combinações de teclas básicas de movimento: **Movimento de cursor no Emacs** ^Comando^Resultado| |C-f|Move o cursor um caractere para a frente (forward)| |C-b|Move o cursor um caractere para a trás (backward)| |C-n| Move o cursor uma linha para baixo (next)| |C-p|Move o cursor uma linha para cima (previous)| Claro, como acontece com o **//vi//**, também é possível repetir esses comandos com um argumento numérico. Se você digitar **M-1** **M-0** C-p, ou C-u 10 C-p, o cursor vai mover dez linhas para cima. Se você digitar **M-5** C-f, ou C-u 5 C-f, o cursor vai mover dez linhas para a direita. ======= Como obter ajuda ===== O **//Emacs//** contém uma vasta quantidade de documentação, a ponto de ser frequentemente chamado de editor //“auto-documentado”//. Isso acontece porque ele possui mecanismos para fornecer documentação aos usuários durante a utilização. Aqui estão algumas funções úteis que exibem a documentação (todas começam com C-h): **Acessando a documentação do Emacs** ^Comando^Resultado| |C-h f NOME-DA-FUNÇÃOEnter |Mostra documentação para função NOME-DA-FUNÇÃO| |C-h kC-xC-c |Mostra documentação para função vinculada às teclas C-xC-c | |C-h t|Mostra tutorial do Emacs| |C-h ?|Mostra todas as funções relacionadas à ajuda| C-h **t** é especialmente útil caso queira ou precise praticar o operacional do **//Emacs//**. ======= Chamando funções ===== Conforme observado anteriormente, o **//Emacs//** exporta um grande número de funções para uso interativo. Algumas delas, como as que abrem e salvam arquivos, são mapeadas para atalhos. Outras, como as de movimentação para o começo e o fim das linhas, não o são. Para chamá-las, é preciso executá-las((N.T.: Atualmente, por padrão, as funções //end-of-line// e //beginning-of-line// são mapeadas através das combinações C-e e C-a.)). Digamos que queremos chamar a função //"end-of-line"//. Faríamos isto: **M-x** end-of-line Enter E o cursor se moveria para o final da linha, como sugere o nome da função. ======= Resumo com dicas para Emacs ===== Embora o **//Emacs//** possa ser simples de utilizar, seu escopo amplo pode ser sufocante. Logo abaixo estão alguns comandos úteis do **//Emacs//**. Alguns aspectos foram simplificados, principalmente em relação à seleção de texto. Esses conceitos, assim como outros, são descritos no manual do **//Emacs//** e em diversos tutoriais on-line. Resumos valiosos também podem ser obtidos a partir de pesquisas na web. **Tabela de dicas para Emacs** ^Comando^Resultado| |C-f|Move o cursor um caractere para a frente (forward)| |C-b|Move o cursor um caractere para a trás (backward)| |C-n| Move o cursor uma linha para baixo (next)| |C-p|Move o cursor uma linha para cima (previous)| |C-h 'f NOME-DA-FUNÇÃOEnter |Mostra documentação para função NOME-DA-FUNÇÃO| |C-h 'kC-xC-c |Mostra documentação para função vinculada às teclas C-xC-c| |C-ht|Mostra tutorial do Emacs| |C-h ?|Mostra todas as funções relacionadas à ajuda| |M-'`'|Acessa a Barra de Menu| |C-g|Cancela a operação atual. Isso é mais útil no minibuffer| |M-xNOME-DA-FUNÇÃOEnter|Chama a função interativa NOME-DA-FUNÇÃO| |M-1 M-0 C-n|Move o cursor dez linhas para baixo| |C-u 10 C-n|Move o cursor dez linhas para baixo (mesma coisa que o de cima)| |M-'x' beginning-of-line |Move o cursor para o início da linha atual| |M-'x' end-of-line |Move o cursor para o fim da linha atual| |M-'>' |Move o cursor para o final do buffer| |M-'<' |Move o cursor para o começo do buffer| |C-k |Remove o texto do cursor até o fim da linha, colocando-o no kill ring| |C-space |Entra no modo de seleção (utilize as teclas de movimentação para selecionar). Pressione C-space novamente para sair| |C-w |No modo de seleção, exclui a região selecionada e armazena o resultado no kill ring| |M-w |No modo de seleção, armazena a região selecionada no kill ring| |C-y |“Yanks” puxa o conteudo do kill ring e o coloca no local do cursor| |C-/ |Desfaz a ação anterior. Ao contrário da maioria dos outros editores, isso inclui ações anteriores de desfazer| |insert |Ativa ou desativa a substituição de caracteres| |C-s asdf Enter |Pesquisa adiante a cadeia de caracteres “asdf”. Repita C-s conforme necessário para procurar itens adiante, ouC-r para pesquisar itens para trás| |C-r asdf Enter |Pesquisa para trás a cadeia de caracteres "asdf". Repita C-r conforme necessário para procurar itens para trás, ouC-s para pesquisar itens adiante| |M-'%' antigoEnter novo Enter |Pesquisa cada instância de “antigo” e solicita a substituição por “novo”. Você pode forçar a substituição de todos os itens digitando'!' durante a solicitação| |C-x C-c |Encerra o Emacs e solicita o armazenamento de cada buffer não salvo antes de fazer isso| |C-x C-s |Salva o buffer atual no arquivo| |C-x C-w novo-arquivo.txt Enter |Salva o buffer atual no arquivo //"new-file.txt"//| ====== Navegação ====== **Capítulo anterior: [[slackbook:vi|vi]]** **Capítulo seguinte: [[slackbook:network|Networking]]** ====== Fontes ====== * Fonte original: [[http://www.slackbook.org/beta]] \\ * Originalmente escrito por Alan Hicks, Chris Lumens, David Cantrell, Logan Johnson. Traduzido para o português brasileiro por Vinicius Moraes ([[wiki:user:wolper|wolper]]). {{tag>slackbook emacs text_editor}}