三模式
- 命令模式 (command mode) -> 默认模式
- 插入模式 (insert mode)-> i 进入
- 底行模式 (last line mode) -> 输入 :
常用命令
光标移动
- 使用上下左右方向键
- 命令模式下:h向左、j向下 、k向上、l向右。
插入文本或行
vi命令模式下使用,执行下面命令后将进入插入模式,按ESC键可退出插入模式
- a -> append ->在当前光标位置的右边添加文本,比如字符串为test,光标框住的s,即输入aa,则变为tesat
- i -> insert model ->在当前光标位置的左边添加文本,比如字符串为test,光标框住的i,即输入ia,则变为teast
- A ->Append at eol ->在当前行的末尾位置添加文本,比如字符串为test,光标框住的i,即输入Aa,则变为testa
- I -> Insert at bol ->在当前行的开头位置添加文本,比如字符串为test,光标框住的i,即输入Ia,则变为atest
- O -> Open above ->在当前行的上面新建一行,光标移动到新建行行首
- o -> open below ->在当前行的下面新建一行,光标移动到新建行行首
- R® -> replace mode->替换(覆盖)当前光标位置及后面的若干文本,输入一个字符,则替换当前框住的字符,并跳到下一个字符。
- J(大写) -> join lines-> 合并光标所在行及下一行为一行,和光标位置无关,第一行test,第二行abc,使用J后后并为test abc一行
视觉模式
- v ->选中一个或多个字符,可使用其他辅助方向键调整
- V ->选中一行,可使用其他辅助方向键调整
删除、剪切、恢复字符或行
- x -> delete char ->删除(同剪切)当前字符,X是反向向前移动 .
- nx(通常命令n都在前面) -> 删除(同剪切)从光标开始的n个字符,比如test,执行2x,则变为tt.
- dd -> 删除(同剪切)当前行
- ndd -> 向下删除(同剪切)当前行在内的n行
- u ->撤销上一步操作
- ctrl + r® redo 前进一步操作
- df指定字符a -> 从光标处删除至指定字符a
- di” -> 删除(同剪切)““双引号内内容
- da” ->删除(同剪切)““双引号内内容以及引号自身
- dw -> 删除(同剪切)当前光标到单词尾部,同理dW,db,dB
- d2w -> 删除(同剪切)当前光标至二个单位处,同理d2W,d2b,d2B
搜索
- 命令模式下输入/test向下搜索含有test字符串,?test向上搜索含有test的字符串
- n->向下搜索前一个搜素动作
- N->向上搜索前一个搜索动作
跳至指定位置
- gg -> 跳至整篇开头位置,光标转移到当前行第一个字符
- G->跳至整篇结束行,光标转移到当前行第一个字符
- nG->跳到行号为n的行,光标转移到当前行第一个字符
- ^ -> 一行的开始
- $-> 一行的结尾
- w -> 以空格和符号作为分割正向跳转(反向b),“hello vim,I’m wrting”,当光标在h时,连按w光标依次显示为:v > , > I > ‘ > m > w > “
- W -> 以空格为分割,正向跳转(反向B),“hello vim,I’m wrting”,当光标在h时,连按大写的W光标依次显示为:v > I > w
- f+字符x -> 正向跳转至下一个字符x,F是反向.
- ctrl+o(old)-> 光标向前一个光标跳
- ctrl+i-> 光标向后一个光标跳
复制、粘贴
- yy -> 复制当前行,也可以使用ayy,a为字母,非数字
- nyy->将当前行向下n行复制到缓冲区,也可以用 “anyy 复制,”a 为缓冲区,a为字母,非数字。,可以完成多个复制任务。
- yf指定字符a-> 从光标处复制至指定字符a
- yi”-> 复制”“双引号内内容
- ya”->复制”“双引号内内容以及引号自身
- yw -> 复制从光标开始到词尾的字符。
- nyw ->复制从光标开始的n个单位,比如一个单子,一个逗号都算一个。
- v2w->使用v来进行选中,w指为word,2就是2个,再使用y复制选中内容,用方向键也可以。
- p -> 粘贴复制的内容,也可以使用ap,粘贴后的行处于当前行的下一行,会自动创建一个行。a为字母,非数字。P是在光标前,p是在光标后。
- np-> 粘贴n次
替换命令
- :s/golang/golang2->用golang2替换行中首次出现的golang2
- :s/golang/golang2/g ->用golang2替换行中所有的golang
- :n,m s/golang/golang2/g ->用golang2替换从n到m行里所有的golang
- :%s/golang/golang2/g ->用golang2替换当前文件里所有的golang