在 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 文件存盘后,预览图自动更新。

用 xampp 安装 wordpress

  • XAMPP 官网 下载安装包 xampp-portable-win32-5.6.19-0-VC11-installer.exe ,安装到 D:/xampp 目录。
  • 修改 D:/xampp/php/php.ini
    • 支持上传大文件

      upload_max_filesize = 32M
      
    • 去掉 mysql 的注释

      extension=php_mysql.dll
      
    • 支持 xdebug 调试

      [XDebug]
      zend_extension = "D:\xampp\php\ext\php_xdebug.dll"
      xdebug.profiler_append = 0
      xdebug.profiler_enable = 0
      xdebug.profiler_enable_trigger = 0
      xdebug.profiler_output_dir = "R:\tmp"
      xdebug.profiler_output_name = "cachegrind.out.%t-%s"
      xdebug.remote_enable = on
      xdebug.remote_handler = "dbgp"
      xdebug.remote_host = "127.0.0.1"
      xdebug.remote_port = 9000
      xdebug.trace_output_dir = "R:\tmp"
      xdebug.idekey= PHPSTROM
      
  • wordpress 中文官网 下载安装包,解压到 D:/xampp/htdocs ,重命名为 fengjian.info
  • XAMPP Control 中启动 Apache 和 MySql 服务。
  • 打开网址 localhost/phpMyAdmin ,新建数据库 fengjian.info ,排序规则 utf8_general_ci
  • 打开网址 localhost/fengjian.info ,开始安装使用 wordpress:数据库名填 fengjian.info ,用户名填 root ,密码为空。

在 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" "../.spacemacs.config/.spacemacs.private"
mklink /H ".spacemacs" "../.spacemacs.config/.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

设置 emacs 窗口起始位置和大小

emacs 启动后,是否可以以指定的大小显示在同一个位置?当然可以,通过下面这个 lisp 语句可以达到这个效果。

(setq default-frame-alist
      `((top . 0)
        (left . 0)
        (width . 172)
        (height . 60)
        ))

问题来了。如果你将这个配置写到配置文件中,同步到 svn。假定你有三台不同的电脑,有笔记本,也有台式机,显示器分辨率都是不同的,那么 emacs 在三台设置上的初始大小和位置是不同的。这意味着从 svn 上下载下来的配置文件,在每台电脑上需要先修改才能使用,而且这个修改不能提交到 svn 上。看起来不妥,怎么办?

一个解决办法是,将这个配置写到一个本地文件 local-gui.el 中,并将此文件设置成 svn 忽略。在正式配置文件中,调用加载这个本地文件。

(load-file (concat my-emacs-config-path "/local-gui.el"))

这样问题基本解决。其实还有更简单的方法。。。不用修改配置文件,直接修改 emacs 程序的启动参数就可以达到这个效果。

D:\emacs\bin\runemacs.exe -fh -g 80x52+650+0

80x52+650+0 就是设置 emacs 初始大小的位置的参数,80 为宽度,52 是调度, 650 是 x 坐标,0 是 y 坐标。

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))