1 普通模式
以下命令请在普通模式执行
1.1 进入命令模式命令
vi filename: 打开或新建文件,并将光标置于第一行首vi +n filename:打开文件,并将光标置于第n行首vi + filename:打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename:在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename:打开多个文件,依次编辑
1.2 移动光标
j:向下20j: 向下移动 20 行k:向上h:向左l:向右0:数字0,到行首^:到行首第一个字符,如果前面有空格的话$:到行尾n$:光标移至第n行尾gg:快速到文件头G:快速到文件尾50G:跳转到第 50 行n+:光标下移n行n-:光标上移n行w:光标跳到下个字的开头e:光标跳到下个字的字尾b:光标回到上个字的开头#l:光标移到该行的第#个位置,如:5l,56l。ctrl+ b:屏幕往后移动一页。ctrl + f:屏幕往前移动一页。ctrl + u:屏幕往后移动半页。ctrl + d:屏幕往”前”移动半页。ctrl + g列出光标所在行的行号space:光标右移一个字符Backspace:光标左移一个字符):光标移至句尾(:光标移至句首}:光标移至段落开头{:光标移至段落结尾H:光标移至屏幕顶行M:光标移至屏幕中间行L:光标移至屏幕最后行
注意:请不要在插入模式进行光标移动,效率很低下
1.3 复制
yy:复制一行#yy:例如,6yy表示拷贝从光标所在的该行往下数6行文字8yy:向下复制8行yw:复制光标开始的一个单词#yw:复制#个字到缓冲区y$:复制光标到行尾yfA:复制光标到第一个大写A中间的内容y2fA:复制光标到第二个大写A中间的内容n,my:指定n到m行复制
1.4 剪切
x:向后剪切一个一个字符,如果是在行尾,则为向前剪切4x:剪切4个xp:非行尾交换两个字符,如从bs变成sb
1.5 删除
dd:删除一行100dd:删除100行dw:删除一个单词df":删除到出现的第一个双引号d^:删除至行首#dd:从光标所在行开始删除#行x:每按一次,删除光标所在位置的后面一个字符。#x:例如,6x表示删除光标所在位置的后面6个字符。X:大写的X,每按一次,删除光标所在位置的前面一个字符。#X:例如,20X表示删除光标所在位置的前面20个字符。Ctrl+u:删除输入方式下所输入的文本
注意:删除的内容会放到剪贴板,按p即可粘贴到其他地方。
1.6 粘贴
p(小写):粘贴复制或剪切的内容,将缓冲区内的字符贴到光标所在位置。
在光标下一行粘贴
注意:所有与y有关的复制命令都必须与p配合才能完成复制与粘贴功能5p:将复制或剪切的内容粘贴5次P(大写):在光标上一行粘贴(插入)
1.7 替换和撤销
r+<待替换字母>:将游标所在字母替换为指定字母R:连续替换,直到按下Esccc:替换整行,即删除游标所在行,并进入插入模式cw:替换一个单词,即删除一个单词,并进入插入模式c#w:例如,c3w表示更改3个字u{n}:撤销一次或n次操作U(大写):撤销当前行的所有修改Ctrl+r:redo,即撤销undo的操作
1.8 查找并替换
替换光标所在行第一个匹配的字符串:
# 语法
:s/旧字符串/新字符串
# 实例
:s/one/two
替换光标所在行所有旧字符串为新字符串:
# 语法
:s/旧字符串/新字符串/g
替换第几行到第几行中所有字符串:
# 语法
:n,m s/旧字符串/新字符串/g
# 实例
:2,4 s/one/two/g
最常用的就是全文替换了:
# 语法
:%s/旧字符串/新字符串/g
2 命令模式
以下命令请在命令模式下执行
在普通模式下,输入:即可进入。
2.1 退出编辑器
wq:保存当前文件并退出或者xwqa:保存所有文件并退出q!: 不保存,强制退出qa!: 有多个文件被打开,同时退出
2.2 调整文本
%s/$/sth/:在行尾追加sth%s/^M//g:替换掉dos换行符,\^M使用ctrl+v + Enter即可输入:g/^\s$/d*:删除空行以及只有空格的行%s/#.*//g:删除#之后的字符,没错,这里使用的是正则。ce:使本行文本内容居中ri:使本行文本内容靠右le:使本行文本内容靠左
2.3 查找字符串
/ 关键字:从光标开始处向文件尾搜索,先按/键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n会往后寻找到要的关键字为止。? 关键字:从光标开始处向文件首搜索,先按?键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n会往前寻找到要的关键字为止
在普通模式下,按下/直接进入查找,输入相应的字符串按确定即可
n:查找下一个匹配N:查找上一个匹配2n:查找下面第二个匹配
3 vim的3种模式的关系图

- 命令行模式command mode) :
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。 - 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按ESC键可回到命令行模式i, I进入输入模式Insert mode:i为从目前光标所在处输入,I为在目前所在行的第一个非空格符处开始输入;a, A进入输入模式Insert mode:a为从目前光标所在的下一个字符处开始输入,A为从光标所在行的最后一个字符处开始输入;o, O进入输入模式Insert mode:o为在目前光标所在的下一行处输入新的一行;O为在目前光标所在处的上一行输入新的一行 - 底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等
4 vim时其他命令
4.1 显示隐藏行号
:set number 或者 :set nu 显示行号:set nonumber 或者 :set nonu 隐藏行号#:#号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行
4.2 底行模式下命令
选项设置
:set all:列出所有选项设置情况:set term:设置终端类型:set ignorance:在搜索中忽略大小写:set list:显示制表位(Ctrl+I)和行尾标志($):set number:显示行号:set report:显示由面向行的命令修改过的数目:set terse:显示简短的警告信息:set warn:在转到别的文件时若没保存当前文件则显示NO write信息:set nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符:set nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始:set mesg:允许vi显示其他用户用write写到自己终端上的信息
