Shortcuts

project

workspace

  • <SPC> <TAB> . : 手动选择 workspace

文件

  • 搜索整个 project

    • <SPC> <SPC>
  • 搜索当前文件夹

    • SPC .
    • SPC f f

buffer

  • SPC , : 当前 project
  • SPC < : 所有 buffer

M-x in evil

  • <SPC> :

Window

prefix: Ctrl + w

Repeat

.

Buffer

prefix: SPC + ,

File

  • prefix: SPC + .
  • SPC f f

Jump

  • go back: Ctrl + o
  • definition: g d
  • reference: g D
  • last change: g ;

Cursor

  • word end: e
  • back word end: g e

screen scroll 滚动

  • 半屏

    • Ctrl + u: up
    • Ctrl + d: down
  • 单行

    • Ctr + y: up
    • Ctr + e: down

Navigation

  • j,k
  • h,l
  • (,)

    • 句子跳转

Middle 居中

类似 emacs, Ctrl + l

  • z z: middle 当前行居中
  • z t: top 当前行移动到顶部
  • z b: bottom 当前行移动到底部

insert mode

删除

  • Ctrl + w

    • 删除左侧单词

复制

  • Y

    • 复制到句尾

插件

参考:EmacsWiki: Evil

evil-surround

功能: 文本周围环绕字符和文字处理,eg: (), {}, <em>hello text</em>, "text", 'text'

参考: GitHub - emacs-evil/evil-surround: you will be surrounded (surround.vim for e…

  • 替换

    • cs<SurroundObject><to-relace object>

      • cs"' : 把 "" 替换成 ''
  • 删除

    • ds<SurroundObject>

      • ds" : 删除双引号""

tag 替换

evil-numbers

作用: 数字递增递减 doom emacs: g -g = 参考: GitHub - cofi/evil-numbers: Increment and decrement numbers in Emacs

evil-nerd-commenter

elisp 前缀: evilnc doom emacs:

  • gcc

    • comment one line 注释一行
  • V + gcc

    • 注释多行
  • 取消注释

    • gcc 再次处理一遍即可
  • 这里 g 是 leader 按键

evil-args

作用: 函数参数编辑 特点:

  • 识别以“;”或“,”分割的函数参数
  • 需要在()括号内部才能能生效

按键:

  • Navigate 移动

    • ]a: 下一个 arg
    • [a: 上一个 arg
    • 与 evil-easymotion 连用

      • gsa : 定位下面的 args
      • gsA : 定位上面的 args
  • 删除

    • daa
    • dia
  • 替换

    • cia
    • caa

evil-easymotion

作用: 快速定位附近的 <textobject>, 类似 avy jump

按键:

  • gs<textobject>

    • gsa : function args
    • gsk : 上面的行
    • gsj : 下面的行
    • gsf : 下面的字符 char

evil-lion

作用: 用于通过给定字符对齐,左对齐、右对齐 参考: GitHub - edkolev/evil-lion: Evil align operator

按键:

  • gl<textobject><char>

    • 通过给定字符 char 的左端对齐
    • glip=

      • left indent text object(inner paragraph) according to "="
  • gL<textobject><char>

    • 通过给定字符 char 的右端对齐

evil-snipe

作用:通过给定字符(一个或者两个),快速定位前后文本 参考:GitHub - hlissner/evil-snipe: 2-char searching ala vim-sneak & vim-seek, for … 特性:

  • 一般是在同一行内部搜索,存在失败(没有时)

按键:

  • 定位方法:

    • s / S : 输入两个字符, 向下/向上搜索

      • eg:

        • sim : 向下搜索 im
        • se<Enter> : 下搜索 e,

          • 注意:默认输入 2 个字符,只有一个字符,使用<Enter>完成输入
    • f / F : 输入一个字符搜索

      • 结果跳转: f / F
  • 结果跳转

    • ; : 下一个
    • , : 上一个

evil-embrace 和 embrace.el

作用: evil-surround 功能增强

embrace.el

特点:

  • 相比于 evil-surround 由添加 surround 功能

功能:

  • embrace-add

evil-escape

作用: 快速退出一种 vim mode 的方法, eg: 按 "jk" 退出 insert mode 特点:

  • 退出按键 "jk", 按下顺序要正确,速度要快

evil-exchange

作用: 两个 textobject 调换位置的方法

eg:

  • gxe gxb
  • ge<textobject> : 这个命令要输入两次

evil-indent-plus

evil-vimish-fold

功能: 折叠代码 特点:

  • 自带折叠函数
  • if else, for 等,需要手动创建折叠

按键:

  • za : toggle 切换折叠
  • zf : 创建折叠
  • zc : close
  • zo : open

按键

i 和 a 区别

da Vs. di

  • di): delete things inside ), 删除()内部的内容
  • da): delete a () object, 删除一整个()和内部的内容

r Vs. s Vs. c 区别

参考:What is the difference between s, c and r commands in vi/vim? - Stack Overflow

  • r, R: 在 normal mode 中替换,replace

    • r: replace char
    • R: replace to end of line
  • s, S: 删除后,进入 insert mode, 替换, substitute

    • s: substitute char, and insert mode
    • S: substitute to end of line(在 vim 中)
  • c, C: c<textobject>: 删除 textobject 后,进入 insert mode, change

    • c: change text object, insert mode
    • C: change to end of line, insert mode
    • cc: cut line into clipboard, 剪切行,删除行

git, magit

prefix: <SPC> g

代码 diff 跳转

git-gutter

  • ]d

    • 下一块
  • [d

    • 上一块

flycheck error

  • next error

    • ]e
  • previous error

    • [e

插入空白行

  • 上面

    • [o
  • 下面

    • ]o

跳转 ], [

  • 错误

    • e : flycheck error 代码错误
    • s : flyspell error 拼写错误
  • 编辑

    • o : 空白行插入
    • <SPC> : 空白行插入
  • 方法:

    • m : 方法开始 begin
    • M : 方法结尾 end
  • d : git-gutter, git diff git 代码修改
  • c :

    • prog-mode 等,代码中: comment, 注释
    • org-mode 中: code, org-babel 代码块
  • ] : section 开头
  • [ : section 结尾
  • 括号:

    • ) : () 的结尾, 未配对的), 注意 : 在两个()中间 ]) 按键跳转才能生效
    • ( : () 的开头
    • } : {} 的结尾
    • { : {} 的结尾
  • 外部跳转,文件和 buffer 等

    • b : buffer
    • f : file
    • F : Frame
    • w : workspace

command-line window 和 M-x

emacs 原生按键

  • 删除行

    • 在 evil mini buffer 中 C-k 不能使用, 但是 C-K 可以使用