乐于分享
好东西不私藏

vim编辑器从零到精通,运维必学的核心技能

vim编辑器从零到精通,运维必学的核心技能

点击蓝字

关注我们

真实案例

        周一早上,新来的小李接到紧急任务——修改生产服务器的 nginx 配置。他自信满满地 SSH 登录,输入 vi nginx.conf,结果…       敲 i 没反应,按方向键屏幕出现一堆 A B C D,一急之下乱按,把配置改得面目全非。最后只能灰溜溜地找主管重启服务器恢复配置。主管问:”你会用 vim 吗?”小李红着脸说:”我只用过记事本…”      这不是笑话,是无数新手的真实写照。vim 是 Linux 服务器的标配编辑器,不会用它,你连配置文件都改不明白。今天这篇文章,帮你从零搞定 vim,下次上服务器不再手抖。

先说结论(记住这句话):  🎯 vim 的核心是模式:不同模式下,同一个按键有不同含义  ⌨️ 普通模式移动光标,插入模式输入文字,命令模式执行操作  🔄 搞懂模式切换,vim 就入门了 80%

目 录

Part 1 先搞懂:vim 的四种模式

Part 2 必学命令:光标移动与跳转

Part 3 编辑操作:增删改查

Part 4 搜索与替换:文本处理神器

Part 5 多文件与分屏:高效编辑

Part 6 高级技巧:寄存器、宏、配置

Part 7 10个生产级实战场景

Part 8 避坑指南

一、先搞懂:vim 的四种模式

01

为什么 vim 这么难学?

       很多人第一次用 vim 会崩溃:打开文件后敲键盘,屏幕上出现奇怪字符,按退格键不删除,按方向键光标乱跳——因为你不知道 vim 是有模式的。

       普通编辑器(记事本、VS Code)只有一种模式:你按键就是输入文字。但 vim 不同,它有四种模式,每种模式下按键的含义完全不同:

普通模式

默认模式移动光标、复制粘贴按 ESC 进入

插入模式

输入文字像普通编辑器一样按 i/a/o 进入

可视模式

选中文本批量操作按 v/V/Ctrl+v 进入

命令模式

执行命令保存、退出、替换按 : 进入

02

模式切换速查

       刚打开 vim 时,你处于普通模式。这是最重要的模式,也是新手最容易忽略的。

当前模式

目标模式

按键

说明

普通模式

插入模式

i / a / o

i=光标前,a=光标后,o=新行

普通模式

可视模式

v / V / Ctrl+v

v=字符,V=行,Ctrl+v=块

普通模式

命令模式

i / a / o

: = 底行命令,/ = 向下搜索

插入模式

普通模式

Esc

退出插入,回到普通模式

可视模式

普通模式

Esc

取消选择,回到普通模式

命令模式

普通模式

Esc / Enter

执行命令后自动返回

打开 vim → 普通模式(默认)

    ↓ 按 i/a/o 

插入模式(输入文字) ──按 ESC──→ 普通模式   

          ↑ 按 ESC                                                 ↓ 按 :    

                       命令模式(:w 保存 :q 退出)

💡 记住一个原则:不知道自己在哪个模式时,狂按 ESC 回到普通模式。普通模式是 vim 的”安全区”。

03

退出 vim 的正确姿势

      vim最头疼的问题:怎么退出 vim?记住这几条命令:

#在普通模式下,按 : 进入命令模式,然后输入: 

:w        # 保存(write) 

:q        # 退出(quit,文件未修改时) 

:wq       # 保存并退出 

:q!       # 强制退出,不保存修改 

😡        # 等同于 :wq(仅当文件有修改时才保存) 

# 快捷键方式(普通模式下按两次) 

ZZ        # 保存并退出(等同于 :wq) 

ZQ        # 强制退出不保存(等同于 :q!)

💡 如果你改乱了配置文件想放弃修改,一定要用 :q! 或 ZQ 强制退出,别用 :wq 把错误配置保存了。

二、必学命令:光标移动与跳转

01

基础移动(普通模式下)

       vim 最强大的地方在于不用鼠标就能快速移动光标。熟练后,你的手不需要离开键盘主区。    

按键

作用

记忆技巧

h

左移一个字符

← 键在左边,h 在左边

j

下移一行

j 像个向下的钩子

k

上移一行

k 像个向上的箭头

l

右移一个字符

l 在右边,→ 键在右边

w

跳到下一个单词开头

word    

b

跳到上一个单词开头

back

e

跳到当前/下一个单词结尾

end

0

跳到行首

数字 0,行首

^

跳到行首第一个非空字符

正则里 ^ 也表示行首

$

跳到行尾

正则里 $ 也表示行尾

gg

跳到文件第一行

go to beginning

G

跳到文件最后一行

大 G,跳到末尾

:N

跳到第 N 行(如 :10 跳到第10行)

行号定位

Ngg / NG

跳到第 N 行(如 10gg 或 10G)

快捷跳转

#示例:在普通模式下 

h j k l           # 基本移动(习惯后比方向键快 10 倍) 

5j                 # 向下移动 5 行 

10G             # 跳转到第 10 行 

gg               # 跳到文件开头 

G                # 跳到文件末尾 

$                # 跳到行尾 

0                # 跳到行首 

w               # 下一个单词 

3w             # 向后跳 3 个单词

💡 不用刻意背,用多了自然就记住了。初期可以用方向键过渡,但建议尽快改用 h/j/k/l。

02

屏幕内快速跳转

按键

作用

H

跳到屏幕顶部(High)

M

跳到屏幕中间(Middle)

L

跳到屏幕底部(Low)

Ctrl+f

向下翻一页(forward)

Ctrl+b

向上翻一页(backward)    

Ctrl+d

向下翻半页(down)

Ctrl+u

向上翻半页(up)

zz

当前行居中显示

zt

当前行置顶显示

zb

当前行置底显示

03

行内精准跳转

#跳转到指定字符 

f + 字符      # 向后跳到该字符(光标落在字符上) 

F + 字符     # 向前跳到该字符 

t + 字符      # 向后跳到该字符前一个位置(till) 

T + 字符     # 向前跳到该字符后一个位置 

# 示例 

fh            # 跳到当前行下一个 ‘h’ 字符 

t,             # 跳到下一个逗号前 

;               # 重复上次 f/F/t/T 命令 

,               # 反向重复上次 f/F/t/T 命令

三、编辑操作:增删改查

01

进入插入模式的多种方式

       进入插入模式不只是按 i,vim 提供了多种方式适应不同场景:

按键

作用

场景

i

在光标前插入

最常用,光标位置插入

a

在光标后插入

追加内容时用

I

在行首插入

快速在行首添加内容

A

在行尾插入

快速在行尾追加

o

在下方新建一行插入

另起一行写代码

O

在上方新建一行插入

在当前行前插入新行

s

删除当前字符并插入

修改当前字符

S

删除当前行并插入

重写当前行

c + motion

删除指定范围并插入

cw 删一个词并插入

C

删除到行尾并插入

修改行尾内容

#示例 

i                # 光标前插入 

A               # 跳到行尾并插入(非常常用) 

o               # 下方新建一行并插入 

cw            # 删除当前单词并进入插入模式 

c$             # 删除到行尾并进入插入模式

💡 A 和 o 是最高频的两个插入命令,记住它们能覆盖 80% 的插入场景。

02

删除操作

按键

硬链接(无参数)

x

删除光标所在字符

X

删除光标前一个字符

dd

删除整行(并存入剪贴板)

D

删除到行尾(等同于 d$)

dw

删除一个单词

d$

删除到行尾

d0

删除到行首

dG

删除到文件末尾

dgg

删除到文件开头

Ndd

删除 N 行(如 5dd 删除 5 行)

d + motion

删除指定范围

#示例 

x                # 删除当前字符 

dd             # 删除当前行 

5dd           # 删除 5 行 

dw             # 删除一个单词 

d$              # 删除到行尾 

dG             # 删除到文件末尾 

d1G           # 删除到文件开头

03

复制、粘贴与撤销

按键

作用

yy

复制当前行

Nyy

复制 N 行(如 3yy 复制 3 行)    

yw

复制一个单词    

y$

复制到行尾    

p

粘贴到光标后

P

粘贴到光标前

u

撤销上一步操作

Ctrl+r

重做(撤销的撤销)

.

重复上一次操作

#示例:复制粘贴 

yy             # 复制当前行 

p               # 粘贴到下一行 

P               # 粘贴到上一行 

# 示例:撤销重做 

u                 # 撤销 

Ctrl+r         # 重做 

# 示例:重复操作 

dd            # 删除一行 

.               # 再删除一行(重复上次操作) 

5.             # 再删除 5 行

💡 .(点号)是 vim 的神级命令,可以重复上一次操作。比如你用 dw 删了一个单词,按 . 就能继续删下一个单词。

04

修改操作

按键

作用

r

替换单个字符

R

进入替换模式(连续替换)

~

切换大小写

J

合并当前行与下一行

>>

增加缩进

<<

减少缩进

==

自动缩进当前行

gg=G

自动缩进整个文件

#示例 

r + 字符      # 替换当前字符(如 ra 把当前字符改成 a) 

R                 # 进入替换模式,按 ESC 退出 

~                 # 切换当前字符大小写 

3~               # 切换 3 个字符的大小写

 J                # 合并当前行和下一行 

>>               # 当前行增加缩进 

<<               # 当前行减少缩进

四、搜索与替换:文本处理神器

01

搜索

#在普通模式下 

/ + 关键词     # 向下搜索 

? + 关键词     # 向上搜索 

n                    # 跳到下一个匹配 

N                    # 跳到上一个匹配 

*                    # 搜索光标下的单词(向下) 

#                    # 搜索光标下的单词(向上) 

 # 示例 

/error        # 向下搜索 “error” 

n                 # 下一个匹配 

N             # 上一个匹配  

*             # 搜索光标所在的单词

02

替换

    替换是 vim 的强项,可以在命令模式下用 :s(substitute)命令实现强大的文本替换:

#基本格式 

:s/旧内容/新内容/选项 

 # 常用替换命令 

:s/old/new/          # 替换当前行第一个 old 

:s/old/new/g         # 替换当前行所有 old 

:%s/old/new/g        # 替换整个文件所有 old 

:%s/old/new/gc    # 替换整个文件,每次确认(c=confirm) 

:5,10s/old/new/g    # 替换第 5-10 行的所有 old 

:.,$s/old/new/g      # 从当前行到文件末尾替换

:1,.s/old/new/g      # 从文件开头到当前行替换 

# 使用正则表达式 

:%s/^#//g            # 删除所有行首的 # 

:%s/\s\+$//g         # 删除所有行尾空格 

:%s/\r\n/\r/g       # 统一换行符为 Unix 格式(Windows 转 Unix) 

:%s/[0-9]\+/NUM/g    # 把所有数字替换成 NUM

选项

作用

g

全局替换(一行多个匹配都替换)

c

每次替换前确认

i

忽略大小写

I

区分大小写

n

只显示匹配数量,不实际替换

💡 替换命令是运维处理配置文件的利器,比如批量修改路径、IP 地址、端口号等。:%s/old/new/g 是最常用的万能模板。

03

高亮搜索与取消

#搜索后关键词会高亮显示 

:set hlsearch          # 开启搜索高亮 

:set nohlsearch     # 关闭搜索高亮 

:noh                         # 临时取消高亮(下次搜索会重新高亮)

五、多文件与分屏:高效编辑

01

多文件编辑

#打开多个文件 

vim file1.txt file2.txt file3.txt 

# 在 vim 内打开新文件 

:e file2.txt        # 打开 file2.txt 

:e! file2.txt       # 放弃当前修改,打开 file2.txt 

# 文件间切换 

:bn                 # 下一个文件(buffer next) 

:bp                 # 上一个文件(buffer previous) 

:ls                   # 列出所有打开的文件 

:b2                 # 切换到第 2 个文件 

:bd                 # 关闭当前文件(buffer delete)

02

分屏操作

#分屏打开 

:sp file.txt         # 水平分屏打开文件 

:vsp file.txt       # 垂直分屏打开文件 

# 在分屏间切换 

Ctrl+w h            # 切换到左边窗口 

Ctrl+w l            # 切换到右边窗口 

Ctrl+w j            # 切换到下边窗口 

Ctrl+w k            # 切换到上边窗口 

Ctrl+w w            # 循环切换窗口 

# 调整窗口大小 

Ctrl+w +            # 增大窗口高度 

Ctrl+w –            # 减小窗口高度 

Ctrl+w >            # 增大窗口宽度 

Ctrl+w <            # 减小窗口宽度 

Ctrl+w =            # 所有窗口等大 

# 关闭分屏 

Ctrl+w c            # 关闭当前窗口 

Ctrl+w o            # 只保留当前窗口

#命令行直接分屏打开

vim -o file1 file2      # 水平分屏打开两个文件

vim -O file1 file2      # 垂直分屏打开两个文件

六、高级技巧:寄存器、宏、配置

01

寄存器:vim 的剪贴板系统

      vim 有多个寄存器,可以存储多组内容。默认使用的是无名寄存器(用 yy 和 p 操作的)。

#查看所有寄存器内容 

:registers 

:reg 

# 使用指定寄存器 

“ayy            # 复制当前行到寄存器 a 

“ap             # 粘贴寄存器 a 的内容 

“add            # 删除当前行到寄存器 a 

# 系统剪贴板 

“+yy            # 复制到系统剪贴板 

“+p             # 从系统剪贴板粘贴

💡 如果你想在 vim 和系统其他程序之间复制粘贴,用 “+y 和 “+p(需要 vim 支持剪贴板功能)。

02

宏:录制重复操作

宏可以把一系列操作录制下来,然后重复执行,非常适合批量处理格式化文本。

#录制宏 

q + 寄存器名      # 开始录制(如 qa 录制到寄存器 a) 

… 操作 … 

q                 # 结束录制 

 # 执行宏 

@ + 寄存器名      # 执行一次(如 @a) 

@@                        # 执行上次宏 

N@ + 寄存器名     # 执行 N 次(如 10@a) 

# 示例:给每行开头加 # 

qa                 # 开始录制到寄存器 a 

I# [ESC]        # 行首插入 # 并回到普通模式 

j               # 移动到下一行 

q               # 结束录制 

10@a            # 执行 10 次

03

配置文件 .vimrc

       vim 的配置文件是 ~/.vimrc,可以在里面设置各种选项和快捷键:

#常用配置(写入 ~/.vimrc) 

set number              ” 显示行号 

set relativenumber      ” 相对行号 

set tabstop=4           ” Tab 宽度 4 空格 

set shiftwidth=4        ” 缩进宽度 4 空格 

set expandtab           ” Tab 转空格 

set autoindent          ” 自动缩进 

set cursorline          ” 高亮当前行 

set hlsearch            ” 搜索高亮 

set incsearch           ” 增量搜索 

set ignorecase          ” 搜索忽略大小写 

set smartcase           ” 智能大小写 

set wrap                ” 自动换行 

syntax on               ” 语法高亮 

# 快捷键映射 

map:w      ” Ctrl+s 保存 

imap:wa  ” 插入模式 Ctrl+s 保存

04

实用配置一键生成

#快速创建基础配置 

cat > ~/.vimrc << ‘EOF’ 

set nocompatible 

set backspace=indent,eol,start 

set number 

set tabstop=4 

set shiftwidth=4 

set expandtab 

set autoindent 

set hlsearch 

set incsearch 

syntax on 

EOF

七、10个生产级实战场景

场景1:修改服务器配置文件

#SSH 登录服务器后编辑 nginx 配置 

vim /etc/nginx/nginx.conf 

# 快速定位 

/nginx              # 搜索 “nginx” 

 n                   # 下一个匹配 

# 修改配置 

i                   # 进入插入模式 

修改内容… 

ESC                 # 回到普通模式 

 # 保存退出 

:wq                 # 保存并退出

场景2:批量注释多行

#方法1:可视模式 

Ctrl+v              # 进入块可视模式 

j 或 k              # 选择多行 

Shift+i             # 在选中行首插入 

#                   # 输入注释符号 

ESC                 # 应用于所有选中行 

 # 方法2:替换命令 

:5,10s/^/#/         # 第 5-10 行行首加 # 

:5,10s/^#//         # 第 5-10 行取消注释

场景3:删除文件中所有空行

#删除所有空行 

:g/^$/d             # 删除所有空行 

:g/^\s*$/d          # 删除所有空行(包括只有空白字符的行)

场景4:批量替换 IP 地址

#把所有 192.168.1.100 替换成 192.168.2.100

:%s/192\.168\.1\.100/192.168.2.100/g 

# 注意:点号需要转义(\.),否则会匹配任意字符

场景5:在行尾统一添加内容

#所有行尾加分号 

:%s/$/;/g 

# 所有行尾加 “,new”(如 CSV 追加列) 

:%s/$/,new/g

场景6:复制第 10-20 行到文件末尾

:10,20t$             # 复制第 10-20 行到末尾(t = copy):10,20m$             # 移动第 10-20 行到末尾(m = move)

场景7:对比两个文件差异

#垂直分屏对比 

vimdiff file1.conf file2.conf 

# 或在 vim 内 

:diffsplit file2.conf 

# 跳转差异 

]c                  # 下一个差异 

[c                  # 上一个差异 

:diffupdate         # 刷新差异

场景8:格式化代码

#格式化当前行 

== 

# 格式化整个文件 

gg=G 

# 格式化指定范围 

:5,20s/\s\+$//      # 删除第 5-20 行行尾空格

场景9:查看大文件定位问题

#打开大日志文件 

vim /var/log/app.log 

# 跳到文件末尾 

# 搜索错误 

/ERROR 

n                   # 下一个 ERROR 

# 或者打开时直接跳到末尾 

vim + /var/log/app.log   # + 号表示打开后跳到末尾

场景10:从命令行直接执行 vim 命令

#打开文件并跳到第 100 行 

vim +100 file.txt 

# 打开文件并搜索关键词 

vim +/error app.log 

# 打开文件并执行命令 

vim -c “:%s/old/new/g” -c “:wq” file.txt

八、避坑指南

坑1:打开文件后乱敲键盘,文件面目全非

       最容易犯的错误:在普通模式下乱按,产生一堆奇怪字符。解决方法:

#不知道自己在哪个模式? 

ESC                 # 先按 ESC 回到普通模式 

u                   # 撤销刚才的操作 

:q!                 # 如果改乱了,直接放弃保存退出

坑2:粘贴代码格式全乱了

      在 vim 里粘贴多行代码时,自动缩进会导致格式混乱:

#方法1:粘贴前关闭自动缩进 

:set paste          # 开启粘贴模式 

粘贴内容… 

:set nopaste        # 关闭粘贴模式 

# 方法2:用系统剪贴板 

“+p                 # 从系统剪贴板粘贴(需要 vim 支持剪贴板)

坑3:方向键在插入模式下出现乱码

    某些终端或 vim 配置下,插入模式按方向键会出现 A/B/C/D 字符:

#原因:终端兼容性问题 

# 解决:添加配置到 ~/.vimrc 

set nocompatible 

set backspace=indent,eol,start

坑4:sudo 权限不足无法保存

      忘记用 sudo 打开文件,改完了才发现没权限保存:

#不用退出重新打开,直接用这个技巧 

:w !sudo tee %      # 以 sudo 权限保存 

# 然后按 L 加载新内容,再 :q 退出

坑5:误按 Ctrl+z 让 vim 挂起

       Ctrl+z 会把 vim 放到后台挂起,不是退出:

#vim 被 suspend 了 

fg                  # 回到 vim(foreground) 

jobs                # 查看后台任务

坑6:编辑中文件时被其他人修改了

       vim 会提示文件已改变,同时显示警告:

#强制重新加载 

:e!                 # 放弃当前修改,重新加载文件 

# 或者用 view 只读打开 

view file.txt       # 等同于 vim -R

坑7:忘记自己当前在哪个模式

       vim 底部会显示当前模式(插入模式显示 — INSERT –)。如果不显示:

#添加到 ~/.vimrc 

set showmode        ” 显示当前模式 

set showcmd         ” 显示未完成的命令

总结

vim 的核心是模式切换:普通模式移动光标,插入模式输入文字,命令模式执行操作。搞懂这三种模式,vim 就入门了。

必须记住的 10 个命令:

插入  ESC回普通模式  :wq 保存退出  :q!  强制退出  

dd  删除行   yy 复制行   p 粘贴  u 撤销 /词 搜索

:%s/a/b/g 全局替换

万能组合技:

ESC 回普通模式 → gg 回开头 → /关键词 搜索 → i 插入 → ESC → :wq 保存

收藏本文,下次服务器上改配置时翻出来对照,用多了自然就熟练了。

觉得有用?点赞 + 收藏 + 转发

LO

VE

怦然心动–往期推荐 

文本操作命令

权限三剑客

Linux 命令与网络

Linux 入门与对比

VMware 从零到上网 — 搭环境必读

下方扫码 关注我们

极客代码库

微信号丨

jkdmk_007