基本
- h j k l : 移动
- i,a,o,I,A,O :插入
- x,c,d,y,v,gu,gU,C,D:命令
行
- ^ : 行首’
- $ : 行尾
- G : 末行
- gg : 首行
- nG : n行
- ngg : n行
- 0 : 行首
可视模式
- v:单选
- V:行选
- ctrl-v:列选
- gv:上次选中
窗口
- H : 当前窗口的首行
- M : 当前窗口的中间
- L : 当前窗口的尾行
- ctrl-b : 等效于pgup,b-backword
- ctrl-f : 等效于pgdn,f-forward
- ctrl-u : 上翻半页
- ctrl-d : 下翻半页
单词/句/段落
- w : 下一个单词词首
- e : 下一个单词词尾
- b : 前一个单词的词首
- ge : 前一个单词的词尾
- t : 到下一个字符前
- f : 到下一个字符
- T : 到前一个字符前
- F : 到前一个字符
跳转
- ctrl-o : 视图前进
- ctrl-i : 视图后退
- % 跳转到相配对的括号
- [[ 跳转至上一个函数(要求代码块中 { 必须单独占一行)
- ]] 跳转至下一个函数(要求代码块中 { 必须单独占一行)
- ) : 下一句
- ( : 上一句
- } : 下一段
- } : 上一段
- zz: 将当前行移动到屏幕中央。
- zt: 将当前行移动到屏幕顶端。
- zb: 将当前行移动到屏幕底端。
替换
- :s/old/new 把当前行old的第一次出现修改为new
- :s/old/new/g 把当前行old的每次出现改为new
- :nu1,nu2 s/old/new/g 替换指定行nu1,nu2之间的内容
- :%s/old/new/g 替换全文
- :s/old/new/gc 每一处替换都会提醒confirm
- :g/pattern/s/old/new/g 利用正则进行全文替换
- :g/pattern/cmd 在搜索到的行上执行cmd命令
缩进对齐
- >> :增加缩进
- « :减小缩进
- n» :以下n行增加缩进
- n« :以下n行减小缩进
- = :对齐
常识
- ctrl-s 意阻止向终端输出,误按此键会使vim进入假死状态
- ctrl-q 意恢复向终端输出,可解除上述假死状态
- .:重复上一个编辑动作
外部命令
- :%!grep -oP “pattern”
- :1,12!sort -r -n -k4.1,5
- :%!uniq
搜索替换
- 全文搜索:/pattern
- fc: 把光标移到同一行的下一个c字符处
- Fc: 把光标移到同一行的上一个c字符处
- tc: 把光标移到同一行的下一个c字符前
- Tc: 把光标移到同一行的上一个c字符后
- ;: 配合 f/t 使用,重复一次
- ,: 配合 f/t 使用,反向重复一次
- 替换:%s/old/new/gc
- n:重复上次动作,向下
- N:重复上次动作,向上
大小写
- ~ :大小写翻转
- gu/gU :改变大小写
- u/U :可视模式改变大小写
窗口
- split :水平切分
- vsplit :垂直切分
- Ctrl+w+方向键 :切换到前/下/上/后一个窗格
- Ctrl+w+h/j/k/l :切换到前/下/上/后一个窗格
- Ctrl+ww :依次向后切换到下一个窗格中
文件
- bn:下一个文件
- bp:上一个文件
标记操作
- 模式一:分两步,先标记(/s),再在标记行上操作(:g//operate)
- 模式二:两步一起做(:g/pattern/operate)
宏
- qaq: 清空寄存器a
- g//yank A :将上次选中追加到a寄存器(小a是覆盖)
- g//t$:将上次选中的内容直接复制到文本结尾
- normal @a :执行寄存器a中命令
操作缓冲区的Ex命令
- :[range]delete [x]
- :[range]yank [x]
- :[range]put [x]
- :[range]copy {address}
- :[range]move {address}
- :[range]join
- :[range]normal {commands}
标记
- `` :上次跳转动作前的位置
- `. :上次修改过的位置
- `^ :上次插入过的位置
- `[ :上次修改或复制的开始位置
- `] :上次修改或复制的结束位置
- `< :上次高亮选区的开始位置
- `> :上次高亮选区的结束位置
- m(a~z) :创建局部标记
- m(A~Z) :创建全局标记
- `(a~z,A~Z) :标记跳转
插入模式
- < ctrl-u >
- < ctrl-h >
- < ctrl-w >
正则
- \v :very magic 任何元字符都不用加反斜杠
- \V : very nomagic 任何元字符都必须加反斜杠
环视
- \@= 顺序环视: eg:查找后面是cat的字符small /smallcat\@=
- \@! 顺序否定环视 eg:查找后面不是cat的字符small smallcat\@!
- \@<= 逆序环视 eg:查找前面是small的cat small\@<=cat
- \@<! 逆序否定环视 eg:查找前面不是small的cat small\@<!cat
g命令
- *(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的 下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方 向查找.
- g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而 是匹配包含该单词的所有字符串.
- gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非 注释段中第一次出现这个单词的地方. 用于查找局部变量等
- ga 显示光标所指字符的encoding 编码,比如ASCII码
- guw 光标所在单词光标后的字符小写
- gUw 光标所在单词光标后的字符大写
- g; 反向遍历改变列表changelist, 如跳到上次文档修改的地方
- g, 正向遍历改变列表changelist
- gi 回到上次退出插入模式的地方,并切换到插入模式
折叠
- zf – 创建折叠的命令,可以在一个可视区域上使用该命令;
- zd – 删除当前行的折叠;
- zD – 删除当前行的折叠;
- zfap – 折叠光标所在的段;
- zo – 打开折叠的文本;
- zc – 收起折叠;
- za – 打开/关闭当前折叠;
- zr – 打开嵌套的折行;
- zm – 收起嵌套的折行;
- zR (zO) – 打开所有折行;
- zM (zC) – 收起所有折行;
- zj – 跳到下一个折叠处;
- zk – 跳到上一个折叠处;
- zi – enable/disable fold;
vscode 补充
- gd – 定义跳转
- gh – 提示框
- gb – @TODO
- gq – @TODO
- gc – @TODO
- gC – @TODO af:这个在可视模式下使用
ii ai aI
-
ii -
ai -
aI
vim-surround
- ds:delete
- cs:change
- ys:这个太复杂,用处不大
- S:这个在可视模式下添加,