1 Vim 打开文件

# 打开文件
vim file1              # Vim 打开一个文件
vim file1 file2 file3  # Vim 打开多个文件(显示屏仅显示第一个)
 
:ls  # 列出 vim 打开的所有文件
:b2  # 在显示屏显示第二个文件
:bn  # 切换到下一个文件
:bp  # 切换到上一个文件
 
vim -o3 file1 file2 file3   # 上下分屏显示 3 个文件(小的不喜欢)
vim -O3 file1 file2 file3   # 左右分屏显示 3 个文件(大的喜欢)
 
# 分屏操作

2 Vim 退出

:w           # 保存修改 + 不退出
:w!          # 强制保存修改 + 不退出
:w file      # 保存修改到 file
:q!          # 不保存 + 退出
:qa!         # 不保存 + 退出(所有文件)
:wq          # 保存 + 退出
:x           # 保存 + 退出
:e file      # 打开另一个文件
:e!          # 放弃修改,恢复到上次保存位置
:saveas file # 另存为 file
ZZ           # 保存 + 退出

3 Vim 输入模式

i,I,a,A,o,O,s,S,c+motion

i   # 光标  字符之前     插入
  # 光标  行首        插入
  # 光标  字符之后     插入
  # 光标  行尾        插入
 
  # 光标  上一行行首   插入
  # 光标  下一行行首   插入
 
  # 删除  光标  行      插入
  # 删除  光标  字符    插入
 
c+motion # 依据某个 motion 删除后进入插入模式
cw       # 删除从光标处开始到该单词结束的所有字符,然后插入需要录入的文本

4 Vim 命令模式

关键字查找

常用

操作操作描述
/word向下寻找 word 的字符串,字符串满足正则表达式
?word向上寻找 word 的字符串,字符串满足正则表达式
n英文按键,重复前一个搜寻的动作。如刚执行 /vbird 去向下搜寻,则继续向下搜寻
N英文按键,反向重复前一个搜寻的动作。如刚执行 /vbird 去向下搜寻,则向上搜寻
操作操作描述
:{范围}s/{目标}/{替换}/{替换标志}文本替换,作用范围分为当前行、全文、选区等等。
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2
:1,$s/word1/word2/g从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2
:%s/word1/word2/g从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2
:1,$s/word1/word2/gc寻找 word1 字符串,取代为 word2,取代前会 confirm。
:%s/word1/word2/gc寻找 word1 字符串,取代为 word2,取代前会 confirm。
:s/zempty/handsome/g将会把当前光标所在行的 zempty 替换成 handsome
:%s/zempty/handsome/g将会把全文中的 zempty 替换成 handsome
:’<,‘>s/zempty/handsome/g
:s/zempty/handsome在当前行,替换从光标位置开始,目标第一次出现的地方
:%s/zempty/handsome替换掉文件中所有行,目标第一次出现的地方

删除操作

命令含义
x, X在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd剪切游标所在的那一整行(常用),用 p/P 可以粘贴。
nddn 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切 20 行(常用),用 p/P 可以粘贴。
d+motion删除到 motion 对应的位置(如下所示)
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除游标所在处,到该行的最后一个字符
d0那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
:n1,n2dn1 和 n2 指的是起始行号和结束行号,d 是删除关键字

区分大小写

:set ic    # 不区分大小写
:set noic  # 区分大小写

行号相关

:set nu   # 该命令会显示行号。
:set nonu # 该命令会取消行号。
:n        # 定位到 n 行。

光标移动

常用的移动

操作操作描述
h 或 向左箭头键(←)光标向左移动一个字符
j 或 向下箭头键(↓)光标向下移动一个字符
k 或 向上箭头键(↑)光标向上移动一个字符
l 或向右箭头键(→)光标向右移动一个字符
0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]移动到这一行的最后面字符处(常用)
^ 移动到这一行的第一个非空字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个档案的最后一行(常用)
gg移动到这个档案的第一行(常用)
1G移动到这个档案的第一行
nG移动到这个档案的第 n 行(可配合 :set nu)
n<Enter>光标向下移动 n 行(常用)
n+motionmotion 重复 n 次

不常用的移动

[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
n<space>n 表示『数字』,按下数字后再按空格键,光标会向右移动这一行的 n 个字符