
まえがき
Emacsを使用していなかった場合、(参照した記事から)何も理解できなかったので、 これを読んだ後にこの記事を書くことにしましたが、使用した場合、それを使用しなければ何も理解されません分かりません。 この記事は、事実に基づいた資料、リソースへのリンク、および独自の.emacs [設定ファイル]を使用した単純な編集を使用して、無計画に書かれました。 状況を修正してみましょう。
1.予備情報
したがって、最初は次のことを前提としています。
- Windowsユーザー (この特定のOSにEmacsをインストールする際の落とし穴のいくつかを説明します)。 LinuxまたはMacを使用している場合、残念ながら、エディターで作業するときに遭遇する困難に対処する必要があります(確かにそうする場合)。
- 10本指のブラインドタイピングに堪能。 この条件が満たされていない場合、Emacsへの切り替えとその使用はゼロになる傾向があります。
- プログラムが大好きです。 プログラミングがあなたの仕事に過ぎず、満足や喜びを得たくない場合は、Emacsの
人生を再考する必要があります。 - 知っている(愛する)Lisp。 これは要件というよりは願望ですが、私には、Lisp(または少なくとも彼の知識、またはそれを勉強したいという気持ち)への愛が何らかの形でこのエディターを選択する決定的な要因であるように思えます。 ただし、これは純粋に私の個人的な意見であり、ドグマではありません(前の2つの段落とは異なります)
2.なぜEmacsなのか?
質問は、emaxerにとっては修辞的であり、このエディターを初めて開く人にとっては無意味です。 正式な答えは次のとおりです-Emacsで作業するとき、あなたは機会を得ます:
- キーボードから(エディターの作業フィールド内で)カーソルを制御します(手を離すことなく、10本のうち8本の指の位置を変更することなく)
- あらゆるものの自動化、再プログラム、構成、作成(IDEに比べて)は比較的簡単です(新しいメニュー項目、キー、機能、マクロ、オートミックス、拡張機能などの「バインド」)。
一般的に、これらはすべて実用性の非常に客観的な指標からのものです(クロスプラットフォーム、ハードウェア要件の低さなど。プログラムの勉強が難しいため、これはほとんど役に立たないので考慮しません)。 しかし、私の観点から、およびエディターの使用経験に基づいて、説明されている2つのポイントは、プロセスで最大限の喜びと利便性を得るのに十分です(たとえEmacsの機能を習得した後でも)。
Common Lispでプログラムする場合、追加のボーナスが表示されます。 Emacs、 SBCL 、 Slime、およびquicklispをインストールすることにより、本質的に「ネイティブ」な開発環境が得られます。 さまざまな程度の有用性と品質の多くのアドオンがEmacs向けに作成されていますが、一般的にWeb開発ではこれで十分です。 また、すばらしいパッケージマネージャーとライブラリマネージャーがあり、あなたの人生をずっと楽にします。 快適な仕事のための多くの優れたテーマがあります。
しかし、私たちが議論している問題の文脈で最も重要なことは、賢い中国人がいるということです。 そしてそのうちの1つ、Xah Lee(古い、焼き付けられたemaxer)の名前で、Emacsアセンブリを作成し、ほとんどすべてのアクティブに使用されているキーボードショートカットを「再バインド」しますメニューと必要な(各エコノミーで)プラグインの海を設定し、12のテーマで。 彼は全体をErgoEmacs ?と呼び、アセンブリがベースエディタよりも「やや便利」であることを将来のユーザーに微妙に示唆しました。 私は、最初の知人(および原則としてその後のすべて)も、このアセンブリから始める必要があると信じています。 そして、これの主な理由は、基本バージョンのインストールと比較したプログラムの習得(および使用)の単純さです(キーボードショートカット、プラグインのインストールと構成にかかる時間の節約、およびこのアセンブリの優れた「チュートリアル」です)。 また、精神的に(精神的に、理想的には)準備ができていない人がEmacsをインストールする場合のように、若い熟達者がモニター画面に吐き出さず、この複雑でわかりにくいエディターを閉じない可能性が高いです。
3. WindowsにErgoEmacsをインストールする際の落とし穴
- エディターをインストールする前に、HOMEシステム変数を作成します。この変数の値は、ディスクのシステムパーティションのルートに事前に作成された同じ名前のフォルダーのアドレスである必要があります。
- [セキュリティ]タブの[ホーム]フォルダーのプロパティに移動し、自分で(管理者としてではなくユーザーとして)フォルダーに対するアクションに対するすべての権利を与え、自分自身(管理者としてではなくユーザーとして)をこのフォルダーの所有者にします:
- ErgoEmacsをインストールする
- 実行しないでください。 エディターがインストールされているフォルダーで同じこと(権限、所有者)を行います
- HOMEフォルダーに「.emacs」ファイルを作成します
- エディターを実行し、テーマを選択し、デフォルトのフォントを選択し、設定を保存します(すべてはメニューから実行できます)
これで、emaxの基本的なセットアップは原則として完了しました。 実験と作成を開始できます。 プロジェクトのWebサイトでチュートリアルを読んで、基本的なキーの組み合わせを学習することを強くお勧めします(たとえば、Altキーを押しながらJ、K、L、Iを押します)。 アセンブリでは、デフォルトで、「Mx」キーの組み合わせの代わりに、「Ma」キーの組み合わせが提供されます(MはAlt)。 Dmitry Bushenkoのポッドキャストの少なくとも最初の3つの(非常に基本的な)講義を見てください。 A. Ottと共同で作成した同じDmitry Bushenkoの作成に慣れることもできます。これは、プログラミングベースのemacsを提供する「コードの編集とリファクタリングのためのEmacsのプログラミング」です。 EmacsからCommon Lisp開発環境を作成することを検討してください- 役立つ次のビデオ 。 人間工学に基づいたキーボードを購入してください。 そして、あなたは幸せになります。
4. ErgoEmacs-Lispへの道
実際、この記事はErgoEmacsに関するものではありません(ただし、そのほとんどは彼に関するものです)。 Lispについてです(より正確には、この言語の現代的な方言であるCommon Lisp)。 私の意見では、ErgoEmacs(このエディターの基本バージョンは言うまでもありません)さえも使用するよう強制するのは、正当な理由がなければ非常に難しいからです。 そして、主な理由は、Lispでした。 Lispが好きなら、Emacsでプログラミングします。 そして、この声明は証明を必要としません。
最終的に、アイデア(言語、概念、理論、信仰)の選択を決定する最終的な権限は、「美」の概念です。 たとえば、物理学者にとって、彼の理論は美しいものではないと言うことほどひどいin辱はありません。 私たちの思考の反射性と他のすべての絶対的な正当化の可能性(どの方法も「信仰に基づいて」[証明されていない]公理的部分に基づいています)「対称性および/または自己相似性で私たちに美しさを強制する」 。 私の意見では、この点でLispは最も美しく表現力豊かな言語です。 それは私たちの思考の方法と原理を反映しています(実際、この言語は人工知能の研究のために作成されたため、これは驚くことではありません)。
はい、Lisp はシステムプログラミング言語 としても応用 言語としてもクラッシュしましたが、 Lispマシンは博物館の展示品になりました。 しかし、Lispは責任があるのでしょうか? 私はそうは思いません。 Symbolics、Inc.の歴史を掘り下げません。 、Lispで書かれたLispマシン、システム、およびアプリケーションソフトウェアの市場で最大のプレーヤーですが、この会社の主要なエンジニアの1人は、現代のLinuxoidの神であり、Free Software Foundaionの創設者であるRichard Stallmanに他なりませんでした。 ストールマンは、イデオロギー上の理由から、商用ソフトウェアのアイデアを嫌い、Symbolicsからコードを盗み、無料のMIT製品にコピーしました。 これが明らかになったとき、彼は会社に電子メールを送り、ダイナマイトで爆破すると脅した。 面白くて悲しい。 これは、Lispの崩壊の多かれ少なかれ特定の理由の1つです。 しかし、私の意見では、それは重要ではありません。
問題の根本は現代社会のイデオロギーです。 Lispは、人工知能の分野での研究ブームとエキスパートシステムの作成の間、人気のピークにありました。 人類が開発を行うことにうんざりし、喜び(販売と購入)を得たいと思ったとき、Lispは舞台を去りました。 彼は不要になりました。 彼は現代社会のアーティファクトであり、ユニークな主題であり、特別な特性を持っていますが、その複雑さ(学習、複製)および適切な規模のタスクがないため、実際には意図した目的には使用されません。
ただし、これは言語の力、美しさ、表現力、および人間の知能への準同型性を損なうものではありません。
PS
誰かが私の.emacsに興味があるなら、ここにあります。
.emacs
(リストに追加する 'load-path "〜/ .emacs.d /")
(リストに追加する 'load-path "C:/ slime")
(リストに追加する 'load-path "C:/sbcl/sbcl.exe")
(リストに追加する 'custom-theme-load-path "〜/ .emacs.d / themes")
(ロード(expand-file-name "〜/ quicklisp / slime-helper.el"))
;; 「sbcl」を実装へのパスに置き換えます
(setq inferior-lisp-program "C:/sbcl/sbcl.exe")
(setq show-paren-style '式)
(show-paren-mode 2)
(メニューバーモード1)
(ツールバーモード-1)
(setq make-backup-files nil); バックアップファイルが必要ない
(setq自動保存リストファイル名nil); .savesファイルは必要ありません
(setq auto-save-default nil); 自動保存を望まない
(セット言語環境 'UTF-8)
(setq default-buffer-file-coding-system 'utf-8-unix)
(「スライムが必要」)
(setq slime-net-coding-system 'utf-8-unix)
(slime-setup '(slime-fancy))
(setq lisp-indent-function 'common-lisp-indent-function)
;; ビルトイン
(「ido」が必要)
(イドモードt)
(setq ido-enable-flex-matching t)
;; ビルトイン
( 'bsが必要)
(setq bs-configurations
'(( "Files" "^ \\ * scratch \\ *" nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)))
(グローバルセットキー(kbd "") 'bs-show)
( 'sr-speedbarが必要)
(global-set-key(kbd "") 'sr-speedbar-toggle)
((> = emacs-major-version 24の場合)
( 'パッケージが必要)
(パッケージ初期化)
(リストに追加する 'package-archives'( "melpa"。 " melpa.milkbox.net/packages")t )
)
(global-set-key(kbd "") 'other-window)
(global-set-key(kbd "") 'slime-eval-defun)
(global-set-key(kbd "") 'slime-eval-last-expression)
(global-set-key(kbd "") 'slime-compile-file)
(カスタム設定変数
;; custom-set-variablesは、Customによって追加されました。
;; 手動で編集すると、混乱する可能性があるため、注意してください。
;; 初期化ファイルには、このようなインスタンスを1つだけ含める必要があります。
;; 複数ある場合、それらは正しく機能しません。
'(cua-mode t nil(cua-base))
'(カスタム対応テーマ(quote(deeper-blue))))
'(show-paren-mode t)
'(tool-bar-mode nil))
(カスタムセットの顔
;; custom-set-facesは、Customによって追加されました。
;; 手動で編集すると、混乱する可能性があるため、注意してください。
;; 初期化ファイルには、このようなインスタンスを1つだけ含める必要があります。
;; 複数ある場合、それらは正しく機能しません。
'(デフォルト((t(:ファミリ“ Consolas”:ファウンドリ“ outline”:傾斜法線:重量太字:高さ158:幅法線))))
'(completions-common-part((t(:デフォルトを継承:フォアグラウンド "red"))))
'(diredp-compressed-file-suffix((t(:foreground "#7b68ee"))))
'(diredp-ignored-file-name((t(:foreground "#aaaaaa"))))
'(show-paren-match((((class color)(background light))(:background“ azure2”))))))
(setq TeX-auto-save t)
(setq tex-parse-self t)
(setq TeX-save-query nil)
(setq tex-pdf-mode t)
(リストに追加する 'load-path "C:/ slime")
(リストに追加する 'load-path "C:/sbcl/sbcl.exe")
(リストに追加する 'custom-theme-load-path "〜/ .emacs.d / themes")
(ロード(expand-file-name "〜/ quicklisp / slime-helper.el"))
;; 「sbcl」を実装へのパスに置き換えます
(setq inferior-lisp-program "C:/sbcl/sbcl.exe")
(setq show-paren-style '式)
(show-paren-mode 2)
(メニューバーモード1)
(ツールバーモード-1)
(setq make-backup-files nil); バックアップファイルが必要ない
(setq自動保存リストファイル名nil); .savesファイルは必要ありません
(setq auto-save-default nil); 自動保存を望まない
(セット言語環境 'UTF-8)
(setq default-buffer-file-coding-system 'utf-8-unix)
(「スライムが必要」)
(setq slime-net-coding-system 'utf-8-unix)
(slime-setup '(slime-fancy))
(setq lisp-indent-function 'common-lisp-indent-function)
;; ビルトイン
(「ido」が必要)
(イドモードt)
(setq ido-enable-flex-matching t)
;; ビルトイン
( 'bsが必要)
(setq bs-configurations
'(( "Files" "^ \\ * scratch \\ *" nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)))
(グローバルセットキー(kbd "") 'bs-show)
( 'sr-speedbarが必要)
(global-set-key(kbd "") 'sr-speedbar-toggle)
((> = emacs-major-version 24の場合)
( 'パッケージが必要)
(パッケージ初期化)
(リストに追加する 'package-archives'( "melpa"。 " melpa.milkbox.net/packages")t )
)
(global-set-key(kbd "") 'other-window)
(global-set-key(kbd "") 'slime-eval-defun)
(global-set-key(kbd "") 'slime-eval-last-expression)
(global-set-key(kbd "") 'slime-compile-file)
(カスタム設定変数
;; custom-set-variablesは、Customによって追加されました。
;; 手動で編集すると、混乱する可能性があるため、注意してください。
;; 初期化ファイルには、このようなインスタンスを1つだけ含める必要があります。
;; 複数ある場合、それらは正しく機能しません。
'(cua-mode t nil(cua-base))
'(カスタム対応テーマ(quote(deeper-blue))))
'(show-paren-mode t)
'(tool-bar-mode nil))
(カスタムセットの顔
;; custom-set-facesは、Customによって追加されました。
;; 手動で編集すると、混乱する可能性があるため、注意してください。
;; 初期化ファイルには、このようなインスタンスを1つだけ含める必要があります。
;; 複数ある場合、それらは正しく機能しません。
'(デフォルト((t(:ファミリ“ Consolas”:ファウンドリ“ outline”:傾斜法線:重量太字:高さ158:幅法線))))
'(completions-common-part((t(:デフォルトを継承:フォアグラウンド "red"))))
'(diredp-compressed-file-suffix((t(:foreground "#7b68ee"))))
'(diredp-ignored-file-name((t(:foreground "#aaaaaa"))))
'(show-paren-match((((class color)(background light))(:background“ azure2”))))))
(setq TeX-auto-save t)
(setq tex-parse-self t)
(setq TeX-save-query nil)
(setq tex-pdf-mode t)