标签:spacemacs

以下是与标签 “spacemacs” 相关联的文章

spacemacs rectangle 操作

mark

  • rectangle-mark-mode C-x SPC

operations

  • open-rectangle c-x r o
  • kill-rectangle C-x r k
  • delete-rectangle C-x r d
  • yank-rectangle C-x r y
  • string-insert-rectangle unbound
  • string-rectangle C-x r t
  • number-to-register C-x r N

在 spacemacs 中使用 graphviz

之前用 graphviz 画过几次流程图,感觉不错,只需要关注节点描述和节点关系, dot 程序自动搞掂图的大小和排放,很省脑。这次切换 spacemacs 后,原来的 graphviz 配置已经没有了,我也不想重新配置。

但是,spacemacs 真的很智能,你不想用都不行。我只是打算用 emacs 编辑 dot 文件,刚打开文件,spacemacs 立即提示:“我这里有现成的 graphviz layer 支持,你要不要安装?”这种好事哪能拒绝呢,当然点 YES 了。

接着,就看见窗口切换着,spacemacs 拍啦拍啦自动搞掂了一切。完事后,看看它干了什么:

  • 修改 .spacemacs 文件,加上 graphviz layer 支持。
  • 下载 graphviz layer 相关支持 package。
  • 修改 .spacemacs 文件,把 package 添加到 elpa 列表里。

我的 dot 文件瞬间语法高亮显示了。再试试 graphviz 的快捷键好用不,点两下逗号,立即生成了预览图,真不错。还有更 NB 的,输入 ,t , 打开 graphviz-live-reload 功能,每次 C-x C-s 文件存盘后,预览图自动更新。

在 linode 上使用 spacemacs

一直在用 linode vps,安装的 ubuntu 系统,远程用 putty 连接,emacs 是主力编辑器。emacs 配置是 ftp 上传的,安装成功后就一直没有更新过。没有用 git 托管,配置同步终究是不太方便。今天有时间,决定把 spacemacs 配置同步到 github,再更新到 linode。

我的 spacemacs 配置一共有三部分:一个 .emacs.d 目录,是 spacemacs 的原始代码,未做任何修改;一个 .spacemacs.private 目录,存放私有 layer 和 snippets;一个 .spacemacs 文件,就是 spacemacs 配置文件。

直接从 github 下载 spacemacs 的 develop 分支,作为 .emacs.d 目录:

git clone https://github.com/syl20bnr/spacemacs.git .emacs.d
git checkout -t origin/develop

在本地建立一个目录 .spacemacs.config ,并在目录内新建两个符号链接,保存 spacemacs 的私有配置,并将这个目录上传到 github。PS: junction 语法太 BT,参数顺序与 ln 是反的。

mklink /J ".spacemacs.private" "../fj/.spacemacs.private"
mklink /H ".spacemacs" "../fj/.spacemacs"

远程 linode 上,下载 spacemacs 的私有配置,并创建符号链接。

cd ~
git clone https://github.com/sweord/.spacemacs.config.git
ln -s .spacemacs.config/.spacemacs.private .spacemacs.private
ln -s .spacemacs.config/.spacemacs .spacemacs

启动 emacs,没有成功安装,提示找不到某个 el 文件,查看 emacs 版本太老还是 24.3 的,需要安装新版本的 emacs-25.1

add-apt-repository -y ppa:ubuntu-elisp
apt-get update
apt-get install emacs-snapshot

由于码农的洁癖,老版本必须删除。先查看安装包的名称:

dpkg -S emacs

再全部删除:

apt-get remove emacs24-bin-common emacs24-common emacs24-common-non-dfsg emacs24-nox

启动 emacs,spacemacs 自启成功,自动安装一百三十多个 package 后,成功启动了。linode 服务器网速不错,整个安装过程非常快。查看 spacemacs 启动时间,才两点几秒,太快了。要知道,spacemacs 在我的 x200 笔记本上启动时间大约 15 秒多,在我的 i5-2240 CPU 台式机上,启动时间要 8 秒多,在 linode 上为什么这么快?查看了 cpu 信息,原来是 X5 2680 v5 , cache 有 30M,相当 NB 啊。

cat /proc/cpuinfo

spacemacs workflow

Spacemacs 的优势在于预装了很多有用的 package, 整合到一起,无冲突。并在此基础上定义了一套方便的快捷键。使用 spacemacs 之前,担心快捷键太多记不住。实际上,使用几次后,发现快捷键定义还是很有规律的,而且有按键提示,不需要太多记忆。熟悉几个主要操作后,可以提高 emacs 的使用效率。

打开文件

一般情况下,我们经常操作的文件不会太多,都在最近文件列表里,列出最近使用 buffer 的快捷键是 SPC b b 。另外一个比较有用的是 SPC TAB ,在最近使用的两个 buffer 中切换。

如果要找的文件不在最近列表中,可以使用 SPC f L ,调用全盘快速搜索程序,windows 上默认使用 es.exe ,linux 上默认使用 locate ,快速定位到目标文件。

跳到函数定义

在编辑配置文件,或查看 emacs-lisp 文件时, SPC s j 可以在 minibuffer 中列出所有函数列表,选中后司跳到定义处。

搜索字符串

搜索功能有几个常见场景

  • 搜索光标下字符串

    使用 vim 的 superstar 功能就,只要按一下 * 就能快速搜索。

  • 搜索输入的字符串

    SPC s s 是 helm-swoop 的快捷键,类似于 multi-occur 的功能,输入字符串,在 minibuffer 中列出该字符串出现的所有列,选择后跳转。

写作 blog

打开 blog.org 文件后, C-z 退出 evil 模式,个人感觉在 evim 模式下,使用中文输入法不太方便。

M-> 跳转到文件最后,输入 blog-drawer ,这是我自定义的一个 snippet,用于创建 blog 标题和 drawer。

* $1
:PROPERTIES:
:BLOG: www.litchisoftware.com
:CATEGORY: ${2:代码}
:END:
$3

写完文章后, M-x org2blog/wp-post-subtree-and-publish 发布 blog。这个命令是个自定义函数

;;;###autoload
(defun org2blog/wp-post-subtree-and-publish ()
  "Publish the current subtree as a page."
  (interactive)
  (org2blog/wp-post-subtree t))

spacemacs 配置方法

这两天摸索了 spacemacs 的配置方法。定制的指导思想,除了 .spacemacs 文件,不改动 spacemacs 的其它任何文件。以后升级或迁移配置时,直接从 github 下载最新 spacemacs 代码即可,不用做任何改动。在 .spacemacs 配置中,重定义私有配置目录为 ~/.spacemacs.private ,自定义 layer 和 snippets 都放在此目录中。在 emacs 裸奔的机器上,下载并安装完 spacemacs,再下载私有配置,就能使用了。配置过程中的几个主要修改点:

  • 自定义私有目录

    .spacemacs 文件中,修改以下配置

    dotspacemacs-configuration-layer-path '("~/.spacemacs.private/")
    
  • 修改已有 layer 的配置

    spacemacs 中,部分 layer 会有 config.el 配置文件,该文件中保存 layer 的定制修改,但我并不想对 spacemacs 原始文件做任何改动。因为一旦修改了 spacemacs 的 layer 文件,就要把 spacemacs 代码也纳入私有 repo 管理 ,而我希望私有 repo 尽可能小,只有自已的配置,没有第三方代码。办法是有的,在 .spacemacs 中,选择加载包时,可以直接定制配置。

    (auto-completion
     :variables
     ;; auto-completion-front-end 'auto-complete
     auto-completion-return-key-behavior 'complete
     auto-completion-tab-key-behavior 'cycle
     auto-completion-enable-snippets-in-popup t
     auto-completion-complete-with-key-sequence nil
     auto-completion-complete-with-key-sequence-delay 0.1
     auto-completion-private-snippets-directory  (concat (car dotspacemacs-configuration-layer-path) "snippets/")
     auto-completion-enable-sort-by-usage t
     )
    
  • 添加一个 package

    自已原来一直用 org2blog 写博客,但 spacemacs 中没有集成这个包,怎么办?先用下面命令添加一个 layer,根据提示一步步完成。

    M-x configuration-layer/create-layer
    

    完成后,得到 README.orgpackage.el 。在 package.el 中,有详细的说明,怎么定义此 package 的引用和初始化函数。在定义过程中要用到 use-package 这个包,可以去 github 看下使用方法,简单来说,初始化 init 部分在包加载前调用, config 部分在包加载后调用。

  • 修改基本配置

    如果不需要用到其它 package,只是修改基本配置,直接在 .spacemacs 文件的 dotspacemacs/user-config 函数中修改就可以了。

修改完后,不一定需要重新启动 emacs,使用快捷键 SPC f e R 可以重装加载配置。但有些配置是添加到配置列表中的,重新加载配置不启作用,这种情况就需要重启 emacs 了。