1 普通模式
以下命令请在普通模式执行
1.1 进入命令模式命令
- vi filename: 打开或新建文件,并将光标置于第一行首
- vi +n filename:打开文件,并将光标置于第- n行首
- vi + filename:打开文件,并将光标置于最后一行首
- vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
- vi -r filename:在上次正用vi编辑时发生系统崩溃,恢复filename
- vi 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:连续替换,直到按下- Esc
- cc:替换整行,即删除游标所在行,并进入插入模式
- 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:保存当前文件并退出或者- x
- wqa:保存所有文件并退出
- 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写到自己终端上的信息
 
						