1. 打开文件

1.1 打开或者新建文件

  • 在终端中输入vi在后面跟上文件名 即可
    $ vi 文件名
    
  • 如果文件已经存在,会直接打开文件
  • 如果文件不存在,会创建一个文件

1.2 打开文件并定位

  • 例如:开发中,知道某一行有错误,可以 快速定位 如初
  • 这个时候,可以使用以下命令打开文件
    $ vi 文件名 +行数
    

    提示:如果只带上+而不指定行号,会直接定位到文件末尾

2. 工作模式

vi 有三种基本工作模式:

  1. 命令模式
    • 打开文件首先进入命令模式,
    • 通过命令对文件进行常规的编辑操作,例如 定位、翻页、复制、粘帖、删除
  2. 末行模式 – 执行 保存退出 等操作
    • 末行模式是vi的出口
  3. 编辑模式 -正常的编辑文字
    workflow

2.1 末行模式命令

命令 英文 功能
w write 保存
q quit 退出,如果没有保存,不允许退出
q! quit 强行退出,不保存
wq write & quit 保存并退出
x   保存并退出

3. 常用命令

命令线路图

  1. 重复次数 在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令重复执行制定次数
  2. 移动和选择
    • 定位到指定的代码行
    • 移动命令编辑操作可以组合使用
  3. 编辑操作
    • 复制、粘帖、删除、替换、缩排
  4. 撤销和重复
  5. 查找替换

3.1 移动命令

基本

1). 上、下、左、右

h j k l
食指 食指 中指 无名指

2). 行内移动

命令 英文 功能
w word 向后移动一个单词
b back 向前移动一个单词
0   行首
^   行首,第一个非空字符
$   行尾

3). 行数移动

命令 英文 功能
gg go 文件顶部
G go 文件末尾
数字gg/ 数字G go 移动到 数字 对应行数
:数字   (末行模式) 同上

4.) 屏幕移动

命令 英文 功能
ctrl + b back 向上翻页
ctrl + f forward 向下翻页
H Head 屏幕顶部
M Middle 屏幕中间
L Low 屏幕底部

进阶

1). 段落移动

  • 程序中不相关的代码会用空格分隔
命令 功能
{ 上一段
} 下一段

2). 切换左右括号

  • 用于在当前光标行中找到光标 ()[]{},并在成对的左右括号间切换
命令 功能
% 定位当前行中的括号并切换

3). 标记

  • 在开发时,某些代码可能需要稍后处理,例如:编辑、查看
  • 此时可以用m增加一个标记,这样可以在需要的时候快速跳转回来
  • 标记名称可以a-zA-Z之间的任意一个字母
  • 标记的行如果被删除,标记同时被自动删除
  • 如果在其他行添加了相同名称的标记,之前的标记会被替换
命令 英文 功能
mx mark 添加标记x, x是a-zA-Z之间任意字母
‘x   直接定位到标记x所在位置

3.2 选中命令(可视模式)

  • 学习编辑命令前,先学会怎样选中要复制的命令
  • vi中,用visual命令切换到可视模式
  • vi可提供三种可视模式,方便选中文本
  • esc可放弃选中,返回命令模式
命令 模式 功能
v 可视模式 从光标开始位置选择文本
V 可视行模式 光标经过的完整行
ctrl+v 可视块(垂直)模式 垂直方向选择文本
  • 可视模式下,可以和移动命令连用,例如:
    ggVG 能够选中所有内容
    V} 能够选择至空行以上的所有行
  • 在可视模式下,按 大写 I 进入编辑模式

3.3 撤销和删除

撤销和恢复撤销

命令 英文 功能
u undo 撤销命令
ctrl+r redo 恢复撤销命令

删除文本

命令 英文 功能
x cut 删除光标所在字符,或者选中文字
d(移动命令) delete 删除移动命令对应的内容
dd delete 删除光标所在行,可以ndd 连续删除多行
D delete 删除至行尾
  • 删除命令可以和移动命令连用,以下是常见的组合命令:
* dw        # 从光标位置删除到单词末尾
* d0        # 从光标位置删除到一行的起始位置
* d}        # 从光标位置删除到段落结尾
* ndd       # 从光标位置向下连续删除 n 行
* d行号G    # 从光标所在行 删除到
* d'a       # 从光标所在行 删除到 标记a 之间的所有代码

3.4 复制和粘贴

命令 英文 功能
y(移动命令) copy 复制
yy copy 复制一行,可以nyy复制多行
p paste 粘贴

注意

  • vi 中的文本缓冲区和系统的剪贴板不是同一个
  • vi 中的文本缓冲区只有一个,进行剪切、删除 命令会替换现有缓冲区的内容
  • 从系统粘贴到vim, 需要 进入编辑模式,再右键粘贴,或使用命令 "*p
  • "*yy 从vim复制内容到系统剪贴板 (* + 为vim寄存器)

3.5 替换命令

命令 英文 功能
r replace 替换当前字符
R replace 替换当前行光标后的字符

3.6 缩排以及重复执行

命令 功能
» 向右移动增加缩进
« 向左移动减少缩进
. 重复上次命令
  • 可视模式下,缩排命令只需要一个><

3.7 查找字符串或者单词

常规查找

命令 功能
/str 查找 str
  • 查找到指定内容后,使用以下命令查找下一个位置:
    • n 查找下一个
    • N 查找上一个

单词快速匹配

命令 功能
* 向后 查找光标所在单词
# 向前 查找光标所在单词
  • 关闭高亮用 :noh

3.8 查找并替换

  • :%s/foo/bar/g 替换所有行的中的 ‘foo’ 变为 ‘bar’
  • :s/foo/bar/g 替换当前行(或选中区域)中的 ‘foo’ 变为 ‘bar’
  • :%s/foo/bar/gc 同第一个,不过替换前先确认
  1. y - yes 替换
  2. n - no 不替换
  3. a - all 替换所有
  4. q - quit 退出替换
  5. l - last 最后一个,并把光标移动到行首
  6. ^E 向下滚屏
  7. ^Y 向上滚屏

3.9 进入编辑模式的6个命令

命令 英文 功能 常用
i insert 在当前字符插入文本 常用
I insert 在行首插入文本 较常用
a append 在当前字符后添加文本  
A append 在行末添加文本 较常用
o   在后一行插入空行 常用
O   在前一行插入空行 常用

insert mode

3.10 分屏命令

末行命令扩展

末行命令 主要是针对文件进行操作:保存 退出 另存为 浏览文件

命令 英文 功能
:e . edit 打开内置文件浏览器,浏览当前目录下的文件
:n [filename] new 新建文件
:w [filename] write 另存为到其他文件

分屏命令

命令 英文 功能
:sp [filename] split 横向增加分屏
:vsp [filename] vertical split 纵向增加分屏

切换分屏窗口

分屏窗口用快捷键 ctrl + w 来激活, 之后接如下命令

命令 英文 功能
w window 切换到下一个窗口
r reverse 互换窗口
c close 关闭当前窗口,但不能关闭最后一个窗口
q quit 退出当前窗口,如果是最后一个,则关闭vim
o other 关闭其他窗口