适用于Vim用户的Spacemacs审查和简介

Spacemacs是一种Emacs发行版,在编辑时感觉像Vim,但不会尝试完全模仿Vim。 它是模态的,因此具有正常模式,插入模式,以及我们每天在Vim中使用的编辑,移动和搜索命令的负载。 它不仅结合了Emacs和Vim的优势,还为文本编辑体验增加了自己的独特之处。 最明显的例子是基于助记符的命令菜单,这些命令菜单仅在按下空格键时触发。 基于菜单的界面非常直观,快捷,看起来也很酷。

在详细介绍之前,我想提供一些有关什么是Spacemacs以及如何开始使用它的上下文。 我花了一些时间来安装它并使它在我的项目中正常运行,所以我想提供一个指南来帮助感兴趣的Vim用户试用一下。 我不经常使用Emacs,因此尽管文档很好,但实际上我发现入门Spacemacs还是很困难。

为Vim用户安装Spacemacs

安装Spacemacs不仅涉及下载项目并运行Emacs。 基本步骤是:下载Emacs配置文件夹,安装Emacs的GUI版本,安装首选字体,然后打开Emacs。

这是我执行的确切步骤。

  1. 从http://spacemacs.org/下载Spacemacs zip文件。
  2. 解压缩并将文件夹移动到~/.emacs.d
  3. 安装Emacs。 在Mac上,我使用Homebrew进行此操作,但尚未在Windows上进行设置,因此不确定是否有最佳方法。
  4. brew tap d12frosted/emacs-plus
    brew install emacs-plus
    brew linkapps emacs-plus
  5. 下载源代码专业字体。 我在MacOS上使用Font Book安装了所有TTF字体。
  6. 打开Emacs。 在macOS上,这意味着从/ Applications文件夹而不是内置的Emacs打开Homebrew linkapps版本。 我在Spacemacs查找诸如ag程序时遇到了问题,因此我一直在终端中键入open /Applications/Emacs.app来运行它。
  7. 第一次使用Spacemacs配置打开Emacs时,它将生成一个~/.spacemacs文件。 您应该使用此文件来配置Spacemacs,但是在尝试进行设置时要小心:代码注释将帮助您定位。

您现在应该准备开始在Spacemacs中编辑文件。

欢迎使用新的Spacemacs安装

现在,您已经运行了Spacemacs,它有望启动而不会出现任何错误,接下来该怎么办? 在开始尝试实际编辑任何文件之前,请记住以下几点。

  • 您可以使用Vim移动命令和Vim的某些窗口管理快捷方式。 您应该可以使用hjkl导航,甚至可以使用ctrl-wctrl-v分割窗口。 它不以相同的方式支持选项卡。 您也可以使用:发出命令,并使用/搜索。
  • 捆绑了几个Emacs软件包,其中包括Vim仿真,项目管理,完成,主题和关键字。 我发现了解Helm和Projectile有助于充分利用Spacemacs。
  • 包装的组合形成“层”。 层的示例是完成和Vim仿真。
  • 延迟安装和加载用于某些功能。 例如,当我打开Markdown文件为本文写笔记时,它安装了一些用于Markdown和拼写检查的软件包。

这是JavaScript中完成层的示例。

现在,让我们深入研究Spacemacs配置文件,以便我们可以开始进行实际工作!

实际使用Spacemacs工作

您需要编辑~/.spacemacs来为您的编码样式设置内容。 这是一个示例:我的团队在JavaScript文件中使用两个空格,但默认值为四个空格。 您可以使用:e ~/.spacemacs或仅由SPC fed :e ~/.spacemacs打开配置文件。 没错:推迟尝试手动打开配置文件的诱惑,只需键入SPC fed即可立即打开它! 老实说我在普通Vim中编辑了一段时间,直到发现SPC fed

如果键入/user-config ,然后按几次n转到正确的块,则会看到一个可以放置自己的设置的位置。 它看起来应该像这样:

  (defun dotspacemacs / user-config() 
“用户代码的配置功能。在配置图层之后,在Spacemacs初始化的最后阶段将调用此功能。这是您应进行大多数配置的地方。除非明确指定在安装软件包之前应设置变量加载后,您应该将代码放在这里。”

可以在评论后添加设置。 我添加了js2-basic-offsetjs-indent-level

  (defun dotspacemacs / user-config() 
“用户代码的配置功能。
配置层后,在Spacemacs初始化的最后阶段将调用此函数。
这是应该完成大多数配置的地方。 除非明确指定在装入程序包之前应设置变量,否则应在此处放置代码。”
(setq-default js2-basic-offset 2)
(setq-default js-indent-level 2)

请注意,编辑此文件时,可以使用大多数常用的Vim命令。 例如,我选择js2-basic-offset复制/粘贴到本文中,方法是先输入/js2 ,然后输入vt (vt空间),从值的开头到该空间进行直观的选择。 然后,我使用+"y将其拉到系统寄存器中并粘贴到此博客文章中。我还必须在某些时候使用gv重新选择文本。

项目管理

Spacemacs使用Projectile,Projectile查找.git文件以确定您是在项目中还是项目的子文件夹中。 我碰到的一个极端案例是使用Monorepo的项目:一个Git文件夹存储了许多项目,这些项目使用包管理器分发给了消费者。 幸运的是,Spacemacs能够快速搜索此存储库中的每个文件:包括模糊文件查找和代码搜索,因此monorepo对我而言并不是真正的问题。

如果处于类似情况,则可以将.projectile文件添加到每个子项目,然后将.projectile添加到全局gitignore文件。 这将阻止.projectile文件在您的Git遥控器中弹出。

要使Projectile“看到”一个项目,只需在其中打开一个文件。 它将递归到目录树中,以查找项目根目录的指示符。 完成此操作后,按SPC ft (文件树形切换)以打开文件树浏览器。 我还没有弄清楚如何调整文件抽屉的大小,实际上这使得打开一些长名称的文件很尴尬。 无论如何,我并不是一个真正的项目抽屉风扇,所以我将其保持关闭状态,并使用SPC pf (pjectory f ind)快速查找并打开项目中的文件。

另一种方便的打开文件的方法是通过搜索。 Spacemacs将按顺序使用文本文件搜索实用程序列表,因此在我的情况下,它使用ag因为我已将其与Homebrew一起安装。 您可以按SPC sp在项目中搜索(搜索项目)。

搜索结果显示得非常快,感觉好像没有被阻挡,因此它非常敏捷,对于在项目中跳转非常有用。

终奌站

我将Vim放在分割窗格中的tmux内部,并且将带有分割的单独窗口用于诸如运行测试,管理Git和运行服务器之类的事情。 我尝试完全在Spacemacs中重新创建该工作流程,因为它附带了终端仿真器支持。

要打开终端,请键入SPC ' 。 如果要移至终端之外,请按ESC返回正常模式,然后按i重新开始输入终端。 如果愿意,可以使用鼠标在终端外部单击。 terminal open命令接受一个数字参数,可让您打开多个终端。 例如。 2 SPC '将让您转到第二个终端。

由于我在开发过程中使用终端的方式,我发现Spacemacs支持太容易了:我一直搞乱字符定位,或者因为我不确定我是处于正常模式还是插入模式而输入了大量的废话。 感觉更像是Visual Studio Code提供终端以方便使用的方式。 这对于在REPL中快速尝试表达式或执行git status很有好处,但它不在tmux或iTerm 2级别。 尽管使用该终端的部分原因是因为我当前的工作流是基于终端和CLI Vim的,所以如果我全职使用Spacemacs,我可能会调整而不再依赖终端了。

结论

您可以在没有Emacs知识的情况下使用Spacemacs吗? 大概! 在安装过程中可能会有些混乱,但是一旦启动并运行就可以了。 在没有任何Vim知识的情况下使用Spacemacs将更具挑战性。

文件和项目管理功能功能齐全且快速,我几乎马上就可以使用它们了。

我使用Spacemacs作为主要编辑工作了两个星期。 Vim层非常适合我的正常Vim编辑和移动命令,因此我对这方面感到满意。 文件和项目管理功能功能齐全且快速,我几乎马上就可以使用它们了。 它非常适合我的无需项目抽屉的搜索繁重的工作方式,而且我真的很喜欢我使用的语言中的自动完成功能。 SPC菜单非常友好,学习时间不会太长。 因为它在Emacs的GUI版本中,所以有更多空间可以放置这样的菜单,我希望能在Vim中使用它(我知道有为此功能的Vim脚本)。

如果您是Vim用户,则无需太多调整即可切换到Spacemacs。 对我来说,主要问题是我很难理解初始设置。 Spacemacs站点确实需要有针对性的非废话安装指南,假定您以前从未使用过Emacs。

每当您走出Vim舒适区并进入Emacs领土时,也会有一些困惑。 它使我想起在没有充分了解Java的情况下编写Clojure的过程。 您可以做到,但是当您迷路时,它确实会使您减速。