バックグラウンド:
私はほとんどがviユーザーで、Emacsに移行しています。
基本を過ぎて、今度はR変換も行う予定のCおよびPythonでコードを書くために使用します。
私は大学院にいた20年以上前に(共通)LISPを書きましたが、今はひどく失望しています(こんにちは世界を書くことができますが、それだけです)。
質問:
Emacs LISP環境を学び、Emacsのハッキングを始めるために、私の立場の人に何をお勧めしますか。
本、ブログ、読むべきリソース、やるべきエクササイズはありますか?
バックグラウンド:
私はほとんどがviユーザーで、Emacsに移行しています。
基本を過ぎて、今度はR変換も行う予定のCおよびPythonでコードを書くために使用します。
私は大学院にいた20年以上前に(共通)LISPを書きましたが、今はひどく失望しています(こんにちは世界を書くことができますが、それだけです)。
質問:
Emacs LISP環境を学び、Emacsのハッキングを始めるために、私の立場の人に何をお勧めしますか。
本、ブログ、読むべきリソース、やるべきエクササイズはありますか?
回答:
私の経験では、Emacs Lispに含まれているチュートリアルはあまり役に立ちませんでした(私は長年にわたって2回試しましたが失敗しました)。代わりに、ついに付属のEmacs Lispリファレンスを使用しました。
最終的に機能したのは:
Emacs Lispには2つの側面があることを認識してください。基本的な言語そのものと、Emacsとの相互作用です。あなたの心の中でこれら2つを分離します。最初に前者に注目してください(過去にLispを学んだので、それほど難しくないはずです)。エクササイズのようなサイトを使用して練習します。
基本(ループ、関数、変数、条件など)を把握したら、Emacs自体に関係する側面(テキストの変更、バッファーの切り替えなど)に進みます。これは広大であり、あなたは詳細の海で迷子になるでしょう。頻繁に使用するため、本当によく理解しておくべきことがいくつかあります。彼らです:
これらを理解したら、ELispリファレンスを読むのに時間を費やすのではなく、Emacsで書きたい簡単な問題を考えて、Elispで解決してみてください。いくつかの手順でサポートが必要になる可能性が高いため、Googleがサポートします。
Elispを練習するために解決した問題の例:
org-captureを使用し、キャプチャバッファの最後の行にテキストを書き込むと、末尾に改行が挿入されないため、キャプチャ位置の後にヘッドラインがある場合、そのヘッドラインはヘッドラインではなくなります。修正は、改行があるかどうかをチェックするフックを作成し、ない場合はキャプチャの最後に改行を追加することでした。
一度にキャプチャしてリファイリングすると、エントリがリファイリングされたファイルは保存されません。しかし、リファイリングせずにキャプチャすると、キャプチャします。この不整合を修正しました。
会議中に議事録を作成するときに(組織ファイルで)、誰かのTODOが出てきたら、TODOという見出しを探して(私がいる最上位の見出しの下に)キャプチャを行い、TODOを配置しますそこ。各会議には独自のTODO見出しがあり、ファイル内の現在の会議の見出しに移動する必要があります。これには、ツリーを最上位に移動し、TODOと呼ばれる子を検索する関数の作成が含まれます。
特定のモードのすべてのバッファーを強制終了します(既にこれを行う内部関数があるかもしれませんが、私は知りませんでした)。
最後に、次のキーバインドを知っていることを確認してください。
なんて素晴らしい質問でしょう!これが私が取った道です:
何よりも先にEmacsチュートリアルを読んでください。これをやったようですね。いいね!しかし、後でこれを訪れる人にとっては、ここがEmacsの旅を始める場所です。誤解を招くようなブログ投稿がたくさんあります。彼らは物事を複雑にしています。Emacsはそれを簡単にします:
<RET>またCtrl + h t、またはC-h tEmacs表記でアクセスすることもできます。
このチュートリアルでは、Emacsの基本概念を紹介し、歴史的な用語を明確にし、30分以内に学習を進めます。また、次のステップのステージも設定します。
次のステップは、Emacs Lispのプログラミング入門を読むことです。この本を十分に推薦することはできません。とてもよく書かれています!ほとんどのEmacsインストール1に付属しています。単に押しC-h iて、メニューから選択します。経由で直接アクセスすることもできC-h i m Emacs Lisp Introます。
序文は、
このテキストは、プログラマーでない人のための基本的な紹介として書かれています。
「非Lispプログラマーである人々のために」と言うべきです。Lispは他の言語とは少し異なるため、Lispに慣れていない人は読む価値があります。著者には親しみやすいスタイルがあり、多くの例を見ていきます。作業に約1週間かかりました。
2015年後半、ジョンはEmacsプロジェクトのメンテナーです。Sacha Chuaは、彼との素晴らしいインタビューを行っています。Johnは、開発環境であるEmacs Lispの基本について説明し、多くの素晴らしいアドバイスを提供しています。
Emacsは「拡張可能でカスタマイズ可能な自己文書化リアルタイムディスプレイエディター」であるため、すべてのソースコードが含まれています。C-h f関数およびC-h v変数のヘルプ機能の使用方法を学びます。ソースコードへのリンクは常にあります。
init.elのを多くの人init.elがGitまたはMercurialでファイルを追跡しています。それらを探します。1つのトリックは、StackOverflow、特にemacs.stackexchange.comのユーザーのプロファイルをクリックすることです。
多くの場合、GitHubまたは個人のWebサイトへのリンクがあります。
リポジトリと呼ばれるdotemacsかdotfiles、非常に一般的です。時間が経つにつれて、良いコードがどのように見え、悪いコードがどのように見えるかの感覚が得られます。また、Xah、Sasha Chua、binchen、Magnar Sveen、abo-aboなどのビッグネームも学びます。学ぶべき人がたくさんいます!
必要な機能を記述するように挑戦してください。盲目的にコードをコピーしないでください。常に時間をかけて理解してください。理解できない場合は、使用しないでください!時間をかけてコードの一部を理解するとき、何か新しいことを学ぶ以外に、特定のユースケースでコードを改善する方法をよく考えます。これはハッキングの機会です!結局のところ、それinit.elはあなたの目的です!間違いを犯し、物事を壊し、デバッグを学びます。EmacsはElispで書かれているため、開発は楽しいものです。
StackExchangeのEmacsコミュニティはElispの良い質問を好むことがわかりました。だから、他の人があなたの学習努力に感謝するという自信を持ってハッキングしてください。
何かを説明しようとするような理解を明確にするものは何もありません。メインページをトローリングすると、知らなかった質問に対する答えも見つかります。
時間が経つにつれて、ソリューションをより速く生成し、他の人の質問に答えることができるようになります。すべてのプログラミングと同様に、イライラする可能性があります。ただし、昨日は自分自身に対して今日自分自身を判断することを忘れないでください。一部の人々は、文字通り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
Emacs WikiページLearn Emacs Lispから始めてください。
そのページ自体がEmacs Lispを教えてくれるわけではありません。代わりに、学習リソース -まさにここであなたが探しているものをあなたの質問で指し示します。多くのユーザーが何年にもわたって貢献し、編集してきました。それは、1人のユーザーのブログに対する利点と欠点を示します。さまざまな入力があるため、そこの提案の質はもちろんさまざまです。
それを超えて-特にEmacsの組み込みドキュメントから始めて、ここで他の人が言ったことすべて:
Elispマニュアル-ほとんどがリファレンスですが、いくつかの優れた使用ガイダンスと概念情報もあります。それはEmacsに組み込まれていC-h iます:それからElispマニュアルを選択してください。
Emacs Lisp Intro-LispおよびEmacs Lispのステップバイステップのイントロ。Emacsにも組み込まれており、から入手できますC-h i。
あなたはCommon Lispのを使用しましたので、次のようになりますスーパーのEmacs Lispのを拾うのは簡単。これについてラッキーだと思ってください。
LispマシンでCommon Lisp(またはZeta Lispなど)を使用していた場合、その体験は非常に似ています。Emacsは(とりわけ)すばらしいLisp環境と考えることができます。学習するとき、ゼロから60にすぐに行くことができます。
楽しむ!
Lispの復習として、Peter Norvigs Paradigms of Artificial Intelligence Programmingの最初の3章を強くお勧めします。これらは、Lispの素早いペースでの(再)導入を可能にし、すぐに軌道に乗せることができます。
完全な初心者には、COMMON LISP:シンボリックコンピューティングへの穏やかな紹介があります。
両方の書籍はオンラインで無料で入手できます。
上記のいずれかを完了すると、nullprogram.comで Elispタグ付きの投稿をすべて読むことができ、masteringemacs.orgのリーディングガイドを読むことができます。よくある落とし穴について学ぶには、ここでよくある質問を読んでください。特定の問題については、このサイト、rosettacode、またはお気に入りの検索エンジンを検索してください。
基本に慣れると、Infoマニュアルは通常、Emacsをハッキングするときに出てくる残りのほとんどの質問に答えます。
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をカスタマイズすることだからです。
exercism.ioのElispトラックは、スキルを向上させる楽しい方法でもあります。演習はEmacsよりもelispに焦点を当てていますが、正規表現、データ構造、数学などの基本的な範囲をカバーします。
ローレン・イプサムの答えはそれをかなりうまくカバーしているように思えます。
https://emacs.stackexchange.com/a/47320/21433
Lispの基本を知っていると仮定しているだけです。それはあなたを助けるでしょうが、それは必要ではありません(私はそれについて取り返します。)
学習する1つの方法は、既存のモード/拡張機能を単純にハッキングまたは変更することです。93年にAda言語モードファイルをハッキングして学習しました。それは私が大学に戻ったときの最も楽しい経験の1つでした。
そのため、Javaモード、Lispモード、またはElispモードファイルなど、選択した言語でそれを行うことができます。
それを変更したり、マクロを追加したりします。それが私がやった方法です。