工作流分享

这里分享一下我使用emacs的工作流。原则就是尽量高效,也就是说,操作尽量简化。编辑器作为一个输入文本的工具,应该尽量不影响程序员本身的行为,例如编写代码或者写文章的时候,应该使操作者集中注意力于本身的操作而不是相反。

evil

首先,我是vi指法的坚定支持者。vi指法的好处是手指一直处于主键盘区,光标的移动、操作(跳转、选择、复制粘贴等)都脱离鼠标操作,因此不会打断自己写代码的思路。emacs的指法由于没有一个独立的state,因此需要加入meta键,会更复杂一些。

因此,如果认同vi的指法的话,也会受益于evil-leader的好处,即以一个leader键而不是一个组合键作为命令的开始。现在最流行的是以空格作为leader键,例如space-bb是切换buffer。

单文件编辑

除了vi提供的指法之外,还有一些需要知道的包与技巧。

  • 高亮
    一般由major-mode决定
  • 语法检测
    采用flycheck
  • 补全
    采用company
  • 搜索
    swiper(s-f)
  • 替换
    swiper + multi-cursor(s-m)
  • 跳转
    1. avy(s-g)
      在文件内自由跳转
    2. auto-highlight-symbol(c-n/c-p)
      同样的symbol之间跳转
    3. mark(s-,)
      很多命令会在光标当前位置自动插入一个mark,一般用于跳转之后的跳回
    4. line-mode(s-l)
      行号默认不需要打开。只有在定位问题的时候才需要
  • shell(s-t)
    eshell,日常操作都可以,但还是推荐专业的终端工具

多文件操作

涉及到文件内容的多文件操作也是一个编辑环境需要的,工程相关的下面单独列出。
涉及到文件的重命名、拷贝、删除等使用dired。

  • 跳转(s-.)
    一般由major-mode支持
  • 跳回(bb)
    一般跳到另一个文件之后使用最简单的switch-buffer再调回来
  • 搜索
    1. grep
      按照路径搜索文件内容,emacs提供了很多利用其特性封装的函数
    2. find
      按照文件名的搜索
    3. ag/rg
      依然是封装的命令行工具,与grep类似,但速度更快
  • 替换
    ag + counsel + wgrep

分屏 w

写代码常用的一个操作是分屏,例如同时编写两部分需要互相交互的代码的时候可能就会用到。关于分屏,有一个原则,就是尽量少,一般最多两个屏,再多就是分散注意力的行为(暂时的弹窗无所谓)。分屏的常用快捷键如下:

key comment
wo Other window, 跳到另一个window
wh Split horizontally, 横向分一个屏
wv Split vertically, 纵向分一个屏
wk Kill all other window, 只保留当前的window
ws Swap window,将当前窗口与另一个窗口交换位置

buffer b

emacs的一个与众不同的地方就是抽象出了buffer。我们实际操作的对象是一个内存对象而不是实际的文件,只有当加载和保存文件的时候才会与文件打交道。
只要不显式的杀死buffer就能够访问到buffer,即使这个buffer已经不在内存中了。这在当由于电脑重启等原因导致emacs关闭之后的继续工作时将变得很方便。

key comment
ff 加载文件
fo 在另一个窗口打开文件
bb 切换buffer
bo 在另一个窗口切换buffer
bk Kill buffer,关闭当前buffer
bi 打开ibuffer,即所有buffer的列表,批量操作

directory d

emacs除了编辑单个文件,还有很强的路径操作功能,其主体也就是dired。dired对于文件的操作很强大,并且支持远程操作。

key comment
dd 打开当前buffer所在的路径
dr 打开最近访问的路径列表
df 访问当前Finder所在的路径
dn neotree

git g

git是目前最流行的版本管理工具,emacs有很好用的magit对其进行了封装,可以无缝的进行代码的提交、更新。

key comment
gs git status,用magit打开当前buffer对应的文件所在的工程
gl last commit,显示当前行所对应的最后一次git commit

help h

自定义的一些帮助功能。

key comment
hp 根据包名跳转到其主页,一般是github
hy 有道词典
hs 搜索引擎

project p

利用projectile,提供工程相关的操作。

key comment
pp 切换工程,很有效的路径切换手段
s-F 利用ag搜索工程内文件的内容
pf 工程内按文件名查找
pb 工程内切换buffer,较少用到
pc 清空工程缓存,例如文件路径发送了改变时,此时pf仍会搜索原有的缓存

bookmark bm

书签是个好东西,特别是涉及远程访问的时候。

key comment
bmm Make bookmark
bmj Jump to bookmark
bml List bookmarks,批量操作

License: CC BY-SA 4.0

Contact