emacs.mospan使用指南
概述
我自从2011年开始使用自己折腾的emacs到现在,参考或实现了不少功能使其满足我工作与学习所需,虽然它依然有一些瑕疵,但尝试了其他配置或IDE之后依然觉得它是最符合我习惯的, 我一般用它来写Golang、C、Lua、Shell、GTD和Blog,基本已满足我所需和习惯。
安装
emacs.mospan的Github地址为:https://github.com/mospany/emacs.d, 如果你的系统已装有Emacs,请先备份Emacs配置文件。因为Spacemacs的配置会覆盖掉原Emacs的配置文件。
cd ~
mv .emacs.d .emacs.d.bak
mv .emacs .emacs.bak
如果你的系统没有安装Emacs,需要先安装Emacs,请注意Emacs版本至少为24.4。
安装emacs.mospan
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
安装依赖工具
Linux
sudo apt-get install pyflakes sudo apt-get install cscope sudo apt-get install w3m sudo apt-get install "graphviz*" sudo apt-get install mew sudo apt-get install ipython sudo apt-get install stardict
Mac
把上面的apt-get换成brew即可。
启动emacs.mospan
emacs -mm
初次启动emacs.mospan会进行初始化配置(启动时会询问使用简、全哪套配置方案),安装依赖有可能需要一段时间。
使用
显示
快捷键 | 描述 |
---|---|
C-x C-= | 放大字体 |
C-x C-– | 缩小字体 |
C-x C-0 | 重置字体 |
C-c M-h | highlight-symbol-at-point |
C-c M-r | highlight-symbol-remove-all |
C-c M-n | highlight-symbol-next |
C-c M-p | highlight-symbol-prev |
C-x C-q | 解除“buffer is read-only” |
功能键
快捷键 | 描述 |
---|---|
f3 | open-eshell-other-buffer |
f4 | eshell |
f12 | svn-status |
C-f9 | ecb-activate |
S-f9 | ecb-deactivate |
C-f10 | imenu-list-smart-toggle |
C-f10 | sr-speedbar-toggle |
C-f11 | ediff |
S-f11 | ediff-directories |
C-f12 | man |
f5 | compile |
f6 | scope-find-functions-calling-this-function |
f7 | scope-pop-mark |
f8 | scope-find-global-definition-no-prompting |
C-f6 | gud-go |
C-f7 | gud-step |
C-f8 | gud-next |
编辑
快捷键 | 描述 |
---|---|
C-t | 交换两个字符位置 |
M-t | 交换两个单词位置 |
C-o | 新建下一行 |
C-x C-t | 交换两个文本行的位置 |
M-c | 把单词的首字母改为大写 |
M-u | 把单词的全部字母改为大写 |
M-l | 把单词的全部字母改为小写 |
C-/ | undo |
C-. | redo |
C-x j | 跳到某一行 |
C-M-\\ | 格式化对齐(需先选中) |
C-S n | 向下移动5行 |
C-S p | 向上移动5行 |
C-S f | 向前移动5列 |
C-S b | 向后移动5列 |
C-c d ? | 查找当前鼠标点下的符号的文档 |
C-c d r | 重新扫描tags文件 |
C-c d f | 为函数插入Doxygen注释 |
C-c d i | 为文件插入Doxygen注释 |
C-c d ; | 为当前成员插入Doxygen注释 |
C-c d m | 插入多行注释 |
C-c d s | 插入单行注释 |
C-c d @ | 插入环绕当前区域的注释 |
编程
C
快捷键 | 描述 |
---|---|
C-M-a | c-beginning-of-defun |
C-M-e | c-end-of-defun |
C-M-h | c-mark-function |
M-a | c-beginning-of-statement |
M-e | c-end-of-statement |
M-l | eassist-list-methods |
M-m | semantic-ia-complete-symbol-menu |
M-o | eassist-switch-h-cpp |
C-c 0 | semantic-tag-folding-fold-all |
C-c 1 | semantic-tag-folding-show-all |
C-c 2 | semantic-tag-folding-fold-block |
C-c 3 | semantic-tag-folding-show-block |
C-c 4 | hs-hide-block |
C-c 5 | hs-show-block |
C-c 6 | hide-ifdef-block |
C-c 7 | show-ifdef-block |
Golang
阅读代码
注: 一定记得先加代码工程到GOPATH中,否则godef不能跨包或文件夹跳转, 可以通过go build是否成功来验证配置正确性
快捷键 描述 f8 godef-jump f7 gocscope-pop-mark go-add-tags
- 在evil-mode下使用v命令选择结构体区域
- 按下M-x输入go-add-tags
- 显示tags:后,输入json或输入其他自定义标签名,两个标签名之间使用逗号分开。
gotests
- 在evil-mode下使用v命令选择某些函数区域
- 按下M-x输入gotests-region生成这些函数的gotest模板或直接输入gotests将生成本文件的所有函数测试模板。
- 将在该目录下生成同名_test.go的测试文件。
gocode自动补全
正常安装gocode后,出现自动补全不了时,一般都是GOPATH没有包含到和没有进行go install的问题。
标准库代码无法自动补全
原因是由于没有把标准库路径加入到GOPATH中,例如:把/usr/local/go加入到GOPATH
### go develop ### export GOROOT=/usr/local/go export GOARCH=amd64 #export GOOS=linux export GOOS=darwin # export GOBIN=$GOROOT/bin/ 一定不要设置GOBIN export GOTOOLS=$GOROOT/pkg/tool/ export PATH=$PATH:$GOROOT/bin:$GOTOOLS ### mospan golang env setting ## export GOPATH=~/goget:$GOROOT GO111MODULE=auto gocode -s & gocode set propose-builtins true & gocode set autobuild true & #+BEGIN_SRC - 保留关键字无法自动补全 gocode补全很强大,但是一些关键字import, package等不会补全。但可以通过修改auto-complete-settings.el中进行实现, 要补全的关键字在auto-complete/dict/go-mode中。 #+BEGIN_SRC elisp (defun ac-settings-4-php () (setq ac-sources '(ac-source-yasnippet ac-source-abbrev ac-source-words-in-buffer ac-source-words-in-same-mode-buffers ac-source-files-in-current-dir ac-source-filename))) (am-add-hooks `(lisp-mode-hook emacs-lisp-mode-hook lisp-interaction-mode-hook svn-log-edit-mode-hook change-log-mode-hook) 'ac-settings-4-lisp) (apply-args-list-to-fun (lambda (hook fun) (am-add-hooks hook fun)) `(('java-mode-hook 'ac-settings-4-java) ('c-mode-hook 'ac-settings-4-c) ('c++-mode-hook 'ac-settings-4-cpp) ('text-mode-hook 'ac-settings-4-text) ('eshell-mode-hook 'ac-settings-4-eshell) ('ruby-mode-hook 'ac-settings-4-ruby) ('html-mode-hook 'ac-settings-4-html) ('awk-mode-hook 'ac-settings-4-awk) ('go-mode-hook 'ac-settings-4-go) ('lua-mode-hook 'ac-settings-4-lua) ;;lua关键字补全还不好使,20190429 by mosp ('sh-mode-hook 'ac-settings-4-sh) ('py-mode-hook 'ac-settings-4-python) ('php-mode-hook 'ac-settings-4-php) ;;php关键字补全还不好使,20190429 by mosp ('tcl-mode-hook 'ac-settings-4-tcl)))
用户库代码无法自动补全 原因:gocode查找的是libXX.a库而不是源代码文本,需要go install后就找到了。 一定不要设置GOBIN环境变量,否则go install将把二进制安装到GOBIN下而不是本工程目录下了。 Emacs golang用户代码无法补全问题
GTD
全局
快捷键 | 描述 |
---|---|
C-c v | 打开org-mode agenda视图 |
C-c v a | 进入agenda视图,agenda view提供四种视图,分别是日(d),周(w),月(v m),年(v y),括号里是切换这四种视图的快捷键。 |
C-c C-q | 打标签 |
C-c C-r | 打开org-remember进行备忘记录 |
在TODO行上
快捷键 | 描述 |
---|---|
C-c C-t | 切换TODO状态,循环选择 |
C-u C-c C-t | 切换TODO状态,手工选择 |
C-c C-c | 添加Tag |
C-c C-s | 添加Schedule |
C-c C-d | 添加Deadline |
C-c . | 添加时间戳 |
C-u C-c . | 添加准确时间的时间戳 |
C-c C-w | 移动到不同父节点 |
日历
快捷键 | 描述 |
---|---|
C-f 或者 左方向键 | 后一日 |
C-b 或者 右方向键 | 前一日 |
C-n 或者 下方向键 | 后一周 |
c-p 或者 上方向键 | 前一周 |
M-} | 后一月 |
M-{ | 前一月 |
C-x ] | 后一年 |
C-x [ | 前一年 |
C-a | 移动到一周的开始 |
C-e | 移动到一周的末尾 |
M-a | 移动到一月的开始 |
M-e | 移动到一月的末尾 |
M-< | 移动到一年的开始 |
M-> | 移动到一年的末尾 |
dired
快捷键 | 描述 |
---|---|
M-x d | 打开dired模式 |
v | 以只读方式查看文件 |
q | q for View-quit, 退出查看, 目录生效,文件中可能不生效,可以使用M-x V-q 或 Q 代替 |
Q | Q for View-quit-all, 退出所有查看 |
o | 另一个窗口中,打开文件或目录 |
作者:mospan
微信关注:墨斯潘園
本文出处:http://mospany.github.io/2017/08/25/emacs-mospan-tutorial/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。