Предисловие
Я знаю, что заголовок выглядит субъективным, но я хочу, чтобы этот вопрос был плавным введением в spacemacs для новичков, не вообще из emacs (как в моем случае).
Вы можете задаться вопросом, почему я решил использовать spacemacs, который представляет собой очень нестандартный хак по сравнению с emacs, не потратив время на то, чтобы сначала привыкнуть к ванильным emacs. На самом деле, я пытался использовать 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 - это как руководство по обслуживанию атомной электростанции.
Может ли кто-нибудь, кто разбирается в spacemac, дать мне "точку входа" для понимания этих концепций?
Я хочу иметь возможность отвечать на вопросы: «О, я хочу настроить это поведение, где мне нужно кодировать? Какие методы я должен вызывать? Какие методы я НЕ должен вызывать? Какую переменную я могу изменить / create? Что на самом деле выполняется, когда я помещаю сюда свой код? ... и т. д. "