Como posso começar a aprender o Emacs Lisp?


39

Fundo:

Sou principalmente um usuário vi e estou convertendo para o Emacs.

Passado o básico e agora use-o para escrever código em C e em alguns Python com planos de fazer uma conversão em R também.

Escrevi LISP (Comum) há anos, mais de duas décadas atrás, quando eu estava na pós-graduação, mas agora eu gravei (posso escrever olá mundo, mas é isso).

Questão:

O que você recomendaria para um cara na minha posição para aprender o ambiente Emacs LISP e começar a invadir o Emacs.

Existem livros, blogs, recursos que devo ler, exercícios que devo fazer?

Respostas:


11

Na minha experiência, o tutorial incluído no Emacs Lisp não foi muito útil (tentei duas vezes ao longo dos anos e falhei). Em vez disso, finalmente usei o Emacs Lisp Reference incluído.

O que finalmente funcionou:

Perceba que há dois aspectos no Emacs Lisp: a própria linguagem básica e a interação com o Emacs. Separe esses dois em sua mente. Concentre-se primeiro no primeiro (não deve ser tão difícil quanto você aprendeu Lisp no passado). Use sites como o excercismo para praticar.

Depois de entender o básico (loops, funções, variáveis, condicionais, etc), passe para os aspectos que envolvem o próprio Emacs (alteração de texto, troca de buffers, etc.). Isso é vasto e você provavelmente se perderá em um mar de detalhes. Há algumas coisas que você deve entender muito bem, pois você as usará com frequência. Eles são:

  • interativo
  • salvar-excursão
  • restrição de salvamento
  • ganchos
  • funções de aconselhamento
  • com corrente-buffer

Depois de entender isso, em vez de gastar todo o seu tempo lendo a referência do ELisp, pense nos problemas simples que você tem com o Emacs que deseja escrever e tente resolvê-los com o Elisp. Você provavelmente precisará de ajuda em algumas das etapas, e é aí que o Google pode ajudá-lo.

Exemplos de problemas que resolvi para praticar meu Elisp:

  • Quando você usa a captura de organização e escreve texto na última linha do buffer de captura, ele não coloca uma nova linha no final; portanto, se eu tivesse alguma manchete após a posição de captura, essa manchete não seria mais uma manchete . A correção foi criar um gancho que verifique se há novas linhas e, se não houver, adicione uma no final da captura.

  • Quando captura e refile em uma etapa, ele não salva o arquivo para o qual a entrada foi refilada. Mas se eu capturar sem refil, ele faz. Eu consertei essa inconsistência.

  • Ao escrever minutos durante uma reunião (em um arquivo organizacional), se um TODO para alguém aparecer, quero fazer uma captura que procure um título chamado TODOs (abaixo do título de nível superior em que estou) e coloque o TODO em há. Cada reunião tem seu próprio título de TODOs e deve ir para o da reunião atual no arquivo. Isso envolvia escrever uma função que sobe na árvore até o nível superior e procura um filho chamado TODOs.

  • Mate todos os buffers de um determinado modo (pode haver uma função interna que já faça isso, mas eu não sabia disso).

Por fim, verifique as seguintes combinações de teclas:

  • Cx Ce (avaliar expressão)
  • Ch v (procure o significado e o valor de uma variável)
  • Ch f (procure a descrição de uma função embutida).

33

Que ótima pergunta! Aqui está o caminho que eu segui:

Etapa 0: Leia o Tutorial do Emacs

Leia o Tutorial do Emacs antes de mais nada. Parece que você fez isso. Bom em você! No entanto, para quem chega a esse ponto mais tarde, este é o lugar para começar sua jornada no Emacs. Existem muitas postagens de blog enganosas por aí. Eles complicam demais as coisas. O Emacs facilita:

  1. Iniciar o Emacs
  2. pressione <RET>

Você também pode acessá-lo via Ctrl + h tou C-h tna notação Emacs.

O tutorial apresenta os conceitos básicos do Emacs, esclarece a terminologia histórica e faz você entrar em menos de 30 minutos. Ele também prepara o cenário para o próximo passo.

Abra o Emacs.  Pressione Enter.  É tão fácil!

Etapa 1: Leia "Introdução à programação no Emacs Lisp"

O próximo passo é ler Uma Introdução à Programação no Emacs Lisp . Não posso recomendar este livro o suficiente; está tão bem escrito! Ele vem com a maioria das instalações do Emacs 1 . Simplesmente pressione C-h ie selecione-o no menu. Você também pode acessá-lo diretamente via C-h i m Emacs Lisp Intro.

O Prefácio declara,

Este texto foi escrito como uma introdução elementar para pessoas que não são programadores.

Deveria dizer "para pessoas que não são programadores de Lisp". O Lisp é um pouco diferente de outros idiomas, então vale a pena ler se você não estiver familiarizado com o Lisp. O autor tem um estilo acessível e percorre muitos exemplos. Levei cerca de uma semana para trabalhar.

Etapa 1.5: Dicas de desenvolvimento do Emacs Lisp com John Wiegley

No final de 2015, John é o mantenedor do projeto Emacs . Sacha Chua faz uma ótima entrevista com ele aqui, na qual John aborda o básico do Emacs Lisp, o ambiente de desenvolvimento, e fornece muitos bons conselhos.

Etapa 2: Leia OPC (código de outras pessoas)

2a Leia o código fonte

Como o Emacs é "o editor de exibição extensível, personalizável, auto-documentável e em tempo real", todo o código-fonte está incluído. Aprenda a usar os recursos de ajuda, C-h fpara uma função e C-h vpara uma variável. Sempre há um link para o código fonte:

Clique no link do código fonte para ver o código fonte!

2b. Leia todos os init.el's

Muitas pessoas rastreiam seus init.elarquivos no Git ou no Mercurial. Procure-os. Um truque é clicar no perfil das pessoas no StackOverflow, especialmente no emacs.stackexchange.com :

Cara é um usuário avançado!

Eles geralmente têm links para seu GitHub ou site pessoal:

Pague sujeira!

Repos chamados dotemacsou dotfilessão bastante comuns. Com o tempo, você terá uma noção de como é um bom código e como ele é. Você também aprenderá os grandes nomes, como os de Xah , Sasha Chua , Binchen , Magnar Sveen , Abo - Abo e muitos mais. Há tantas pessoas para aprender!

Etapa 3: hackear o Emacs

Desafie-se a escrever a funcionalidade desejada. Nunca copie o código cegamente; sempre reserve um tempo para entendê-lo. Se você não entender, não use! Quando você dedica um tempo para entender um pedaço de código, além de aprender algo novo, geralmente pensa em maneiras de aprimorá-lo para seu caso de uso específico. Esta é uma oportunidade para hackear! Afinal, init.elé para isso que serve! Cometer erros, quebrar coisas, aprender a depurar. Você verá que, como o Emacs está escrito em Elisp, o desenvolvimento é uma delícia.

Etapa 4: faça perguntas no emacs.stackexchange.com

Descobri que a comunidade Emacs no StackExchange adora uma boa pergunta sobre o Elisp. Portanto, corte com confiança que outras pessoas irão apreciar seus esforços para aprender.

Etapa 5: responda a perguntas no emacs.stackexchange.com

Nada esclarece sua compreensão como tentar explicar alguma coisa. Procurando na página principal, você também encontrará respostas para perguntas que você nunca soube que tinha.

Conclusão

Com o tempo, você poderá gerar soluções mais rapidamente e responder às perguntas de outras pessoas. Como toda a programação, pode ser frustrante. No entanto, lembre-se de se julgar hoje contra si mesmo ontem. Algumas pessoas estão hackeando o Emacs há, literalmente, 30 anos! Na maioria das vezes, porém, você verá que o Emacs é um prazer trabalhar e a liberdade que ele oferece é inspiradora.

Feliz hacking! :)

PS: Confira o pacote mal .


1 Algumas instalações não acompanham. Usuários do Debian, por exemplo, devem instalá-lo separadamente. É meio bobo , mas é armazenado em repositórios não gratuitos . Adicione um repositório não livre /etc/apt/sources.listanexando non-freeao final de cada entrada:

deb http://http.us.debian.org/debian stable main contrib non-free

11
parece que eu acabei de visitar o quora
user3496846 23/01

10

Eu recomendo o "Emacs Lisp Intro".

O "Emacs Lisp Intro" pode já estar disponível em formato de informação no seu Emacs. Experimente C-h i m Emacs Lisp Intro RETou avalie (info "(eintr) Top")no Emacs.

Se isso falhar, procure na Web por "Emacs Lisp Intro".


7
  1. Comece com a página Wiki do Emacs Learn Emacs Lisp .

    Não que essa página em si lhe ensine o Emacs Lisp. Em vez disso, ele apontará para recursos de aprendizado - exatamente o que você está procurando aqui , com sua pergunta. Muitos usuários contribuíram e o editaram ao longo de anos. Isso apresenta vantagens e desvantagens no blog de um usuário. A qualidade das sugestões é obviamente variada, devido à variedade de entradas.

  2. Além disso - tudo o que outros aqui disseram, especialmente começando com o documento interno do Emacs:

    • O manual Elisp - principalmente uma referência, mas também algumas boas orientações de uso e informações conceituais. Está embutido no Emacs: C-h idepois escolha o manual Elisp.

    • Introdução ao Emacs Lisp - introdução passo a passo ao Lisp e ao Emacs Lisp. Também embutido no Emacs e disponível em C-h i.

  3. Como você usou o Common Lisp, será super fácil pegar o Emacs Lisp. Considere-se com sorte com isso.

    Se você tivesse usado o Common Lisp (ou Zeta Lisp ou o que for) em uma máquina Lisp, a experiência seria bem parecida. Você pode pensar no Emacs como (entre outras coisas), um ótimo ambiente Lisp. Você pode ir de zero a 60 em pouco tempo, ao aprender.

  4. Diverta-se!


2

Como uma atualização do Lisp, recomendo os três primeiros capítulos dos Paradigmas de Peter Norvigs de Programação de Inteligência Artificial . Isso fornece uma (re) introdução ótima e rápida ao Lisp, que o levará de volta aos trilhos rapidamente.

Para os noobs totais, existe o COMMIS LISP: uma introdução suave à computação simbólica, que ensina os mesmos conceitos, mas em um ritmo muito mais baixo.

Ambos os livros estão disponíveis online, gratuitamente.

Depois de seguir uma das opções acima, você pode ler todas as postagens marcadas com Elisp no nullprogram.com e acessar o guia de leitura em masteringemacs.org . Para aprender sobre as armadilhas comuns, ler as principais perguntas aqui será de grande ajuda. Para problemas específicos, pesquise neste site, rosettacode ou no seu mecanismo de pesquisa favorito.

Depois de familiarizar-se com o básico, os manuais de informações geralmente respondem à maioria das perguntas restantes que surgem ao invadir o Emacs.


1

Como você tem experiência em Common Lisp e está "além do básico", não faz sentido se perder na "Introdução à programação no Emacs Lisp".

O que você pode fazer imediatamente (não tenho experiência em CL e funcionou para mim) é:

1) encontre um modo que você use e tente adicionar funções, você encontrará ajuda no Emacs Lisp Reference

2) escreva seu próprio arquivo personalizado com suas próprias funções simples; aqui, novamente, use o Emacs Lisp Reference

A lista help-gnu-emacs é extremamente útil.


1

O que você recomendaria para um cara na minha posição para aprender o ambiente Emacs LISP e começar a invadir o Emacs.

Realmente não acho que você precise ler algo específico no emacs lisp. Não é segredo que, se você quiser fazer algo no Emacs, é provável que você tenha que encontrar o comando certo ou alguém já tenha escrito o código e ele agora reside em algum lugar da página da wiki, ou github, ou foi transformado em um plugin . Apenas copiando e colando esse código e lendo-o , você terá aprendido uma boa parte do Emacs lisp quando estiver satisfeito com o seu .emacs.

Se você deseja obter algumas idéias sobre como personalizar o Emacs, configurações personalizadas de outras pessoas podem ser uma boa fonte de sabedoria. Uma lista selecionada de tais configurações você pode encontrar aqui . Embora, realmente, ter sua própria visão funcione melhor e visitar o .emacs de outras pessoas geralmente seja garantido apenas quando você deseja que algumas perguntas sejam respondidas [por exemplo, como estruturo meu código / pacotes?] Ou algum código copiado para algum objetivo específico seu.

Navegar no MELPA me levou a instalar e experimentar talvez uma dúzia de pacotes.

Se você estiver desenvolvendo um plug-in, descobri que a leitura do código de algum plug-in específico do seu gosto pode ajudá-lo a começar rapidamente.

Desde que você usa o vi, confira o modo maligno , ele funcionou muito bem para mim. Eu também recomendaria o leme com helm-apropos(ou apenas aproposse você não quiser helm) o comando para facilitar sua jornada.

Portanto, meu conselho é chegar ao ponto de personalização imediatamente e você aprenderá tudo o que precisa em movimento. Especialmente porque você hackou o lisp antes, há muito tempo ou não, e porque aprender elisp é, até onde eu sei, um meio para um fim para você, que é personalizar o emacs.


1

A faixa da Elisp no exercism.io também é uma maneira divertida de melhorar suas habilidades. Os exercícios são mais focados no elisp do que no Emacs, mas abrangem uma boa variedade de conceitos básicos, como expressões regulares, estruturas de dados, matemática, etc.


Você pode melhorar essa referência (por exemplo, fornecer um link)? Você pode resumir o que é encontrado lá (exercícios de algum tipo, ao que parece)?
Drew

exercism.io É um site onde você pode escolher um idioma e resolver vários problemas com ele - e ver as soluções de outras pessoas. Descobri que navegar nas soluções de outras pessoas de um problema que você acabou de resolver é uma boa maneira de aprender novos recursos.
Beetle B.

0

Parece-me que a resposta de Loren Ipsum o cobre muito bem.

https://emacs.stackexchange.com/a/47320/21433

Eu simplesmente acrescentaria que estou assumindo que você conhece o básico do Lisp. Isso o ajudaria, mas não é necessário (voltarei a isso.)

Uma maneira de aprender é simplesmente hackear ou modificar um modo / extensão existente. Eu aprendi isso em 93 cortando o arquivo no modo de linguagem Ada. Foi uma das experiências mais divertidas que tive na faculdade.

Assim, você pode fazer isso com uma linguagem de sua escolha, digamos, um modo Java, ou um modo Lisp, ou mesmo um arquivo no modo Elisp.

Altere, adicione macros, etc. Foi assim que eu fiz.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.