Emacs Lisp'i öğrenmeye nasıl başlayabilirim?


39

Arka fon:

Ben çoğunlukla vi kullanıcısıyım ve Emacs'a dönüştürüyorum.

Temelleri geçmiş ve şimdi de bir R dönüşümü yapmayı planlayan C ve bazı Python kodlarını yazmak için kullanın.

Yirmi yıldan fazla bir süredir yüksek lisans okulundayken (Yaygın) LİSP yazdım ama şimdi ciddi bir şekilde tökezledim (merhaba dünya yazabilirim ama o kadar).

Soru:

Emacs LISP ortamını öğrenmek ve Emac'leri hacklemeye başlamak için benim pozisyonumdaki bir erkeğe ne önerirsiniz?

Kitaplar, bloglar, okumam gereken kaynaklar, yapmam gereken alıştırmalar var mı?

Yanıtlar:


11

Tecrübelerime göre, Emacs Lisp'in içerdiği öğretici çok yardımcı olmadı (yıllar boyunca iki kez denedim ve başarısız oldum). Bunun yerine, sonunda Emacs Lisp Referansını kullandım.

Sonunda ne işe yaradı:

Emacs Lisp'in iki yönü olduğunu fark edin: Temel dilin kendisi ve Emacs ile etkileşimi. Bu ikisini aklında ayır. Önce eskisine odaklanın (geçmişte Lisp'i öğrendiğiniz kadar zor olmamalı). Alıştırma yapmak için Excercism gibi siteleri kullanın .

Temelleri (döngüler, fonksiyonlar, değişkenler, şartlar, vb.) Bir kavrayışınız olduğunda, Emacs'ın kendisini içeren özelliklere geçin (metni değiştirmek, tamponları değiştirmek vb.). Bu çok büyük ve muhtemelen bir detaylar denizinde kaybolacaksınız. Onları sık kullanacağınız için gerçekten iyi anlamanız gereken birkaç şey var . Onlar:

  • interaktif
  • save-gezi
  • save-kısıtlama
  • kancalar
  • danışma fonksiyonları
  • ile akım-tampon

Bunları anladığınızda, tüm zamanınızı ELisp referansını okuyarak geçirmek yerine, Emacs ile yazacağınız ve bunları Elisp ile çözmeyi deneyeceğiniz basit problemleri düşünün. Bazı adımlarda büyük olasılıkla yardıma ihtiyacınız olacak ve bu Google’ın size yardımcı olabileceği yer.

Elisp'imi uygulamak için çözdüğüm sorunlara örnekler:

  • Eğer org-yakalama kullanın ve yakalama tamponunun son satırdaki metni yazarken, o mu değil sonunda bir yeni satır koymak ve herhangi başlıklar vardı eğer öyleyse sonra yakalama pozisyonuna, yani başlık artık bir başlık olurdu . Düzeltme, herhangi bir yeni satır olup olmadığını kontrol eden bir kanca yapmaktı ve eğer değilse, yakalamanın sonuna bir tane ekleyin.

  • Bir adımda yakalayıp yeniden doldurduğumda, girişin yeniden doldurulduğu dosyayı kaydetmiyor. Ama yeniden doldurmadan yakalarsam, olur. Bu tutarsızlığı düzelttim.

  • Bir toplantı sırasında tutanak yazarken (bir org dosyasında), birisi için bir TODO gelirse, TODO'lar (içinde bulunduğum en üst düzey başlığın altında) olan bir başlığı arayacak bir yakalama yapmak ve TODO'yu yerleştirmek istiyorum. Orada. Her toplantının kendi TODO başlığı vardır ve dosyadaki geçerli toplantı için bir başlığa gitmesi gerekir. Bu, ağacı en üst seviyeye çıkaran ve TODO adı verilen bir çocuğu arayan bir fonksiyonun yazılmasını içeriyordu.

  • Belli bir modun tüm tamponlarını öldür (zaten bunu yapan dahili bir fonksiyon olabilir, ama bilmiyordum).

Son olarak, aşağıdaki anahtar bağlantıları bildiğinizden emin olun:

  • Cx Ce (ifadeyi değerlendir)
  • Ch v (bir değişkenin anlamını ve değerini aramak)
  • Ch f (dahili bir fonksiyonun tanımına bakınız).

33

Ne güzel bir soru! İşte aldığım yol:

Adım 0: Emacs Eğitimini Oku

Her şeyden önce Emacs Eğitimini okuyun. Bunu yapmış gibisin. Aferin sana! Ancak, daha sonraki bir zamanda buna gelen herkes için burası Emacs yolculuğunuza başlamanız gereken yer. Dışarıda bir sürü yanıltıcı blog yazısı var. Her şeyi karmaşıklaştırıyorlar. Emacs kolaylaştırır:

  1. Emacs Başlat
  2. Basın <RET>

Ayrıca Emacs notasyonu ile Ctrl + h tveya C-h tEmacs notasyonunda da erişebilirsiniz .

Öğretici, Emacs'in temel kavramlarını tanıtır, tarihi terminolojiyi netleştirir ve 30 dakikadan daha az bir sürede çalışmaya başlamanızı sağlar. Ayrıca bir sonraki adım için aşamaları belirler.

Emacs'i açın.  Enter tuşuna basın.  Bu kadar kolay!

Adım 1: "Emacs Lisp'te Programlamaya Giriş" bölümünü okuyun.

Bir sonraki adım Emacs Lisp'te Programlamaya Giriş okumaktır . Bu kitabı yeterince öneriyorum; çok iyi yazılmış! Çoğu Emacs kurulumu 1 ile birlikte gelir . Basitçe basın C-h ive menüden seçin. Ayrıca doğrudan üzerinden de gidebilirsiniz C-h i m Emacs Lisp Intro.

Önsöz devletler,

Bu metin programcı olmayan insanlar için temel bir giriş olarak yazılmıştır.

"Lisp olmayan programcılar olan insanlar için" demeli. Lisp, diğer dillerden biraz farklıdır, bu yüzden Lisp'e aşina değilseniz, okumaya değer. Yazar ulaşılabilir bir tarza sahip ve birçok örnek yürüyor. Çalışmam bir hafta sürdü.

Adım 1.5: John Wiegley ile Emacs Lisp Geliştirme İpuçları

John, 2015 yılının sonlarından itibaren Emacs projesinin sahibi . Sacha Chua onunla büyük bir görüşme yapar burada John Emacs Lisp, geliştirme ortamının temelleri üzerine çıkması ettiği ve büyük tavsiye bir sürü sağlar.

Adım 2: OPC'yi Okuyun (Diğer Kişilerin Kodu)

2a. Kaynak kodu oku

Emacs "genişletilebilir, özelleştirilebilir, kendi kendini belgeleyen, gerçek zamanlı görüntü düzenleyici" olduğundan, tüm kaynak kodu dahil edilmiştir. C-h fBir işlev ve C-h vbir değişken için yardım özelliklerini kullanmayı öğrenin . Her zaman kaynak koduna bir link vardır:

Kaynak kodunu görmek için kaynak koduna tıklayın!

2B. Tüm Oku init.el's

Pek çok insan init.eldosyalarını Git veya Mercurial'da izler . Onları araştırın. Bir hile, insanların emolar.stackexchange.com , StackOverflow'taki profiline tıklamaktır :

Dostum güçlü bir kullanıcı!

Genellikle GitHub veya kişisel web sitelerine linkleri vardır:

Madenli toprak!

Repolar aranır dotemacsveya dotfilesoldukça yaygındır. Zamanla, iyi kodun neye benzediğini ve kötü kodun neye benzediğini anlayacaksınız. Ayrıca, Xah , Sasha Chua , binchen , Magnar Sveen , abo-abo ve daha birçokları gibi büyük isimleri de öğreneceksiniz . Öğrenecek çok insan var!

Adım 3: Emacs üzerinde Hack

İstediğiniz işlevselliği yazmak için kendinize sorun. Kodunuzu asla kör kopyalamayın; her zaman anlamak için zaman ayırın. Eğer anlamıyorsan, kullanma! Bir kod parçasını anlamak için zaman ayırdığınızda, yeni bir şey öğrenmenin yanı sıra, genellikle kendi kullanım durumunuz için onu geliştirmenin yollarını düşünürsünüz. Bu kesmek için bir fırsat! Sonuçta, bunun init.eliçin var! Hata yap, işleri kır, hata ayıklamayı öğren. Emacs Elisp ile yazılmış olduğu için gelişmenin bir zevk olduğunu göreceksiniz.

Adım 4: emacs.stackexchange.com adresinde soru sorun

StackExchange'teki Emacs topluluğunun iyi bir Elisp sorusunu sevdiğini öğrendim. Bu nedenle, başkalarının öğrenme çabalarınızı takdir edeceği konusunda kendinize güvenerek hackleyin.

Adım 5: emacs.stackexchange.com'daki soruları cevaplayın

Hiçbir şey bir şeyi açıklamaya çalışmak gibi anlayışınızı netleştirmez. Ana sayfaya trolling, hiç sahip olmadığınızı hiç bilmediğiniz soruların cevaplarını da bulacaksınız.

Sonuç

Zaman geçtikçe kendinizi daha hızlı çözümler üretebilecek ve diğer kişilerin sorularını cevaplayabileceksiniz. Tüm programlama gibi, sinir bozucu olabilir. Ancak, bugün kendinizi dün kendinize karşı yargılamayı unutmayın. Bazı insanlar 30 yıl boyunca Emac'leri hackliyorlar! Yine de çoğu zaman, Emacs'in birlikte çalışmaktan zevk aldığını ve size verdiği özgürlüğü ilham verici bulacağınızı göreceksiniz.

Mutlu hack! :)

Not: Kötülüğü kontrol et .


1 Bazı kurulumlar onunla birlikte gelmiyor. Örneğin Debian kullanıcıları, ayrı olarak kurmalıdır. Bu var tür Silly ama oluyor olmayan serbest repo depolanan . Her girişin sonuna /etc/apt/sources.listekleyerek ücretsiz bir repo ekleyin non-free:

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

1
sadece
quora

10

"Emacs Lisp Intro" yu öneririm.

"Emacs Lisp Intro", Emacs içinde bilgi biçiminde zaten mevcut olabilir. Emacs'ta deneyin C-h i m Emacs Lisp Intro RETya da değerlendirin (info "(eintr) Top").

Bu başarısız olursa, "Emacs Lisp Intro" için web’de arama yapın.


7
  1. Emacs Wiki sayfasıyla başlayın Emacs Lisp .

    Bu sayfanın kendisi size Emacs Lisp'i öğretmez. Bunun yerine kaynakların öğrenilmesi - tam olarak burada ne aradığınızı , sorunuzla işaret edecek. Birçok kullanıcı buna katkıda bulundu ve yıllar boyunca düzenledi. Bu, bir kullanıcının blogunda bulunan avantajların yanı sıra avantajlar da sunar. Buradaki önerilerin kalitesi, girdilerin çeşitliliği nedeniyle elbette çeşitlidir.

  2. Bunun ötesinde - burada başkalarının söylediği her şey, özellikle yerleşik Emacs dokümanı ile:

    • Elisp el kitabı - çoğunlukla referans, ancak bazı iyi kullanım rehberliği ve kavramsal bilgi de. C-h iEmacs'a dahil edilmiştir: Elisp el kitabını seçin.

    • Emacs Lisp Giriş - Lisp ve Emacs Lisp için adım adım giriş. Ayrıca Emacs içine yerleştirilmiş ve ondan temin edilebilir C-h i.

  3. Common Lisp'i kullandığınızdan beri Emacs Lisp'i almak çok kolay olacak . Bu konuda kendini şanslı say.

    Bir Lisp makinesinde Common Lisp (veya Zeta Lisp veya her neyse) kullanmış olsaydınız, deneyim oldukça benzer olurdu. Emacs'ı (diğer şeylerin yanı sıra) harika bir Lisp ortamı olarak düşünebilirsiniz. Öğrenirken, hiçbir zaman sıfırdan 60'a gidebilirsiniz.

  4. İyi eğlenceler!


2

Lisp tazeleme olarak, Peter Norvigs Yapay Zeka Programlama Paradigmaları'nın ilk üç bölümünü şiddetle tavsiye ediyorum . Bunlar size hızlı ve hızlı bir şekilde geri dönmenizi sağlayacak olan Lisp'e büyük ve hızlı bir giriş (yeniden) sunumu sağlıyor.

Toplam noobs için COMMON LISP: Aynı kavramları öğreten ancak çok daha düşük hızda öğreten Sembolik Hesaplamaya Nazik Bir Giriş .

Her iki kitap da ücretsiz çevrimiçi olarak mevcuttur.

Yukarıdakilerden birini geçtikten sonra, nullprogram.com adresindeki tüm Elisp etiketli yayınları okuyabilir ve masteringemacs.org adresindeki okuma rehberine bakabilirsiniz . Burada en çok sorulan soruları okuyan ortak tuzaklar hakkında bilgi sahibi olmak yardımcı olacaktır. Belirli sorunlar için bu siteyi, rozet kodunu veya en sevdiğiniz arama motorunu arayın.

Temel bilgilere aşina olduktan sonra, Bilgi kılavuzları genellikle Emac'lere saldırırken ortaya çıkan soruların çoğuna cevap verecektir.


1

Common Lisp'te bir geçmişe sahip olduğunuzdan ve "temelleri aştığınızdan" emin olduğunuzda, "Emacs Lisp'te Programlamaya Giriş" de kaybolacak hiçbir şey yoktur.

Hemen yapabilecekleriniz (CL'de bir geçmişim yok ve benim için işe yaradı):

1) kullandığınız bir mod bulun ve işlevler eklemeye çalışın, Emacs Lisp Referansında yardım bulacaksınız.

2) kendi özel dosyanızı kendi basit işlevlerinizle yazın, burada yine Emacs Lisp Referansını kullanın

Yardım-gnu-emacs listesi son derece faydalıdır.


1

Emacs LISP ortamını öğrenmek ve Emac'leri hacklemeye başlamak için benim pozisyonumdaki bir erkeğe ne önerirsiniz?

Gerçekten emacs lisp ile ilgili özel bir şeyler okuman gerektiğini düşünmüyorum. Emacs'ta bir şey yapmak istiyorsanız, olasılık , doğru komutu bulmak zorundasınız ya da birileri zaten kodu yazmış ve şimdi bir wiki sayfasında ya da github'da bir eklentide bulunmuşsa ya da bir eklentiye yapılmışsa, sır değildir. . Sadece bu kodu kopyalayıp yapıştırarak ve okuyarak .emac'larınızdan biraz memnun kaldığınızda, Emacs lisp'tan adil bir pay almayı öğrenmiş olacaksınız.

Emac'lerin nasıl özelleştirileceği hakkında fikir edinmek istiyorsanız, başkaları tarafından yapılan özel yapılandırmalar iyi bir bilgelik kaynağı olabilir. Seçtiğiniz konfigürasyonların seçilmiş bir listesini burada bulabilirsiniz . Gerçi, gerçekten, kendi vizyonunuzun olması daha iyi sonuç verir ve diğer insanların .emac'lerini ziyaret etmek genellikle yalnızca bazı soruların cevaplanmasını istediğiniz durumlarda [örneğin kodumu / paketlerimi nasıl yapılandırabilirim?] Veya bazı özel hedeflerinize kopyalanan bazı kodlar için garanti altına alınır.

Tarama MELPA yükleyip belki paketlerin bir düzine denemek için beni.

Bir eklenti geliştirecekseniz, sevdiğiniz bazı eklentilerin kodlarını okumanın oldukça hızlı bir şekilde başlamanızı sağlayabileceğini öğrendim.

Vi kullandığınızdan, kötü modu kontrol edin , benim için çok iyi çalıştı. Yolculuğunuzu kolaylaştırmak için dümeni helm-apropos(veya sadece aproposistemiyorsanız helm) komutunu da öneririm .

Bu yüzden tavsiyem derhal kişiselleştirme noktasına ulaşmak ve hareket halindeyken ihtiyacınız olan her şeyi öğreneceksiniz. Özellikle, uzun zaman önce ya da uzun zaman önce lisp hacklediniz ve elisp öğrenme, söyleyebildiğim kadarıyla, sizin için bir emacs özelleştirmek için bir yoldur.


1

Exercism.io'daki Elisp pisti de becerilerinizi geliştirmek için eğlenceli bir yoldur. Alıştırmalar Emac'lardan ziyade elisp üzerinde yoğunlaşmıştır ancak normal ifadeler, veri yapıları, matematik vb.


Bu referansı geliştirebilir misiniz (örneğin, bir bağlantı sağlar)? Lütfen orada ne bulunduğunu özetler misiniz (bir tür alıştırmalar, görünüyor)?
Drew,

exercism.io Bir dil seçip çeşitli problemleri çözebileceğiniz ve başkalarının çözümlerini görebileceğiniz bir site. Başkalarının problemlere ilişkin çözümlerine göz attığımda, az önce harcadığınız zamanı yeni özellikleri öğrenmenin iyi bir yoludur.
Beetle B.

0

Bana öyle geliyor ki, Loren Ipsum'un cevabı oldukça iyi.

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

Basitçe ekleyeyim, Lisp'in temellerini bildiğinizi varsayıyorum. Bu size yardımcı olacaktır, ancak gerekli değildir (Buna geri döneceğim).

Öğrenmenin bir yolu basitçe mevcut bir modu / uzantıyı kesmek veya değiştirmek. Ada dil modu dosyasını keserek 93'te tekrar öğrendim. Üniversitede geçirdiğim en eğlenceli deneyimlerden biriydi.

Böylece, seçtiğiniz bir dilden, yani bir Java modunu veya bir Lisp modunu veya hatta bir Elisp mod dosyasını yapabilirsiniz.

Değiştir, makro ekle, vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.