VIM使用指南
VIM是Linux/Unix系统中最强大的文本编辑器之一,掌握VIM的使用方法和快捷键操作可以大大提高文本编辑效率。
📋 目录
🎯 一、基础知识
1.1 VIM模式
VIM有多个编辑模式,每个模式有不同的功能:
正常模式(Normal Mode)
- 默认模式
- 用于移动光标、删除、复制、粘贴等操作
插入模式(Insert Mode)
- 用于输入文本
- 按
i进入
命令模式(Command Mode)
- 用于执行命令(保存、退出、查找替换等)
- 按
:进入
可视化模式(Visual Mode)
- 用于选择文本
- 按
v进入
1.2 模式切换
vim
i " 进入插入模式(在光标前)
a " 进入插入模式(在光标后)
o " 在当前行下方新建一行并进入插入模式
O " 在当前行上方新建一行并进入插入模式
Esc " 返回正常模式
Ctrl + [ " 返回正常模式(同Esc)
v " 进入可视化模式(字符选择)
V " 进入可视化模式(行选择)
Ctrl + v " 进入可视化模式(块选择)
: " 进入命令模式1.3 基本操作
bash
# 打开文件
vim filename # 打开文件
vim +10 filename # 打开文件并定位到第10行
vim +/pattern filename # 打开文件并搜索pattern
# 退出VIM
:q # 退出(如果文件未修改)
:wq # 保存并退出
:x # 保存并退出(同:wq)
:q! # 强制退出(不保存)
ZZ # 保存并退出(正常模式下)
ZQ # 强制退出(正常模式下)🎯 二、移动光标
2.1 基本移动
字符移动:
| 快捷键 | 功能 |
|---|---|
h | 向左移动一个字符 |
l | 向右移动一个字符 |
j | 向下移动一行 |
k | 向上移动一行 |
单词移动:
| 快捷键 | 功能 |
|---|---|
w | 移动到下一个单词开头 |
W | 移动到下一个单词开头(忽略标点) |
e | 移动到当前单词结尾 |
E | 移动到当前单词结尾(忽略标点) |
b | 移动到上一个单词开头 |
B | 移动到上一个单词开头(忽略标点) |
2.2 行内移动
行内移动:
| 快捷键 | 功能 |
|---|---|
0 | 移动到行首 |
^ | 移动到行首第一个非空字符 |
$ | 移动到行尾 |
g_ | 移动到行尾最后一个非空字符 |
f{char} | 向前查找字符char |
F{char} | 向后查找字符char |
t{char} | 向前查找字符char的前一个位置 |
T{char} | 向后查找字符char的后一个位置 |
; | 重复上一次f/F/t/T查找 |
, | 反向重复上一次f/F/t/T查找 |
2.3 屏幕移动
屏幕移动:
| 快捷键 | 功能 |
|---|---|
H | 移动到屏幕顶部 |
M | 移动到屏幕中间 |
L | 移动到屏幕底部 |
Ctrl + f | 向下翻一页 |
Ctrl + b | 向上翻一页 |
Ctrl + d | 向下翻半页 |
Ctrl + u | 向上翻半页 |
2.4 文件移动
文件内移动:
| 快捷键 | 功能 |
|---|---|
gg | 移动到文件开头 |
G | 移动到文件结尾 |
{number}G | 移动到第number行 |
:{number} | 移动到第number行(命令模式) |
% | 移动到匹配的括号 |
{ | 移动到上一个段落 |
} | 移动到下一个段落 |
🎯 三、编辑操作
3.1 删除操作
删除字符:
| 快捷键 | 功能 |
|---|---|
x | 删除光标处的字符 |
X | 删除光标前的字符 |
dl | 删除光标处的字符(同x) |
dh | 删除光标前的字符(同X) |
删除单词:
| 快捷键 | 功能 |
|---|---|
dw | 删除一个单词(到下一个单词开头) |
de | 删除到单词结尾 |
db | 删除到单词开头 |
daw | 删除整个单词(包括空格) |
diw | 删除整个单词(不包括空格) |
删除行:
| 快捷键 | 功能 |
|---|---|
dd | 删除整行 |
D | 删除从光标到行尾 |
d$ | 删除从光标到行尾(同D) |
d0 | 删除从光标到行首 |
d^ | 删除从光标到行首第一个非空字符 |
删除多行:
| 快捷键 | 功能 |
|---|---|
{number}dd | 删除number行 |
dG | 删除从光标到文件结尾 |
dgg | 删除从光标到文件开头 |
3.2 复制和粘贴
复制操作:
| 快捷键 | 功能 |
|---|---|
yy | 复制整行 |
Y | 复制整行(同yy) |
yw | 复制一个单词 |
y$ | 复制从光标到行尾 |
y0 | 复制从光标到行首 |
{number}yy | 复制number行 |
yG | 复制从光标到文件结尾 |
ygg | 复制从光标到文件开头 |
粘贴操作:
| 快捷键 | 功能 |
|---|---|
p | 在光标后粘贴 |
P | 在光标前粘贴 |
]p | 粘贴并自动缩进 |
3.3 撤销和重做
撤销操作:
| 快捷键 | 功能 |
|---|---|
u | 撤销上一次操作 |
U | 撤销当前行的所有修改 |
Ctrl + r | 重做(撤销撤销) |
3.4 替换操作
替换字符:
| 快捷键 | 功能 |
|---|---|
r{char} | 替换光标处的字符 |
R | 进入替换模式(连续替换) |
s | 删除光标处的字符并进入插入模式 |
S | 删除整行并进入插入模式 |
cw | 删除到单词结尾并进入插入模式 |
cb | 删除到单词开头并进入插入模式 |
c$ | 删除到行尾并进入插入模式 |
c0 | 删除到行首并进入插入模式 |
cc | 删除整行并进入插入模式 |
🎯 四、查找和替换
4.1 查找
正常模式查找:
| 快捷键 | 功能 |
|---|---|
/{pattern} | 向下搜索pattern |
?{pattern} | 向上搜索pattern |
n | 继续下一个搜索结果 |
N | 继续上一个搜索结果 |
* | 搜索光标下的单词(向下) |
# | 搜索光标下的单词(向上) |
查找选项:
vim
:set ignorecase " 忽略大小写
:set smartcase " 智能大小写(如果搜索包含大写,则区分大小写)
:set hlsearch " 高亮搜索结果
:set incsearch " 增量搜索(输入时实时显示结果)4.2 替换
基本替换:
vim
:s/old/new/ " 替换当前行第一个old为new
:s/old/new/g " 替换当前行所有old为new
:%s/old/new/g " 替换整个文件所有old为new
:%s/old/new/gc " 替换整个文件(每次替换前确认)
" 范围替换
:5,10s/old/new/g " 替换第5到10行
:.,$s/old/new/g " 替换从当前行到文件结尾
:'<,'>s/old/new/g " 替换选中的文本高级替换:
vim
:%s/\<old\>/new/g " 只替换完整单词old(使用\<和\>)
:%s/old/new/gi " 忽略大小写
:%s/\(old\)/new\1/g " 使用捕获组🎯 五、可视化模式
5.1 进入可视化模式
| 快捷键 | 功能 |
|---|---|
v | 字符选择模式 |
V | 行选择模式 |
Ctrl + v | 块选择模式 |
5.2 可视化模式操作
选择文本:
| 快捷键 | 功能 |
|---|---|
h/j/k/l | 移动光标扩展选择 |
w/e/b | 按单词移动扩展选择 |
o | 切换选择端点 |
编辑选中的文本:
| 快捷键 | 功能 |
|---|---|
d | 删除选中文本 |
y | 复制选中文本 |
c | 删除选中文本并进入插入模式 |
> | 向右缩进 |
< | 向左缩进 |
= | 自动缩进 |
块选择操作(Ctrl + v):
vim
# 块选择常用操作
选中多行后:
I{text}Esc # 在每行开头插入text
A{text}Esc # 在每行结尾插入text
d # 删除选中的块
c # 删除选中块并进入插入模式🎯 六、多文件操作
6.1 打开多个文件
bash
# 在终端中打开多个文件
vim file1 file2 file3
# 在VIM中打开新文件
:e filename " 打开新文件(会关闭当前文件)
:sp filename " 水平分割打开新文件
:vsp filename " 垂直分割打开新文件6.2 文件间切换
| 快捷键 | 功能 |
|---|---|
:bn | 切换到下一个缓冲区 |
:bp | 切换到上一个缓冲区 |
:bd | 关闭当前缓冲区 |
:ls | 列出所有缓冲区 |
:b{number} | 切换到指定缓冲区 |
Ctrl + w w | 在窗口间切换 |
Ctrl + w h/j/k/l | 切换到指定方向的窗口 |
Ctrl + w q | 关闭当前窗口 |
Ctrl + w v | 垂直分割窗口 |
Ctrl + w s | 水平分割窗口 |
🎯 七、高级技巧
7.1 标记和跳转
标记:
| 快捷键 | 功能 |
|---|---|
m{a-z} | 设置标记(a-z为小写标记,局部) |
m{A-Z} | 设置标记(A-Z为大写标记,全局) |
`{mark}` | 跳转到标记位置 |
'{mark} | 跳转到标记所在行首 |
`. | 跳转到上次编辑的位置 |
`" | 跳转到上次离开文件的位置 |
'' | 跳转到上次跳转的位置 |
7.2 重复操作
重复命令:
| 快捷键 | 功能 |
|---|---|
. | 重复上一次编辑操作 |
@: | 重复上一次命令模式命令 |
@{register} | 执行指定寄存器的内容 |
7.3 宏操作
录制宏:
vim
qa " 开始录制宏到寄存器a
... " 执行一系列操作
q " 停止录制
@a " 执行宏a
@@ " 重复执行上一个宏
{number}@a " 执行宏a number次7.4 寄存器
寄存器类型:
vim
"0 " 最近复制的内容
"1-"9 " 最近删除/更改的内容
"+ " 系统剪贴板(复制)
"* " 系统剪贴板(鼠标选择)
": " 最近执行的命令
"/ " 最近搜索的文本
"_ " 黑洞寄存器(删除但不保存)使用寄存器:
vim
"{register}y " 复制到寄存器
"{register}p " 从寄存器粘贴
:reg " 查看所有寄存器内容7.5 文本对象
常用文本对象:
| 快捷键 | 功能 |
|---|---|
iw | 当前单词(不包括空格) |
aw | 当前单词(包括空格) |
i" | 双引号内的文本 |
a" | 双引号及其内的文本 |
i' | 单引号内的文本 |
a' | 单引号及其内的文本 |
i) / ib | 括号内的文本 |
a) / ab | 括号及其内的文本 |
i} / iB | 花括号内的文本 |
a} / aB | 花括号及其内的文本 |
i] | 方括号内的文本 |
a] | 方括号及其内的文本 |
it | HTML标签内的文本 |
at | HTML标签及其内的文本 |
组合操作:
vim
diw " 删除当前单词
ci" " 修改双引号内的文本
yi) " 复制括号内的文本
da} " 删除花括号及其内的文本🎯 八、配置文件
8.1 基本配置
创建配置文件:
bash
# VIM配置文件位置
~/.vimrc # VIM配置文件
~/.vim/vimrc # 另一种配置位置常用配置选项:
vim
" 基础设置
set number " 显示行号
set relativenumber " 显示相对行号
set cursorline " 高亮当前行
set showcmd " 显示命令
set wildmenu " 命令补全菜单
set showmatch " 显示匹配的括号
" 搜索设置
set ignorecase " 忽略大小写
set smartcase " 智能大小写
set hlsearch " 高亮搜索结果
set incsearch " 增量搜索
" 缩进设置
set autoindent " 自动缩进
set smartindent " 智能缩进
set tabstop=4 " Tab键宽度
set shiftwidth=4 " 自动缩进宽度
set expandtab " 使用空格代替Tab
" 其他设置
set encoding=utf-8 " 编码
set fileencoding=utf-8 " 文件编码
set mouse=a " 启用鼠标
set scrolloff=5 " 光标上下保留行数
set wrap " 自动换行
set linebreak " 在单词边界换行8.2 键映射
自定义快捷键:
vim
" 映射Leader键(默认是\)
let mapleader = ","
" 常用映射
nnoremap <leader>w :w<CR> " 保存文件
nnoremap <leader>q :q<CR> " 退出
nnoremap <leader>s :%s/ " 快速搜索替换
nnoremap <C-h> <C-w>h " Ctrl+h切换到左窗口
nnoremap <C-j> <C-w>j " Ctrl+j切换到下窗口
nnoremap <C-k> <C-w>k " Ctrl+k切换到上窗口
nnoremap <C-l> <C-w>l " Ctrl+l切换到右窗口
" 取消高亮
nnoremap <leader>/ :nohlsearch<CR>📖 学习资源
在线教程
- VIM Adventures - 游戏化学习VIM
- Open VIM - 交互式VIM教程
- VIM Cheat Sheet - VIM速查表
书籍推荐
- 《实用Vim》 - Drew Neil
- 《Vim实用技巧》 - Drew Neil
练习网站
✅ 学习检查清单
- [ ] 已理解VIM的四种模式
- [ ] 已掌握光标移动操作
- [ ] 已掌握编辑操作(删除、复制、粘贴)
- [ ] 已掌握查找和替换
- [ ] 已掌握可视化模式
- [ ] 已掌握多文件操作
- [ ] 已掌握宏和寄存器
- [ ] 已理解文本对象
- [ ] 已配置VIM环境