linux 中 vim/vi的常用命令

简介

vi的三种基本工作模式:
normal模式:正常模式
insert模式:插入模式
command模式:底部命令模式、末行模式

normal模式(正常模式)
  1. 进入vim编辑器时默认处在该模式下
  2. 在该模式下键盘输入的所有字符都被当作编辑命令来解释,命令合法才执行
  3. 在该模式下输入的命令不会被显示,只显示命令结果
insert模式(插入模式)
  1. 所有的输入都被当作文件显示在屏幕
  2. 从normal模式进入insert模式:i/I(最常用)、a/A(附加命令)、o/O(打开命令)
  3. 从insert模式进入normal模式按Esc键
command模式(命令模式)
  1. 从normal模式进入command模式输入:
  2. 在该模式下vim窗口会在最后一行显示一个:并等待用户输入命令
  3. command模式中所有命令都必须按回车后执行
  4. 命令执行完之后vim自动回到normal模式
  5. 可按Esc回到normal模式中
    工作过程流程图

vim的启动

启动vim编辑器:vim/vi
有这个文件时打开,没有就创建然后打开

vim newfile

退出vim

normal模式输入:进入命令输入模式

:w 保存当前文件但不退出
:q 系统退出vim
:wq 保存并退出vim
:q! 放弃所作修改直接退出
:w newfile 另存为新文件,新文件名为newfile

显示和取消行号

:set nu 显示行号
:set nonu  不显示行号

光标移动操作

insert模式下光标的移动:四个方向键
normal模式下:各种命令

在命令前输入数字n,则光标就移动n个位置

0 光标移动到所在行的开始
$ 光标移动到所在行的末尾
nG 光标移动到第几行(或:n回车)
G 光标移动到最后一行
gg 光标移动到第一行

撤销 恢复

normal模式中:输入u撤销
normal模式中:输入ctrl+r恢复

文本删除

在insert模式中:使用delete/backspace可将其删除
在normal模式中:vim提供了许多命令

dd 删除光标所在的整行
ndd 删除从当前行开始的n行内容
d0 删除当前光标前一个字符到行首的内容
d$ 删除从光标所在处到行尾的内容

复制与粘贴

normal模式中输入

yy 复制当前行
nyy 复制当前行开始的n行
y0 复制到行首不含光标所在处字符
y$ 复制到行尾含光标所在处字符
y1G 复制到文件首,包含当前行
yG 复制到文件尾,包含当前行
p 粘贴至光标后,若整行复制则贴到当前行下面

搜索

normal模式下

/rexp回车 向下搜索rexp
?rexp回车 向上搜索rexp
n 重复最近一次的搜索
N 重复最近一次的修改但搜索方向相反

其中rexp是可以是正则表达式,也可以是单个字符串

替换

normal模式下

:s/old/new 用字符串new替换当前行内第一个字符串old
:s/old/new/g 用字符串new替换当前行内所有字符串old
:m,ns/old/new/g 用字符串new替换从m行到n行所有字符串old
:%s/old/new/g 将全文所有的字符串old替换成new
:%s/old/new/gc 进行替换时要求用户确认每个替换需要添加c选项