Emacs Lispの学習を開始するにはどうすればよいですか?


39

バックグラウンド:

私はほとんどがviユーザーで、Emacsに移行しています。

基本を過ぎて、今度はR変換も行う予定のCおよびPythonでコードを書くために使用します。

私は大学院にいた20年以上前に(共通)LISPを書きましたが、今はひどく失望しています(こんにちは世界を書くことができますが、それだけです)。

質問:

Emacs LISP環境を学び、Emacsのハッキングを始めるために、私の立場の人に何をお勧めしますか。

本、ブログ、読むべきリソース、やるべきエクササイズはありますか?

回答:


11

私の経験では、Emacs Lispに含まれているチュートリアルはあまり役に立ちませんでした(私は長年にわたって2回試しましたが失敗しました)。代わりに、ついに付属のEmacs Lispリファレンスを使用しました。

最終的に機能したのは:

Emacs Lispには2つの側面があることを認識してください。基本的な言語そのものと、Emacsとの相互作用です。あなたの心の中でこれら2つを分離します。最初に前者に注目してください(過去にLispを学んだので、それほど難しくないはずです)。エクササイズのようなサイトを使用して練習します。

基本(ループ、関数、変数、条件など)を把握したら、Emacs自体に関係する側面(テキストの変更、バッファーの切り替えなど)に進みます。これは広大であり、あなたは詳細の海で迷子になるでしょう。頻繁に使用するため、本当によく理解しておくべきことがいくつかあります。彼らです:

  • インタラクティブ
  • 節約旅行
  • 保存制限
  • フック
  • アドバイス機能
  • with-current-buffer

これらを理解したら、ELispリファレンスを読むのに時間を費やすのではなく、Emacsで書きたい簡単な問題を考えて、Elispで解決してみてください。いくつかの手順でサポートが必要になる可能性が高いため、Googleがサポートします。

Elispを練習するために解決した問題の例:

  • org-captureを使用し、キャプチャバッファの最後の行にテキストを書き込むと、末尾に改行が挿入されないため、キャプチャ位置のにヘッドラインがある場合、そのヘッドラインはヘッドラインではなくなります。修正は、改行があるかどうかをチェックするフックを作成し、ない場合はキャプチャの最後に改行を追加することでした。

  • 一度にキャプチャしてリファイリングすると、エントリがリファイリングされたファイルは保存されません。しかし、リファイリングせずにキャプチャすると、キャプチャします。この不整合を修正しました。

  • 会議中に議事録を作成するときに(組織ファイルで)、誰かのTODOが出てきたら、TODOという見出しを探して(私がいる最上位の見出しの下に)キャプチャを行い、TODOを配置しますそこ。各会議には独自のTODO見出しがあり、ファイル内の現在の会議の見出しに移動する必要があります。これには、ツリーを最上位に移動し、TODOと呼ばれる子を検索する関数の作成が含まれます。

  • 特定のモードのすべてのバッファーを強制終了します(既にこれを行う内部関数があるかもしれませんが、私は知りませんでした)。

最後に、次のキーバインドを知っていることを確認してください。

  • Cx Ce(式の評価)
  • Ch v(変数の意味と値を調べる)
  • Ch f(組み込み関数の説明を調べます)。

33

なんて素晴らしい質問でしょう!これが私が取った道です:

ステップ0:Emacsチュートリアルを読む

何よりも先にEmacsチュートリアルを読んでください。これをやったようですね。いいね!しかし、後でこれを訪れる人にとっては、ここがEmacsの旅を始める場所です。誤解を招くようなブログ投稿がたくさんあります。彼らは物事を複雑にしています。Emacsはそれを簡単にします:

  1. Emacsを起動します
  2. 押す <RET>

またCtrl + h t、またはC-h tEmacs表記でアクセスすることもできます。

このチュートリアルでは、Emacsの基本概念を紹介し、歴史的な用語を明確にし、30分以内に学習を進めます。また、次のステップのステージも設定します。

Emacsを開きます。 Enterキーを押します。 とても簡単です!

ステップ1:「Emacs Lispのプログラミング入門」を読んでください

次のステップは、Emacs Lispのプログラミング入門を読むことです。この本を十分に推薦することはできません。とてもよく書かれています!ほとんどのEmacsインストール1に付属しています。単に押しC-h iて、メニューから選択します。経由で直接アクセスすることもできC-h i m Emacs Lisp Introます。

序文は、

このテキストは、プログラマーでない人のための基本的な紹介として書かれています。

「非Lispプログラマーである人々のために」と言うべきです。Lispは他の言語とは少し異なるため、Lispに慣れていない人は読む価値があります。著者には親しみやすいスタイルがあり、多くの例を見ていきます。作業に約1週間かかりました。

ステップ1.5:John WiegleyによるEmacs Lisp開発のヒント

2015年後半、ジョンはEmacsプロジェクトのメンテナーです。Sacha Chuaは、彼との素晴らしいインタビューを行っています。Johnは、開発環境であるEmacs Lispの基本について説明し、多くの素晴らしいアドバイスを提供しています。

ステップ2:OPC(他の人のコード)を読む

2a。ソースコードを読む

Emacsは「拡張可能でカスタマイズ可能な自己文書化リアルタイムディスプレイエディター」であるため、すべてのソースコードが含まれています。C-h f関数およびC-h v変数のヘルプ機能の使用方法を学びます。ソースコードへのリンクは常にあります。

ソースコードのリンクをクリックして、ソースコードを確認してください!

2b。全て読むinit.elのを

多くの人init.elがGitまたはMercurialでファイルを追跡しています。それらを探します。1つのトリックは、StackOverflow、特にemacs.stackexchange.comのユーザーのプロファイルをクリックすることです

男はパワーユーザーです!

多くの場合、GitHubまたは個人のWebサイトへのリンクがあります。

汚れを払う!

リポジトリと呼ばれるdotemacsdotfiles、非常に一般的です。時間が経つにつれて、良いコードがどのように見え、悪いコードがどのように見えるかの感覚が得られます。また、XahSasha ChuabinchenMagnar Sveenabo-aboなどのビッグネームも学びます。学ぶべき人がたくさんいます!

ステップ3:Emacsをハックする

必要な機能を記述するように挑戦してください。盲目的にコードをコピーしないでください。常に時間をかけて理解してください。理解できない場合は、使用しないでください!時間をかけてコードの一部を理解するとき、何か新しいことを学ぶ以外に、特定のユースケースでコードを改善する方法をよく考えます。これはハッキングの機会です!結局のところ、それinit.elはあなたの目的です!間違いを犯し、物事を壊し、デバッグを学びます。EmacsはElispで書かれているため、開発は楽しいものです。

ステップ4:emacs.stackexchange.comで質問する

StackExchangeのEmacsコミュニティはElispの良い質問を好むことがわかりました。だから、他の人があなたの学習努力に感謝するという自信を持ってハッキングしてください。

ステップ5:emacs.stackexchange.comで質問に回答する

何かを説明しようとするような理解を明確にするものは何もありません。メインページをトローリングすると、知らなかった質問に対する答えも見つかります。

結論

時間が経つにつれて、ソリューションをより速く生成し、他の人の質問に答えることができるようになります。すべてのプログラミングと同様に、イライラする可能性があります。ただし、昨日は自分自身に対して今日自分自身を判断することを忘れないでください。一部の人々は、文字通り30年間Emacsをハッキングしています!ただし、ほとんどの場合、Emacsを使用することは喜びであり、Emacsが提供する自由は刺激的であることがわかります。

ハッピーハッキング!:)

PS:パッケージevilをチェックしてください。


1 一部のインストールには付属していません。たとえば、Debianユーザーは個別にインストールする必要があります。それはだ種類愚かなのが、それはだ非フリーのレポに保存されています。各エントリの末尾に/etc/apt/sources.list追加non-freeすることにより、非フリーリポジトリを追加します。

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

1
私はちょうど訪れたQuoraのように感じている
user3496846

10

「Emacs Lisp Intro」をお勧めします。

「Emacs Lisp Intro」は、Emacs内で既に情報形式で利用できる場合があります。Emacsで試してみるC-h i m Emacs Lisp Intro RETか評価(info "(eintr) Top")してください。

これが失敗した場合は、Webで「Emacs Lisp Intro」を検索してください。


7
  1. Emacs WikiページLearn Emacs Lispから始めてください。

    そのページ自体がEmacs Lispを教えてくれるわけではありません。代わりに、学習リソース -まさにここあなたが探しているものをあなたの質問で指し示します。多くのユーザーが何年にもわたって貢献し、編集してきました。それは、1人のユーザーのブログに対する利点と欠点を示します。さまざまな入力があるため、そこの提案の質はもちろんさまざまです。

  2. それを超えて-特にEmacsの組み込みドキュメントから始めて、ここで他の人が言ったことすべて:

    • Elispマニュアル-ほとんどがリファレンスですが、いくつかの優れた使用ガイダンスと概念情報もあります。それはEmacsに組み込まれていC-h iます:それからElispマニュアルを選択してください。

    • Emacs Lisp Intro-LispおよびEmacs Lispのステップバイステップのイントロ。Emacsにも組み込まれており、から入手できますC-h i

  3. あなたはCommon Lispのを使用しましたので、次のようになりますスーパーのEmacs Lispのを拾うのは簡単。これについてラッキーだと思ってください。

    LispマシンでCommon Lisp(またはZeta Lispなど)を使用していた場合、その体験は非常に似ています。Emacsは(とりわけ)すばらしいLisp環境と考えることができます。学習するとき、ゼロから60にすぐに行くことができます。

  4. 楽しむ!


2

Lispの復習として、Peter Norvigs Paradigms of Artificial Intelligence Programmingの最初の3章を強くお勧めします。これらは、Lispの素早いペースでの(再)導入を可能にし、すぐに軌道に乗せることができます。

完全な初心者には、COMMON LISP:シンボリックコンピューティングへの穏やかな紹介があります。

両方の書籍はオンラインで無料で入手できます。

上記のいずれかを完了すると、nullprogram.comで Elispタグ付きの投稿をすべて読むことができ、masteringemacs.orgのリーディングガイドを読むことができます。よくある落とし穴について学ぶには、ここでよくある質問を読んでください。特定の問題については、このサイト、rosettacode、またはお気に入りの検索エンジンを検索してください。

基本に慣れると、Infoマニュアルは通常、Emacsをハッキングするときに出てくる残りのほとんどの質問に答えます。


1

Common Lispのバックグラウンドがあり、「基本を忘れた」ので、「Emacs Lispのプログラミング入門」で迷子になることはありません。

あなたがすぐにできることは(私はCLのバックグラウンドがなく、私のために働いた)です:

1)使用しているモードを見つけて機能を追加しようとすると、Emacs Lispリファレンスでヘルプが見つかります

2)独自の単純な関数を使用して独自のカスタムファイルを記述します。ここでもEmacs Lispリファレンスを使用します

help-gnu-emacsリストは非常に役立ちます。


1

Emacs LISP環境を学び、Emacsのハッキングを始めるために、私の立場の人に何をお勧めしますか。

emacs lispに特化した何かを読む必要は本当にないと思います。Emacsで何かをしたい場合は、適切なコマンドを見つけるか、誰かが既にコードを書いている必要があり、それがWikiページまたはgithubのどこかにあるか、プラグインになっていることは秘密ではありません。ただ、コピー・貼り付けそのコードをしてことでそれを読んで、あなたは幾分あなたの.emacsに満足している時点でのEmacs Lispのの公正なシェアを学んだだろう。

Emacsをカスタマイズする方法についてのアイデアを得たい場合は、他の人によるカスタム構成が賢明な情報源になる可能性があります。このような構成の選択リストは、ここで見つけることができます。しかし、実際には、あなた自身のビジョンを持つことはうまく機能し、他の人の.emacsにアクセスすることは通常、いくつかの質問に答えたい場合(たとえば、コード/パッケージをどのように構成しますか?)または特定の目的のためにコピーされたコードがある場合にのみ保証されます。

ブラウズMELPAは、パッケージのダースをインストールし、多分しようとする私を得ました。

プラグインを開発する場合、好みの特定のプラグインのコードを読むと、かなり早く始めることができることがわかりました。

viを使用しているため、evil-modeを確認してください。また、あなたの旅をより簡単にするために、helm with helm-apropos(または必要ないapropos場合helm)コマンドをお勧めします。

だから、私のアドバイスはすぐにカスタマイズポイントに到達することであり、あなたは外出先で必要なすべてを学ぶでしょう。特に、あなたがずっと前に、以前にLispをハッキングしたこと、そしてelispを学ぶことは、私が知る限り、あなたのための手段であり、emacsをカスタマイズすることだからです。


1

exercism.ioのElispトラックは、スキルを向上させる楽しい方法でもあります。演習はEmacsよりもelispに焦点を当てていますが、正規表現、データ構造、数学などの基本的な範囲をカバーします。


その参照を改善できますか(リンクを提供するなど)?そこにあるものを要約していただけますか(何らかの運動のようです)?
ドリュー

exercism.ioこれは、言語を選択してさまざまな問題を解決し、他の人のソリューションを確認できるサイトです。あなたが時間を費やしたばかりの他の人の解決策を閲覧することは、新しい機能を学ぶ良い方法であることがわかりました。
カブトムシB.

0

ローレン・イプサムの答えはそれをかなりうまくカバーしているように思えます。

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

Lispの基本を知っていると仮定しているだけです。それはあなたを助けるでしょうが、それは必要ではありません(私はそれについて取り返します。)

学習する1つの方法は、既存のモード/拡張機能を単純にハッキングまたは変更することです。93年にAda言語モードファイルをハッキングして学習しました。それは私が大学に戻ったときの最も楽しい経験の1つでした。

そのため、Javaモード、Lispモード、またはElispモードファイルなど、選択した言語でそれを行うことができます。

それを変更したり、マクロを追加したりします。それが私がやった方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.