前言
我知道标题看起来很主观,但我希望这个问题能够为完全不来自 emacs 的新手(这是我的情况)顺利介绍 spacemacs 。
您可能想知道为什么我决定使用 spacemacs,它是对 emacs 的高度自定义 hack,而没有花时间先习惯 vanilla 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 文档就像核电站维护指南。
有人可以轻松使用 spacemacs 给我一个“入口点”吗理解这些概念
我希望能够回答以下问题:“哦,我想自定义该行为,我需要在哪里编码?我应该调用哪些方法?我不应该调用哪些方法?我可以更改哪些变量/创建?当我把我的代码放在这里时实际执行了什么?......等等“