文章目录

概述

我自从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

安装依赖工具

  1. 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
    
  2. 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

  1. 阅读代码

    注: 一定记得先加代码工程到GOPATH中,否则godef不能跨包或文件夹跳转, 可以通过go build是否成功来验证配置正确性

    快捷键 描述
    f8 godef-jump
    f7 gocscope-pop-mark
  2. go-add-tags

    1. 在evil-mode下使用v命令选择结构体区域
    2. 按下M-x输入go-add-tags
    3. 显示tags:后,输入json或输入其他自定义标签名,两个标签名之间使用逗号分开。
  3. gotests

    1. 在evil-mode下使用v命令选择某些函数区域
    2. 按下M-x输入gotests-region生成这些函数的gotest模板或直接输入gotests将生成本文件的所有函数测试模板。
    3. 将在该目录下生成同名_test.go的测试文件。
  4. 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/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。