Normal模式
移动
- gi 快速跳转到最后一次编辑的地方并进入插入模式,gg 移动到文件开头,G 移动到文件结尾
- H (head)跳转到屏幕开头,M (middle) 跳转到文件中间,L (lower) 跳转到屏幕结尾
- ctrl+u/f (upword/forword)上下翻页,zz 将当前行置于屏幕中间
- h j k l ←↓↑→
- w/W 移动到下一个word/WORD开头(WORD指以空白符分割的单词),b/B 回到上一个word/WORD开头,e/E 移动到下一个word/WORD尾
- f{char} 移动到指定字符上面, ;跳转到下一个指定字符, , 跳转到前一个指定字符, t{char} 移动到指定字符前一个字符上, F{char} 反过来搜前面的字符
- 0 移动到行首第一个字符,$ 移动到行尾,^ 移动到第一个非空白字符,g_ 移动到尾行非空白字符
删除
- x 删除一个字符
- d 通常配合其文本对象一起作用,dd 删除整行,dw (= daw (delete around a word))删除整个单词包括周围的空格,dt+{char} 删除直到某个字符,d$ 删除到行尾,d0 删除到行首,2dd 删除两行
修改
- r (replace)替换一个字符,s (substitute)替换并进入插入模式,c (change)配合文本对象,快速进行修改,caw 删除当前单词并进入插入模式,ct+{char} 删除到字符位置并进入插入模式
- R 连续替换,S 整行删除并进入插入模式(光标在行首),C 删除整行并进入插入模式(光标在原位置)
查询
- / 前向搜索,? 反向搜索
- n/N 跳转到上一个或下一个匹配
- */# 进行当前单词的前向和后向匹配
复制粘贴
- y (yank) 复制,p (put) 粘贴,d 剪切,同样可配合文本对象如 yiw 复制一个单词,yy 复制一行
- 使用 v 切换到 visual 模式选中要复制内容,然后使用p粘贴
其他
- ctrl+r 退回
insert模式
- a (append)
- i (insert)
- o (open a new line below)
- A (append after line)
- I (insert before line)
- O (open a new line above)
- ctrl+h 删除上一个字符
- ctrl+w 删除上一个单词
- ctrl+u 删除当前行(终端同样可用)
复制粘贴
- 和其他文本编辑器差不多, ctrl+v 粘贴(为何本人使用该命令无法粘贴?)
- 在vimrc中设置 autoindent, 粘贴 python 代码缩进错乱,需要使用:set paste 和 设置 :set nopaste 来解决
cmd模式
- :vs 竖分屏
- :sp 横分屏
- :% s/foo/bar/g 全局替换
- :[range]s/{pattern}/{string}/[flags] range 表示范围,如10,20表示10-20行,% 表示全部,pattern 是要替换的模式,string 是替换后的文本,flags可选择参数有 g(global) 表示全局范围内执行,c(confirm)表示确认,可以确认或者拒绝修改,n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
- :reg a 查看寄存器 a 中保存的内容
- :set clipboard=unnamed 设置系统剪贴板为无名寄存器内容
visual模式
visual模式一般用来块状选择文本
- Normal模式下用 v 进入visual模式
- 使用 V 选择行
- 使用 ctrl+v 进行方块选择
常用寄存器
- 复制专用寄存器 "0 使用 y 复制文本同时会被拷贝到复制寄存器中
- 系统剪贴板 "+ 在复制前加上可复制到系统剪贴板
- 其他寄存器 "% 当前文件名, ". 上次插入的文本