序文
タイトルが主観的に見えることは承知していますが、この質問が、まったく emacs から来ていない新規参入者(私の場合) にとって、spacemacs へのスムーズな紹介になることを望んでいます。
最初にバニラの emacs に慣れるのに時間をかけずに、emacs の高度にカスタム化されたハックである spacemacs を使用することにした理由を不思議に思われるかもしれません。実際、私は長い間 emacs と vim を使おうとしてきました。なぜなら、これらのソフトウェアが生産性を向上させ、コーディングやハッキングの際により「くつろげる」ことができる理由を理解できたからです。
残念ながら、私は vim に少し慣れ始めていましたが、学習に費やす必要のある時間、そして何よりも、これらのソフトウェアの構成に費やす必要のある時間は、私には多すぎました。その後、私はspacemacs
を発見しました。これは、vim の優れた機能と emacs の優れた機能を少し取り入れて、ほとんど構成済みの素敵なパッケージ にまとめたものです。
問題は、ほとんどの構成が emacs-lisp を介して行われ、ソフトウェアの起動時にコードがどのようにロードされ実行されるかをユーザーが理解することを期待していることです。コードを掘り下げました)。
達成したいこと
私は emacs を起動できるようにしたいと思っています。
- 行番号は、開いているすべてのバッファに表示されています
- git live の変更は左側に表示されます
- カーソルが上にあるときに記号が強調表示されます
- 私の「ホームページ」にはプロジェクトのリストが表示され、前回のバッファ構成を記憶している最新のものをロードできます
必要に応じてこれらの機能 (およびおそらく他の機能) を実際にコーディングしたり、既に利用可能になったときにインストールしたりしたいと考えています。
私が試したこと
(そしてうまくいかないもの)
私は(素朴に)自分の spacemacs を、Lisp/emacs の初心者が行うように構成しました。
(defun dotspacemacs/user-config ()
"Configuration function for user code.
This function is called at the very end of Spacemacs initialization after
layers configuration. You are free to put any user code."
;; TODO
;; - Display whitespaces
;; - Install workgroups2
;; interface ;; this works
(setq powerline-default-separator 'arrow)
;; mouse scroll ;; this works? maybe
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time
(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
;; middle click copy-paste ;; this works
(setq x-select-enable-primary t)
;; diff-hl ;; this used to work but now does not
(diff-hl-flydiff-mode)
(setq diff-hl-side 'left)
;; rust ;; this works (and seems the right way to do it)
(add-hook 'rust-mode-hook #'racer-mode)
(add-hook 'racer-mode-hook #'eldoc-mode)
;; neotree ;; this works? maybe
(setq neo-show-hidden-files nil)
;; toggle preferences ;; this does not work
(spacemacs/toggle-automatic-symbol-highlight-on)
(spacemacs/toggle-line-numbers-on)
;; COrrect DOuble CAps ;; this does not works either (should be a hook)
(doublecaps-mode 1)
)
質問
すべてのバッファまたは特定のバッファ インスタンスのみにそれぞれ適用される「メジャー モード」および「マイナー モード」と呼ばれる概念があることは認識していますが、emacs には独自のグローバル変数とローカル変数があるという事実についても非常に混乱しています。 (これは を通じてカスタマイズできるようです(setq)
)、spacemacs にはカスタマイズするための変数またはメソッドもあります(spacemacs/toggle-something-on)
が、また(custom-set-variables)
、私がやりたいことのほとんどは「フック」を使用して達成可能です。
spacemacs のドキュメントは、ほとんどの場合、物事がどのように機能するかを知っていることを前提としており、emacs のドキュメントは原子力発電所のメンテナンスガイドのようなものであるため、私は完全に無知のままです。
spacemacsに慣れている誰かが、それらの概念を理解するため の「エントリーポイント」を教えてくれますか?
私は次のような質問に答えられるようになりたいです: 「ああ、その振る舞いをカスタマイズしたいのですが、どこでコーディングする必要がありますか? 呼び出すべきメソッドは何ですか? 呼び出すべきではないメソッドは何ですか? 変更できる変数はどれですか?ここにコードを配置すると、実際に何が実行されるのでしょうか?...など"