Bagaimana saya bisa mulai belajar Emacs Lisp?


39

Latar Belakang:

Saya sebagian besar pengguna vi dan saya mengonversi ke Emacs.

Melewati dasar-dasar dan sekarang menggunakannya untuk menulis kode dalam C dan beberapa Python dengan rencana untuk melakukan konversi R juga.

Saya menulis LISP (Umum) selama bertahun-tahun lebih dari dua dekade yang lalu ketika saya masih di sekolah pascasarjana tetapi sekarang saya sudah sangat bangkrut (bisa menulis halo dunia tapi hanya itu).

Pertanyaan:

Apa yang akan Anda rekomendasikan untuk seorang pria di posisi saya untuk belajar lingkungan Emacs LISP dan mulai meretas Emacs.

Apakah ada buku, blog, sumber daya yang harus saya baca, latihan yang harus saya lakukan?

Jawaban:


11

Dalam pengalaman saya, tutorial yang disertakan pada Emacs Lisp tidak terlalu membantu (saya mencoba dua kali selama bertahun-tahun dan gagal). Sebaliknya, saya akhirnya menggunakan Referensi Emacs Lisp yang disertakan.

Apa yang akhirnya berhasil:

Sadarilah bahwa ada dua aspek untuk Emacs Lisp: Bahasa dasar itu sendiri, dan interaksi dengan Emacs. Pisahkan keduanya dalam pikiran Anda. Fokus dulu pada yang pertama (jangan terlalu keras seperti yang Anda pelajari Lisp di masa lalu). Gunakan situs seperti Excercism untuk berlatih.

Setelah Anda menguasai dasar-dasar (loop, fungsi, variabel, kondisional, dll), beralih ke aspek yang melibatkan Emacs sendiri (mengubah teks, mengganti buffer, dll). Ini sangat luas, dan Anda mungkin akan tersesat dalam lautan detail. Ada beberapa hal yang harus Anda pahami dengan baik, karena Anda akan sering menggunakannya. Mereka:

  • interaktif
  • simpan-tamasya
  • pembatasan-simpan
  • kait
  • fungsi menasihati
  • dengan-current-buffer

Setelah Anda memahami ini, alih-alih menghabiskan seluruh waktu Anda membaca referensi ELisp, pikirkan masalah sederhana yang Anda miliki dengan Emacs yang ingin Anda tulis dan coba selesaikan dengan Elisp. Anda mungkin membutuhkan bantuan pada beberapa langkah, dan di situlah Google dapat membantu Anda.

Contoh masalah yang saya pecahkan untuk mempraktikkan Elisp saya:

  • Ketika Anda menggunakan org-capture, dan Anda menulis teks di baris terakhir buffer tangkap, itu tidak menempatkan baris baru di akhir, dan jadi jika saya punya berita utama setelah posisi penangkapan, informasi utama itu tidak lagi menjadi judul . Cara mengatasinya adalah dengan membuat kait yang memeriksa apakah ada baris baru, dan jika tidak, tambahkan satu di akhir tangkapan.

  • Ketika saya menangkap dan me-refile dalam satu langkah, itu tidak menyimpan file entri itu di-refile. Tetapi jika saya menangkap tanpa refiling, itu benar. Saya memperbaiki ketidakkonsistenan ini.

  • Saat menulis menit selama rapat (dalam file org), jika TODO untuk seseorang muncul, saya ingin melakukan penangkapan yang akan mencari judul yang disebut TODO (di bawah judul tingkat atas tempat saya berada) dan tempatkan TODO di sana. Setiap rapat memiliki judul TODO sendiri, dan harus menuju ke rapat untuk rapat saat ini dalam file. Ini melibatkan penulisan fungsi yang naik pohon ke tingkat atas, dan mencari seorang anak yang disebut TODO.

  • Bunuh semua buffer dari mode tertentu (mungkin ada fungsi internal yang sudah melakukan ini, tapi saya tidak mengetahuinya).

Akhirnya, pastikan Anda mengetahui ikatan kunci berikut:

  • Cx Ce (mengevaluasi ekspresi)
  • Ch v (mencari arti dan nilai variabel)
  • Ch f (lihat deskripsi fungsi bawaan).

33

Pertanyaan yang sangat bagus! Inilah jalan yang telah saya ambil:

Langkah 0: Baca Tutorial Emacs

Baca Tutorial Emacs sebelum yang lainnya. Sepertinya Anda sudah melakukan ini. Bagus untukmu! Namun, bagi siapa pun yang datang ke sini di lain waktu, ini adalah tempat untuk memulai perjalanan Emacs Anda. Ada banyak posting blog yang menyesatkan di luar sana. Mereka terlalu rumit. Emacs membuatnya mudah:

  1. Mulai Emacs
  2. tekan <RET>

Anda juga dapat mengaksesnya melalui Ctrl + h t, atau C-h tdalam notasi Emacs.

Tutorial memperkenalkan konsep dasar Emacs, menjelaskan terminologi historis, dan membuat Anda masuk dalam waktu kurang dari 30 menit. Itu juga mengatur panggung untuk langkah selanjutnya.

Buka Emacs.  Tekan enter.  Sangat mudah!

Langkah 1: Baca "Pengantar Pemrograman di Emacs Lisp"

Langkah selanjutnya adalah membaca Pengantar Pemrograman di Emacs Lisp . Saya tidak bisa merekomendasikan buku ini cukup; itu ditulis dengan sangat baik! Itu datang dengan sebagian besar menginstal Emacs 1 . Cukup tekan C-h idan pilih dari menu. Anda juga bisa langsung melakukannya via C-h i m Emacs Lisp Intro.

Kata Pengantar menyatakan,

Teks ini ditulis sebagai pengantar dasar untuk orang-orang yang bukan programmer.

Itu harus mengatakan "untuk orang-orang yang bukan programmer Lisp." Lisp sedikit berbeda dari bahasa lain, jadi ada baiknya dibaca jika Anda tidak terbiasa dengan Lisp. Penulis memiliki gaya yang mudah didekati dan banyak contoh. Butuh waktu sekitar seminggu untuk menyelesaikannya.

Langkah 1.5: Tip Pengembangan Emacs Lisp dengan John Wiegley

Pada akhir 2015, John adalah pemelihara proyek Emacs . Sacha Chua melakukan wawancara hebat dengannya di sini di mana John membahas dasar-dasar Emacs Lisp, lingkungan pengembangan, dan memberikan banyak nasihat hebat.

Langkah 2: Baca OPC (Other People's Code)

2a. Baca kode sumber

Karena Emacs adalah "editor tampilan yang dapat diperluas, dapat disesuaikan, didokumentasikan sendiri, real-time", semua kode sumber disertakan. Pelajari cara menggunakan fitur bantuan, C-h funtuk suatu fungsi dan C-h vuntuk suatu variabel. Selalu ada tautan ke kode sumber:

Klik tautan kode sumber untuk melihat kode sumber!

2b. Baca semua init.el's

Banyak orang melacak init.elfile mereka di Git atau Mercurial. Cari mereka. Salah satu triknya adalah mengeklik profil orang di StackOverflow, terutama emacs.stackexchange.com :

Bung adalah pengguna yang kuat!

Mereka sering memiliki tautan ke GitHub atau situs web pribadi mereka:

Harta karun!

Repos yang dipanggil dotemacsatau dotfilessangat umum. Seiring waktu Anda akan mengetahui seperti apa kode yang baik dan apa kode yang buruk. Anda juga akan mempelajari nama-nama besar, seperti nama Xah , Sasha Chua , binchen , Magnar Sveen , abo-abo , dan banyak lagi. Ada begitu banyak orang untuk belajar!

Langkah 3: Retas pada Emacs

Tantang diri Anda untuk menulis fungsionalitas yang Anda inginkan. Jangan pernah menyalin kode secara membabi buta; selalu luangkan waktu untuk memahaminya. Jika Anda tidak memahaminya, jangan gunakan itu! Ketika Anda meluangkan waktu untuk memahami sepotong kode, selain belajar sesuatu yang baru, Anda sering memikirkan cara untuk memperbaikinya untuk use case khusus Anda. Ini adalah kesempatan untuk meretas! Bagaimanapun, itulah gunanya Anda init.el! Buat kesalahan, hancurkan sesuatu, belajar debug. Anda akan menemukan bahwa karena Emacs ditulis dalam Elisp, pengembangan sangat menyenangkan.

Langkah 4: Ajukan pertanyaan di emacs.stackexchange.com

Saya telah menemukan bahwa komunitas Emacs di StackExchange menyukai pertanyaan Elisp yang bagus. Jadi, retas dengan percaya diri bahwa orang lain akan menghargai upaya Anda untuk belajar.

Langkah 5: Jawab pertanyaan di emacs.stackexchange.com

Tidak ada yang menjelaskan pemahaman Anda seperti mencoba menjelaskan sesuatu. Trolling halaman utama, Anda juga akan menemukan jawaban atas pertanyaan yang Anda tidak pernah tahu.

Kesimpulan

Seiring waktu Anda akan menemukan diri Anda mampu menghasilkan solusi lebih cepat dan untuk menjawab pertanyaan orang lain. Seperti semua pemrograman, ini bisa membuat frustasi. Namun, ingatlah untuk menghakimi diri Anda hari ini melawan diri Anda sendiri kemarin. Beberapa orang telah meretas Emacs selama 30 tahun! Namun, sebagian besar waktu, Anda akan menemukan bahwa Emacs adalah kesenangan untuk bekerja bersama dan kebebasan yang diberikannya memberi Anda inspirasi.

Selamat melakukan peretasan! :)

PS: Lihat paket jahat .


1 Beberapa instalasi tidak disertai dengan itu. Pengguna Debian, misalnya, harus menginstalnya secara terpisah. Agak konyol , tetapi disimpan di dalam repo yang tidak bebas . Tambahkan repo yang tidak bebas ke /etc/apt/sources.listdengan menambahkan non-freeke akhir setiap entri:

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

1
Rasanya seperti saya baru saja mengunjungi quora
user3496846

10

Saya merekomendasikan "Emacs Lisp Intro".

"Emacs Lisp Intro" mungkin sudah tersedia dalam format info dalam Emacs Anda. Coba C-h i m Emacs Lisp Intro RETatau evaluasi (info "(eintr) Top")di Emacs.

Jika ini gagal mencari web untuk "Emacs Lisp Intro".


7
  1. Mulai dengan halaman Wiki Emacs, Belajar Emacs Lisp .

    Bukan berarti halaman itu sendiri akan mengajarkan Anda Emacs Lisp. Alih-alih itu akan menunjuk pada sumber belajar - persis apa yang Anda cari di sini , dengan pertanyaan Anda. Banyak pengguna telah berkontribusi dan mengeditnya selama bertahun-tahun. Itu menghadirkan kelebihan sekaligus kekurangan blog satu pengguna. Kualitas saran di sana tentu saja beragam, karena ragam inputnya.

  2. Di luar itu - semua yang dikatakan orang lain di sini, terutama dimulai dengan dokumen bawaan Emacs:

    • Manual Elisp - sebagian besar referensi, tetapi beberapa panduan penggunaan yang baik dan info konseptual juga. Itu dibangun ke Emacs: C-h ilalu pilih manual Elisp.

    • The Emacs Lisp Intro - pengantar langkah demi langkah untuk Lisp dan Emacs Lisp. Juga dibangun ke dalam Emacs dan tersedia dari C-h i.

  3. Karena Anda telah menggunakan Common Lisp, akan sangat mudah untuk mengambil Emacs Lisp. Anggap diri Anda beruntung tentang ini.

    Jika Anda menggunakan Common Lisp (atau Zeta Lisp atau apa pun) pada mesin Lisp maka pengalamannya akan sangat mirip. Anda dapat menganggap Emacs sebagai (antara lain), lingkungan Lisp yang hebat. Anda dapat beralih dari nol menjadi 60 dalam waktu singkat, saat belajar.

  4. Selamat bersenang-senang!


2

Sebagai penyegaran pada Lisp saya sangat merekomendasikan tiga bab pertama dari Paradigma Peter Norvigs dari Pemrograman Kecerdasan Buatan . Itu memberi Anda langkah cepat dan cepat untuk kembali ke Lisp yang akan membuat Anda kembali ke jalur dengan cepat.

Untuk noobs total ada COMMON LISP: A Softly Introduction to Symbolic Computation yang mengajarkan Anda konsep yang sama tetapi dengan kecepatan yang jauh lebih rendah.

Kedua buku tersedia online, gratis.

Setelah melalui salah satu di atas, Anda dapat membaca semua posting yang ditandai Elisp di nullprogram.com dan membaca panduan membaca di masteringemacs.org . Untuk mempelajari tentang perangkap umum, membaca pertanyaan utama di sini akan sangat membantu. Untuk masalah khusus, cari situs ini, rosettacode , atau mesin pencari favorit Anda.

Setelah Anda memahami dasar-dasarnya, manual Info biasanya akan menjawab sebagian besar pertanyaan yang tersisa yang muncul saat meretas Emacs.


1

Karena Anda memiliki latar belakang dalam Common Lisp dan Anda "melewati dasar-dasarnya", tidak ada gunanya tersesat dalam "Pengantar Pemrograman dalam Emacs Lisp".

Apa yang dapat Anda lakukan segera (saya tidak memiliki latar belakang di CL dan itu berhasil untuk saya) adalah:

1) menemukan mode yang Anda gunakan dan mencoba untuk menambahkan fungsi, Anda akan menemukan bantuan dalam Referensi Emacs Lisp

2) menulis file kustom Anda sendiri dengan fungsi sederhana Anda sendiri, di sini lagi menggunakan Referensi Emacs Lisp

Daftar help-gnu-emacs sangat membantu.


1

Apa yang akan Anda rekomendasikan untuk seorang pria di posisi saya untuk belajar lingkungan Emacs LISP dan mulai meretas Emacs.

Saya benar-benar tidak berpikir Anda perlu membaca sesuatu yang spesifik tentang emacs lisp. Bukan rahasia lagi bahwa jika Anda ingin melakukan sesuatu di Emacs, kemungkinan besar, Anda hanya perlu menemukan perintah yang tepat atau seseorang telah menulis kode dan sekarang berada di suatu tempat di halaman wiki, atau github, atau dibuat menjadi plugin . Hanya dengan menyalin-menempelkan kode itu dan membacanya , Anda akan telah belajar sebagian besar Emacs cisp pada saat Anda bahkan agak puas dengan .emacs Anda.

Jika Anda ingin mendapatkan beberapa ide tentang cara menyesuaikan Emacs, konfigurasi khusus oleh orang lain mungkin merupakan sumber kebijaksanaan yang baik. Daftar konfigurasi seperti itu dapat Anda temukan di sini . Padahal, sungguh, memiliki visi Anda bekerja lebih baik dan mengunjungi .emacs orang lain biasanya dijamin hanya ketika Anda ingin beberapa pertanyaan dijawab [misalnya bagaimana saya menyusun kode / paket saya?] Atau beberapa kode disalin untuk tujuan spesifik Anda.

Menjelajah MELPA membuat saya menginstal dan mungkin mencoba selusin paket.

Jika Anda ingin mengembangkan sebuah plugin, saya menemukan bahwa membaca kode beberapa plugin tertentu yang Anda sukai dapat membantu Anda memulai dengan cukup cepat.

Karena Anda menggunakan vi, periksa mode kejahatan , itu bekerja sangat baik untuk saya. Saya juga akan merekomendasikan helm dengan helm-apropos(atau hanya aproposjika Anda tidak mau helm) perintah untuk membuat perjalanan Anda lebih mudah.

Jadi, saran saya adalah untuk langsung ke titik penyesuaian dan Anda akan mempelajari semua yang Anda butuhkan saat bepergian. Terutama bahwa Anda meretas lisp sebelumnya, dahulu atau tidak, dan karena mempelajari elisp, sejauh yang saya tahu, merupakan alat untuk mencapai tujuan bagi Anda, yaitu untuk menyesuaikan emacs.


1

Lagu Elisp tentang olahraga.io juga merupakan cara yang menyenangkan untuk meningkatkan keterampilan Anda. Latihan lebih difokuskan pada elisp daripada pada Emacs tetapi akan mencakup berbagai dasar-dasar yang baik seperti ekspresi reguler, struktur data, matematika, dll.


Bisakah Anda meningkatkan referensi itu (mis. Berikan tautan)? Bisakah Anda meringkas apa yang ditemukan di sana (semacam latihan, tampaknya)?
Drew

exerciseism.io Ini adalah situs di mana Anda dapat memilih bahasa dan menyelesaikan berbagai masalah dengannya - dan melihat solusi orang lain. Saya menemukan bahwa menelusuri solusi orang lain dari masalah yang baru saja Anda habiskan untuk menyelesaikannya adalah cara yang baik untuk mempelajari fitur-fitur baru.
Beetle B.

0

Menurut saya, jawaban Loren Ipsum cukup baik.

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

Saya hanya akan menambahkan bahwa saya berasumsi Anda tahu dasar-dasar Lisp. Itu akan membantu Anda, tetapi itu tidak perlu (saya akan kembali tentang itu.)

Salah satu cara untuk belajar adalah dengan meretas atau memodifikasi mode / ekstensi yang ada. Saya mempelajarinya kembali di 93 dengan meretas file mode bahasa Ada. Itu adalah salah satu pengalaman paling menyenangkan yang saya miliki di perguruan tinggi.

Jadi Anda bisa melakukannya dengan bahasa yang Anda pilih, katakanlah, mode Java, atau mode Lisp, atau bahkan file mode Elisp.

Ubah, tambahkan makro, dll. Begitulah cara saya melakukannya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.