Jak mogę rozpocząć naukę Emacsa Lispa?


39

Tło:

Jestem głównie użytkownikiem vi i przechodzę na Emacsa.

Przekroczyłem podstawy i teraz używam go do pisania kodu w C i niektórych Pythonach, planując również konwersję R.

Pisałem (Common) LISP przez lata ponad dwie dekady temu, kiedy byłem w szkole, ale teraz poważnie się skończyłem (mogę napisać witaj świecie, ale to wszystko).

Pytanie:

Co poleciłbyś facetowi z mojej pozycji, aby poznał środowisko Emacs LISP i zaczął hakować Emacsa.

Czy są książki, blogi, zasoby, które powinienem przeczytać, ćwiczenia, które powinienem wykonać?

Odpowiedzi:


11

Z mojego doświadczenia, dołączony samouczek na temat Emacsa Lispa nie był zbyt pomocny (próbowałem dwa razy przez lata i nie udało mi się). Zamiast tego w końcu skorzystałem z dołączonej Emacs Lisp Reference.

Co w końcu zadziałało:

Uświadom sobie, że Emacs Lisp ma dwa aspekty: sam podstawowy język i interakcję z Emacsem. Rozdziel te dwa w swoim umyśle. Skoncentruj się najpierw na pierwszym (nie powinno być zbyt trudne, ponieważ nauczyłeś się Lisp w przeszłości). Ćwicz strony, takie jak Excercism .

Gdy opanujesz podstawy (pętle, funkcje, zmienne, warunkowe itp.), Przejdź do aspektów związanych z samym Emacsem (zmiana tekstu, zmiana buforów itp.). Jest to ogromne i prawdopodobnie zagubisz się w morzu szczegółów. Jest kilka rzeczy, które powinieneś zrozumieć naprawdę dobrze, ponieważ będziesz ich często używać. Oni są:

  • interaktywny
  • wycieczka ratunkowa
  • ograniczenie zapisu
  • haki
  • funkcje doradcze
  • z bieżącym buforem

Kiedy je zrozumiesz, zamiast spędzać cały czas na czytaniu dokumentacji ELisp, pomyśl o prostych problemach z Emacsem, które chcesz napisać, i spróbuj je rozwiązać za pomocą Elisp. Prawdopodobnie będziesz potrzebować pomocy w niektórych krokach i właśnie tam Google może ci pomóc.

Przykłady problemów, które rozwiązałem, ćwicząc Elisp:

  • Gdy używasz przechwytywania org i piszesz tekst w ostatnim wierszu bufora przechwytywania, nie umieszcza on nowego wiersza na końcu, a więc gdybym miał nagłówki po pozycji przechwytywania, nagłówek ten nie byłby już nagłówkiem . Rozwiązaniem było wykonanie haka, który sprawdza, czy są jakieś nowe wiersze, a jeśli nie, dodaj jeden na końcu przechwytywania.

  • Po przechwyceniu i ponownym włożeniu pliku w jednym kroku nie jest zapisywany plik, do którego wpis został przebudowany. Ale jeśli zrobię to bez ponownego napełniania, tak się stanie. Naprawiłem tę niespójność.

  • Pisząc minuty podczas spotkania (w pliku org), jeśli pojawia się TODO dla kogoś, chcę zrobić przechwytywanie, które będzie szukało nagłówka o nazwie TODO (pod nagłówkiem najwyższego poziomu, w którym jestem) i umieści TODO w tam. Każde spotkanie ma swój własny nagłówek zadań do wykonania i powinien przejść do bieżącego spotkania w pliku. Polegało to na napisaniu funkcji, która idzie na drzewo do najwyższego poziomu i szuka dziecka o nazwie TODO.

  • Zabij wszystkie bufory określonego trybu (może istnieć funkcja wewnętrzna, która już to robi, ale nie wiedziałem o tym).

Na koniec upewnij się, że znasz następujące skróty klawiszowe:

  • Cx Ce (oceń wyrażenie)
  • Ch v (sprawdź znaczenie i wartość zmiennej)
  • Ch f (wyszukaj opis wbudowanej funkcji).

33

Cóż za świetne pytanie! Oto ścieżka, którą podjąłem:

Krok 0: Przeczytaj samouczek Emacsa

Przeczytaj samouczek Emacsa zanim cokolwiek innego. Wygląda na to, że to zrobiłeś. Dobrze na tobie! Jednak dla każdego, kto przyjdzie do tego w późniejszym czasie, jest to miejsce na rozpoczęcie podróży Emacsem. Istnieje wiele wprowadzających w błąd postów na blogu. Oni nadmiernie komplikują rzeczy. Emacs ułatwia:

  1. Uruchom Emacsa
  2. naciśnij <RET>

Możesz również uzyskać do niego dostęp za pośrednictwem Ctrl + h tlub C-h tw notacji Emacs.

Samouczek przedstawia podstawowe pojęcia dotyczące Emacsa, wyjaśnia terminologię historyczną i umożliwia rozpoczęcie pracy w mniej niż 30 minut. To także stanowi scenę do następnego kroku.

Otwórz Emacsa.  Naciśnij enter.  To jest takie proste!

Krok 1: Przeczytaj „Wprowadzenie do programowania w Emacs Lisp”

Następnym krokiem jest przeczytanie Wstępu do programowania w Emacs Lisp . Nie mogę wystarczająco polecić tej książki; jest tak dobrze napisane! Jest dostarczany z większością instalacji Emacsa 1 . Po prostu naciśnij C-h ii wybierz go z menu. Możesz także przejść bezpośrednio do niego C-h i m Emacs Lisp Intro.

Przedmowa stwierdza:

Ten tekst został napisany jako elementarne wprowadzenie dla osób niebędących programistami.

Powinno powiedzieć „dla osób, które nie są programistami Lisp”. Lisp różni się nieco od innych języków, więc warto go przeczytać, jeśli nie znasz Lisp. Autor ma przystępny styl i podaje wiele przykładów. Przepracowanie zajęło mi około tygodnia.

Krok 1.5: Wskazówki dotyczące rozwoju Emacsa Lispa z Johnem Wiegleyem

Pod koniec 2015 r. John jest opiekunem projektu Emacs . Sacha Chua przeprowadza z nim świetny wywiad , w którym John omawia podstawy Emacsa Lispa, środowiska programistycznego, i udziela wielu świetnych porad.

Krok 2: Przeczytaj OPC (kod innej osoby)

2a. Przeczytaj kod źródłowy

Ponieważ Emacs jest „rozszerzalnym, konfigurowalnym, samodokumentującym się edytorem wyświetlania w czasie rzeczywistym”, cały kod źródłowy jest dołączony. Naucz się korzystać z funkcji pomocy, C-h ffunkcji i C-h vzmiennej. Zawsze jest link do kodu źródłowego:

Kliknij link do kodu źródłowego, aby zobaczyć kod źródłowy!

2b. Przeczytaj wszystkie init.el„s

Wiele osób śledzi swoje init.elpliki w Git lub Mercurial. Poszukaj ich. Jedną sztuczką jest kliknięcie profilu osoby na StackOverflow, szczególnie emacs.stackexchange.com :

Koleś jest zaawansowanym użytkownikiem!

Często mają linki do swojej witryny GitHub lub osobistej witryny:

Płać brud!

Repo nazywane dotemacslub dotfilessą dość powszechne. Z czasem zrozumiesz, jak wygląda dobry kod i jak wygląda zły kod. Dowiesz się także wielkich nazwisk, takich jak Xah , Sasha Chua , binchen , Magnar Sveen , abo-abo i wielu innych. Jest tak wiele osób, z których można się uczyć!

Krok 3: Włam się do Emacsa

Rzuć sobie wyzwanie, aby napisać pożądaną funkcjonalność. Nigdy nie kopiuj kodu na ślepo; zawsze znajdź czas, żeby to zrozumieć. Jeśli tego nie rozumiesz, nie używaj go! Kiedy poświęcasz czas na zrozumienie fragmentu kodu, oprócz uczenia się czegoś nowego, często zastanawiasz się nad sposobami ulepszenia go w konkretnym przypadku użycia. To okazja do włamania! W końcu po to init.eljest twój ! Popełniaj błędy, niszcz rzeczy, ucz się debugowania. Przekonasz się, że ponieważ Emacs jest napisany w Elisp, rozwój jest rozkoszą.

Krok 4: Zadaj pytanie na emacs.stackexchange.com

Odkryłem, że społeczność Emacsa na StackExchange uwielbia dobre pytanie Elisp. Więc hakuj z przekonaniem, że inni docenią twoje wysiłki w nauce.

Krok 5: Odpowiedz na pytania na stronie emacs.stackexchange.com

Nic nie wyjaśnia twojego zrozumienia, jak próba wyjaśnienia czegoś. Trollując stronę główną, znajdziesz także odpowiedzi na pytania, o których nie wiedziałeś, że masz.

Wniosek

Z czasem będziesz w stanie szybciej generować rozwiązania i odpowiadać na pytania innych osób. Jak każde programowanie, może być frustrujące. Pamiętaj jednak, aby wczoraj osądzić się przeciwko sobie. Niektórzy hakują Emacsa dosłownie od 30 lat! Jednak przez większość czasu przekonasz się, że Emacs jest przyjemnością w pracy, a wolność, którą daje, jest inspirująca.

Miłego hakowania! :)

PS: Sprawdź zło pakietu .


1 Niektóre instalacje nie są z tym związane. Na przykład użytkownicy Debiana muszą zainstalować go osobno. To trochę głupie , ale jest przechowywane w niewolnych repozytoriach . Dodaj niewolne repozytorium /etc/apt/sources.list, dołączając non-freena końcu każdego wpisu:

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

1
wydaje się, że właśnie odwiedziłem
quora

10

Polecam „Emacs Lisp Intro”.

„Emacs Lisp Intro” może być już dostępny w formacie informacyjnym w twoim Emacsie. Spróbuj C-h i m Emacs Lisp Intro RETlub oceń (info "(eintr) Top")w Emacs.

Jeśli to się nie powiedzie, wyszukaj w Internecie „Emacs Lisp Intro”.


7
  1. Zacznij od strony Wiki Emacsa Dowiedz się Emacs Lisp .

    Nie sama ta strona nauczy Cię Emacsa Lispa. Zamiast tego będzie wskazywać zasoby edukacyjne - dokładnie to, czego szukasz tutaj , z twoim pytaniem. Wielu użytkowników przyczyniło się do tego i edytowało go przez lata. To ma zarówno zalety, jak i wady w blogu jednego użytkownika. Jakość sugestii jest oczywiście różna ze względu na różnorodność danych wejściowych.

  2. Poza tym - wszystko, co powiedzieli inni tutaj, szczególnie począwszy od wbudowanego dokumentu Emacsa:

    • Podręcznik Elisp - głównie odniesienie, ale także kilka dobrych wskazówek dotyczących użytkowania i informacji koncepcyjnych. Jest wbudowany w Emacsa: C-h inastępnie wybierz instrukcję Elisp.

    • The Emacs Lisp Intro - wprowadzenie krok po kroku do Lisp i Emacs Lisp. Również wbudowany w Emacsa i dostępny z C-h i.

  3. Ponieważ użyłeś Common Lisp, bardzo łatwo będzie podnieść Emacsa Lispa. Uważaj się za szczęściarza.

    Jeśli używałbyś Common Lisp (lub Zeta Lisp lub cokolwiek innego) na maszynie Lisp, to doświadczenie byłoby całkiem podobne. Możesz myśleć o Emacsie jako (między innymi) świetnym środowisku Lisp. Podczas nauki możesz szybko przejść od zera do 60.

  4. Baw się dobrze!


2

Jako odświeżenie Lisp gorąco polecam pierwsze trzy rozdziały Paradygmatu programowania sztucznej inteligencji Petera Norvigsa . Dają ci świetne i szybkie (re) wprowadzenie do Lisp, dzięki czemu szybko wrócisz na właściwe tory.

Dla wszystkich noobów jest WSPÓLNY LISP: Delikatne wprowadzenie do obliczeń symbolicznych, które uczy tych samych pojęć, ale w znacznie niższym tempie.

Obie książki są dostępne online, za darmo.

Po przejściu jednego z powyższych, możesz przeczytać wszystkie posty oznaczone Elisp na nullprogram.com i przejrzeć przewodnik do czytania na masteringemacs.org . Aby dowiedzieć się o typowych pułapkach, pomocne będzie przeczytanie najważniejszych pytań tutaj . W przypadku konkretnych problemów wyszukaj tę stronę, kod rozety lub ulubioną wyszukiwarkę.

Po zapoznaniu się z podstawami podręczniki informacyjne zazwyczaj odpowiedzą na większość pozostałych pytań, które pojawiają się podczas hakowania na Emacsie.


1

Ponieważ masz doświadczenie w Common Lisp i „przekroczyłeś podstawy”, nie ma sensu gubić się w „Wprowadzenie do programowania w Emacs Lisp”.

To, co możesz zrobić od razu (nie mam doświadczenia w CL i działało to dla mnie) to:

1) znajdź używany tryb i spróbuj dodać funkcje, znajdziesz pomoc w Emacs Lisp Reference

2) napisz własny plik z własnymi prostymi funkcjami, tutaj ponownie użyj Emacs Lisp Reference

Lista help-gnu-emacs jest niezwykle pomocna.


1

Co poleciłbyś facetowi z mojej pozycji, aby poznał środowisko Emacs LISP i zaczął hakować Emacsa.

Naprawdę nie sądzę, że musisz przeczytać coś konkretnego na temat emacs lisp. Nie jest tajemnicą, że jeśli chcesz coś zrobić w Emacsie, jest szansa, że po prostu musisz znaleźć odpowiednie polecenie lub ktoś już napisał kod i teraz znajduje się gdzieś na stronie wiki lub github, lub został przekształcony we wtyczkę . Wystarczy skopiować i wkleić ten kod, a następnie go przeczytać , nauczysz się sporo wypaczać Emacsa, dopóki nie będziesz w jakiś sposób zadowolony z .emacs.

Jeśli chcesz dowiedzieć się, jak dostosować Emacsa, niestandardowe konfiguracje innych osób mogą być dobrym źródłem mądrości. Wybraną listę takich konfiguracji można znaleźć tutaj . Chociaż tak naprawdę posiadanie własnej wizji działa lepiej, a odwiedzanie cudzych plików .emacs jest zwykle uzasadnione tylko wtedy, gdy chcesz uzyskać odpowiedzi na niektóre pytania [np. Jak ustrukturyzować mój kod / pakiety?] Lub jakiś kod skopiowany dla określonego celu.

Przeglądanie MELPA skłoniło mnie do zainstalowania i wypróbowania może kilkunastu pakietów.

Jeśli masz zamiar opracować wtyczkę, odkryłem, że czytanie kodu konkretnej wtyczki, która ci się podoba, może zacząć dość szybko.

Ponieważ używasz vi, sprawdź tryb zła , to zadziałało dla mnie świetnie. Poleciłbym również ster z helm-apropos(lub po prostu aproposjeśli nie chcesz helm) poleceniem, aby ułatwić ci podróż.

Radzę więc od razu przejść do punktu dostosowywania, a dowiesz się wszystkiego, czego potrzebujesz w podróży. Zwłaszcza, że ​​zhakowałeś seplenienie, dawno temu lub nie, a ponieważ nauka elisp jest, o ile wiem, środkiem do osiągnięcia celu, jakim jest dostosowanie emacsa.


1

Ścieżka Elisp na Exercism.io to także świetny sposób na poprawę swoich umiejętności. Ćwiczenia są bardziej skoncentrowane na elisp niż na Emacsie, ale obejmie dobry zakres podstaw, takich jak wyrażenia regularne, struktury danych, matematyka itp.


Czy możesz poprawić to odniesienie (np. Podać link)? Czy możesz streścić to, co się tam znajduje (wydaje się, że jakieś ćwiczenia)?
Drew

exercism.io To strona, na której możesz wybrać język i rozwiązać różne problemy z nim - i zobaczyć rozwiązania innych osób. Odkryłem, że przeglądanie rozwiązań innych problemów, które właśnie spędziłeś, jest dobrym sposobem na poznanie nowszych funkcji.
Beetle B.

0

Wydaje mi się, że odpowiedź Lorena Ipsuma dość dobrze to obejmuje.

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

Chciałbym tylko dodać, że zakładam, że znasz podstawy Lisp. To by ci pomogło, ale nie jest konieczne (wrócę do tego.)

Jednym ze sposobów nauki jest po prostu zhakowanie lub zmodyfikowanie istniejącego trybu / rozszerzenia. Nauczyłem się tego w 93 roku, hakując plik trybu języka Ady. To było jedno z najbardziej zabawnych doświadczeń, jakie miałem na studiach.

Możesz to zrobić z wybranym językiem, powiedzmy, trybem Java, trybem Lisp, a nawet plikiem w trybie Elisp.

Zmień to, dodaj makra itp. Tak to zrobiłem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.