Vim 编辑器入门指南
# Vim 编辑器入门指南
Vim 是 Linux 上使用最广泛的文本编辑器,具有程序编辑能力,可以主动以字体颜色辨别语法正确性,方便程序设计。
# 📖 快速开始
# 什么是 Vim?
Vim (Vi IMproved) 是一个高度可配置的文本编辑器,以高效的文本编辑著称。它是 Unix 系统中 Vi 编辑器的改进版本。
# 学习路径
- 新手入门:使用内置教程
vimtutor学习基础操作(强烈推荐) - 配置优化:通过
~/.vimrc文件自定义配置 - 插件扩展:使用插件管理器安装插件增强功能
# vimtutor - 交互式教程
vimtutor 是 Vim 内置的交互式教程,最适合新手学习。
使用方法:
# 直接在终端运行
vimtutor
# 或指定语言
vimtutor zh # 中文教程
1
2
3
4
5
2
3
4
5
学习内容:
- 移动光标
- 插入和删除文本
- 保存和退出文件
- 搜索和替换
- 基本编辑技巧
学习建议
vimtutor 教程需要 30-60 分钟完成,建议一次性完成并反复练习。
# 🎯 Vim 模式
Vim 有多种模式,这是它区别于其他编辑器的核心特性:
| 模式 | 说明 | 进入方式 | 退出方式 |
|---|---|---|---|
| 普通模式 | 默认模式,用于导航和执行命令 | 启动 Vim 时 | - |
| 插入模式 | 编辑文本 | i, a, o 等 | Esc |
| 可视模式 | 选择文本 | v, V, Ctrl+v | Esc |
| 命令行模式 | 执行命令 | :, /, ? | Enter 或 Esc |
# 1. 普通模式(Normal Mode)
这是 Vim 的默认模式,用于导航和执行命令。
# 1.1 光标移动
基础移动:
| 命令 | 说明 |
|---|---|
h | 左移一个字符 |
j | 下移一行 |
k | 上移一行 |
l | 右移一个字符 |
行内移动:
| 命令 | 说明 |
|---|---|
0 | 移动到行首 |
^ | 移动到本行第一个非空字符 |
$ | 移动到行尾 |
g0 | 移动到屏幕行行首 |
g^ | 移动到屏幕行第一个非空字符 |
g$ | 移动到屏幕行行尾 |
单词移动:
| 命令 | 说明 |
|---|---|
w | 移动到下一个单词开头 |
W | 移动到下一个单词开头(忽略标点) |
e | 移动到下一个单词末尾 |
E | 移动到下一个单词末尾(忽略标点) |
b | 移动到上一个单词开头 |
B | 移动到上一个单词开头(忽略标点) |
字符查找:
| 命令 | 说明 |
|---|---|
f{char} | 移动到本行下一个 {char} 字符处 |
F{char} | 移动到本行上一个 {char} 字符处 |
nf{char} | 移动到本行第 n 个 {char} 字符处 |
; | 重复上次 f/F 查找 |
, | 反向重复上次 f/F 查找 |
行跳转:
| 命令 | 说明 |
|---|---|
gg | 跳转到文件第一行 |
G | 跳转到文件最后一行 |
{n}G | 跳转到第 n 行 |
{n}gg | 跳转到第 n 行 |
:n | 跳转到第 n 行 |
屏幕移动:
| 命令 | 说明 |
|---|---|
H | 跳转到屏幕顶部 |
M | 跳转到屏幕中间 |
L | 跳转到屏幕底部 |
zt | 当前行移到屏幕顶部 |
zz | 当前行移到屏幕中间 |
zb | 当前行移到屏幕底部 |
Ctrl+f | 向下翻页 |
Ctrl+b | 向上翻页 |
其他移动:
| 命令 | 说明 |
|---|---|
% | 匹配括号移动 (), {}, [] |
* | 查找光标所在单词的下一个 |
# | 查找光标所在单词的上一个 |
gj | 移动到段落内下一行 |
gk | 移动到段落内上一行 |
+ / Enter | 移到下一行第一个非空字符 |
- | 移到上一行第一个非空字符 |
# 1.2 删除操作
| 命令 | 说明 |
|---|---|
x | 删除光标后一个字符 |
dw | 删除一个单词 |
d{n}w | 删除 n 个单词 |
dd | 删除整行 |
{n}dd | 删除 n 行 |
d$ | 删除到行尾 |
d0 | 删除到行首 |
df{char} | 删除到下一个 {char} 字符 |
dG | 删除到文件末尾 |
dH | 删除到屏幕顶部 |
:1,2d | 删除第 1-2 行 |
:5,$d | 删除第 5 行到文件末尾 |
:%d | 删除文件所有内容 |
# 1.3 复制粘贴
复制(yank):
| 命令 | 说明 |
|---|---|
yw | 复制一个单词 |
yy | 复制整行 |
y$ | 复制到行尾 |
{n}yy | 复制 n 行 |
:31,100y | 复制第 31-100 行 |
粘贴(paste):
| 命令 | 说明 |
|---|---|
p | 在光标后粘贴 |
P | 在光标前粘贴 |
复制多行示例:
" 方法 1:使用行号
" 复制第 1-100 行
gg " 跳到第一行
V " 进入可视行模式
100G " 选择到第 100 行
y " 复制
p " 粘贴
" 方法 2:使用命令
:1,100y " 复制第 1-100 行到寄存器
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 1.4 其他操作
| 命令 | 说明 |
|---|---|
u | 撤销 |
Ctrl+r | 恢复撤销 |
. | 重复上次操作 |
cw | 删除单词并进入插入模式 |
# 2. 插入模式(Insert Mode)
从普通模式进入插入模式的方式:
| 命令 | 说明 |
|---|---|
i | 在光标前插入 |
I | 在行首插入 |
a | 在光标后插入 |
A | 在行尾插入 |
o | 在下一行插入 |
O | 在上一行插入 |
s | 删除光标字符并插入 |
S | 删除整行并插入 |
常用组合
i/a:最常用,分别在光标前/后插入o/O:快速创建新行A:快速跳到行尾插入
# 3. 可视模式(Visual Mode)
用于选择文本块:
| 命令 | 说明 |
|---|---|
v | 字符可视模式 |
V | 行可视模式 |
Ctrl+v | 块可视模式 |
可视模式操作:
" 选择并操作
V " 进入行可视模式
5j " 向下选择 5 行
y " 复制选中内容
d " 删除选中内容
> " 向右缩进
< " 向左缩进
1
2
3
4
5
6
7
2
3
4
5
6
7
# 4. 命令行模式(Command Mode)
按 : 进入命令行模式。
# 4.1 文件操作
| 命令 | 说明 |
|---|---|
:w | 保存 |
:w! | 强制保存 |
:w {file} | 另存为 |
:saveas {file} | 另存为 |
:q | 退出 |
:q! | 强制退出(不保存) |
:wq | 保存并退出 |
:x | 保存并退出 |
:qa! | 退出所有文件(不保存) |
:e {file} | 打开文件 |
:e! | 放弃修改,重新加载 |
# 4.2 搜索
基本搜索:
| 命令 | 说明 |
|---|---|
/{pattern} | 向下搜索 |
?{pattern} | 向上搜索 |
n | 下一个匹配 |
N | 上一个匹配 |
/\<word\> | 精确匹配单词 |
* | 搜索光标所在单词 |
# | 反向搜索光标所在单词 |
搜索技巧:
" 统计匹配次数
:%s/\<word\>/&/gn
" 统计单词数
:%s/\a\+/&/gn
" 统计非空字符数
:%s/\S\+/&/gn
" 查找配对括号
%
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 4.3 替换
基本语法:
:[range]s/{pattern}/{replacement}/{flags}
1
常用替换:
| 命令 | 说明 |
|---|---|
:s/old/new/ | 替换当前行第一个 |
:s/old/new/g | 替换当前行所有 |
:%s/old/new/ | 替换每行第一个 |
:%s/old/new/g | 替换所有 |
:%s/old/new/gi | 替换所有(忽略大小写) |
:%s/old/new/gc | 替换所有(需确认) |
:#,#s/old/new/g | 替换指定行范围 |
:.,+2s/foo/bar/g | 当前行及接下来 2 行 |
实用示例:
" 删除行首空白
:%s/^\s*//g
" 删除行尾空白
:%s/\s\+$//g
" 删除空行
:g/^$/d
" 每行行尾添加分号
:%s/$/;/g
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 4.4 其他命令
显示设置:
| 命令 | 说明 |
|---|---|
:set nu | 显示行号 |
:set nonu | 隐藏行号 |
:set nu! | 切换行号显示 |
:set ic | 忽略大小写 |
:set noic | 区分大小写 |
Ctrl+G | 显示文件信息 |
执行外部命令:
:!{command} " 执行外部命令
:!ls " 列出文件
:!python % " 执行当前 Python 文件
1
2
3
2
3
# 5. 多文件编辑
# 5.1 分割窗口
| 命令 | 说明 |
|---|---|
:sp {file} | 水平分割打开文件 |
:vsp {file} | 垂直分割打开文件 |
Ctrl+w Ctrl+w | 切换窗口 |
Ctrl+w h/j/k/l | 切换到指定方向窗口 |
Ctrl+w = | 窗口等宽等高 |
Ctrl+w + | 增加窗口高度 |
Ctrl+w - | 减少窗口高度 |
:q | 关闭当前窗口 |
# 5.2 标签页
| 命令 | 说明 |
|---|---|
:tabe {file} | 新标签页打开文件 |
:tabn | 下一个标签页 |
:tabp | 上一个标签页 |
:tabc | 关闭当前标签页 |
gt | 下一个标签页 |
gT | 上一个标签页 |
# 5.3 缓冲区
| 命令 | 说明 |
|---|---|
:e {file} | 打开文件到缓冲区 |
:bnext / :bn | 下一个缓冲区 |
:bprev / :bp | 上一个缓冲区 |
:bd | 关闭当前缓冲区 |
:buffers / :ls | 查看所有缓冲区 |
# 6. 高级搜索(vimgrep)
vimgrep 用于在多个文件中搜索,结果保存在 Quickfix 列表中。
# 6.1 基本用法
语法:
:vimgrep /{pattern}/ {files}
1
示例:
" 在当前文件搜索
:vimgrep /TODO/ %
" 在所有 .txt 文件中搜索
:vimgrep /error/ **/*.txt
" 在当前目录及子目录的所有 .py 文件中搜索
:vimgrep /function/ **/*.py
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 6.2 Quickfix 操作
| 命令 | 说明 |
|---|---|
:copen | 打开 Quickfix 窗口 |
:cclose | 关闭 Quickfix 窗口 |
:cn / :cnext | 下一个匹配 |
:cp / :cprev | 上一个匹配 |
:cc | 跳到指定匹配 |
:cfilter {pattern} | 过滤 Quickfix 列表 |
# 6.3 vimgrepadd
vimgrepadd 将搜索结果追加到 Quickfix 列表,而不是替换。
" 第一次搜索
:vimgrep /error/ *.log
" 追加搜索结果
:vimgrepadd /warning/ *.log
" 查看所有结果
:copen
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
对比:
| 命令 | 行为 |
|---|---|
vimgrep | 替换 Quickfix 列表 |
vimgrepadd | 追加到 Quickfix 列表 |
# 6.4 正则表达式技巧
" OR 搜索(注意 | 需要转义)
:vimgrep 'aaaa\|bbbb' %
" 复杂模式
:vimgrep '\[17474.*\(Report\.PMMReport\]\|PlayTimeHelper\]\)' *.log
" 搜索连续两行包含相同内容
:vimgrep '.*onReallyStart\n.*onReallyStart' *.log
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 7. 插件管理
# 7.1 vim-plug(推荐)
安装 vim-plug:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
1
2
2
配置 ~/.vimrc:
" 插件列表开始
call plug#begin('~/.vim/plugged')
" 插件示例
Plug 'preservim/nerdtree' " 文件树
Plug 'yssl/QFEnter.vim' " Quickfix 增强
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim' " 模糊查找
" 插件列表结束
call plug#end()
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
插件管理命令:
| 命令 | 说明 |
|---|---|
:PlugInstall | 安装插件 |
:PlugUpdate | 更新插件 |
:PlugClean | 清理未使用插件 |
:PlugStatus | 查看插件状态 |
# 7.2 推荐插件
QFEnter - Quickfix 增强:
" 在 .vimrc 中添加
Plug 'yssl/QFEnter.vim'
" 运行安装
:PlugInstall
" 使用
:QFEnter " 打开新 Quickfix 窗口
:QFEnter <number> " 切换 Quickfix 窗口
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 8. 配置文件(.vimrc)
创建或编辑 ~/.vimrc 文件来自定义 Vim:
" 基础设置
set number " 显示行号
set relativenumber " 显示相对行号
set cursorline " 高亮当前行
set showcmd " 显示命令
set showmatch " 显示括号匹配
" 缩进设置
set tabstop=4 " Tab 宽度
set shiftwidth=4 " 缩进宽度
set expandtab " Tab 转空格
set autoindent " 自动缩进
set smartindent " 智能缩进
" 搜索设置
set ignorecase " 搜索忽略大小写
set smartcase " 智能大小写搜索
set hlsearch " 高亮搜索结果
set incsearch " 增量搜索
" 外观设置
syntax on " 语法高亮
set background=dark " 深色背景
colorscheme desert " 配色方案
" 其他设置
set mouse=a " 启用鼠标
set encoding=utf-8 " 编码
set nobackup " 不创建备份文件
set noswapfile " 不创建交换文件
" 快捷键映射
" 快速保存
nnoremap <C-s> :w<CR>
" 快速退出
nnoremap <C-q> :q<CR>
" 清除搜索高亮
nnoremap <Esc><Esc> :noh<CR>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
配置文件参考:vimrc configuration guide (opens new window)
# 9. 实用技巧
# 9.1 复制问题
问题:启用行号后,在可视模式复制可能包含空格。
解决方法:
" 方法 1:临时关闭行号
:set nu! " 关闭行号
" 复制后再开启
:set nu!
" 方法 2:使用寄存器复制
" 选择文本后直接 y 复制到寄存器
" 然后 :e file 打开其他文件
" 使用 p 粘贴
" 方法 3:使用系统剪贴板
set clipboard=unnamedplus " 在 .vimrc 中设置
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 9.2 从标准输入读取
# 通过管道将命令输出用 Vim 打开
command | vim -
# 示例
cat file.txt | vim -
ls -la | vim -
1
2
3
4
5
6
2
3
4
5
6
# 9.3 快速帮助
:help quickfix " Quickfix 帮助
:help pattern " 正则表达式帮助
:help usr_toc " 用户手册目录
:h {keyword} " 查询关键字帮助
1
2
3
4
2
3
4
# 10. 常用场景速查
# 场景 1:快速编辑文件
vim file.txt " 打开文件
i " 进入插入模式
# 编辑内容
Esc " 返回普通模式
:wq " 保存并退出
1
2
3
4
5
2
3
4
5
# 场景 2:批量替换
vim file.txt
:%s/old/new/gc " 全局替换(需确认)
# 按 y 确认,n 跳过,a 全部替换
:wq
1
2
3
4
2
3
4
# 场景 3:多文件搜索
vim
:vimgrep /TODO/ **/*.py " 搜索所有 Python 文件
:copen " 打开结果窗口
# Enter 跳转到匹配位置
:cn " 下一个结果
1
2
3
4
5
2
3
4
5
# 场景 4:对比文件
# 使用 vimdiff
vimdiff file1.txt file2.txt
1
2
2
# 场景 5:批量编辑
vim *.txt " 打开所有 txt 文件
:%s/old/new/g " 替换当前文件
:wnext " 保存并打开下一个
# 重复上述操作
1
2
3
4
2
3
4
# 📚 学习资源
# 官方文档
# 教程资源
- Vim Search in File (opens new window)
- 知乎 - 精通 Vim (opens new window)
- Vim Pattern 文档 (opens new window)
# 插件资源
- vim-plug 官方 (opens new window)
- vim-plug 中文教程 (opens new window)
- Vim 插件分享 (opens new window)
- Quickfix 和 Location List (opens new window)
# 💡 学习建议
- 从 vimtutor 开始:这是最好的入门教程
- 每天练习:Vim 需要肌肉记忆,每天使用才能熟练
- 逐步学习:不要一次学太多,先掌握基础移动和编辑
- 使用插件:合适的插件能大幅提升效率
- 自定义配置:根据个人习惯配置 .vimrc
- 查阅帮助:遇到问题使用
:help命令
# 🎯 快捷键速查表
# 必记快捷键
| 功能 | 命令 |
|---|---|
| 进入插入模式 | i |
| 退出插入模式 | Esc |
| 保存 | :w |
| 退出 | :q |
| 保存并退出 | :wq 或 :x |
| 强制退出 | :q! |
| 撤销 | u |
| 重做 | Ctrl+r |
| 复制行 | yy |
| 粘贴 | p |
| 删除行 | dd |
| 搜索 | /pattern |
| 替换 | :%s/old/new/g |
开始你的 Vim 之旅吧!🚀
上次更新: 2025/10/19, 17:40:23