Skip to content

VIM使用指南 ​

VIM是Linux/Unix系统中最强大的文本编辑器之一,掌握VIM的使用方法和快捷键操作可以大大提高文本编辑效率。

📋 目录 ​

🎯 一、基础知识 ​

1.1 VIM模式 ​

VIM有多个编辑模式,每个模式有不同的功能:

  1. 正常模式(Normal Mode)

    • 默认模式
    • 用于移动光标、删除、复制、粘贴等操作
  2. 插入模式(Insert Mode)

    • 用于输入文本
    • 按 i 进入
  3. 命令模式(Command Mode)

    • 用于执行命令(保存、退出、查找替换等)
    • 按 : 进入
  4. 可视化模式(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]方括号及其内的文本
itHTML标签内的文本
atHTML标签及其内的文本

组合操作:

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》 - Drew Neil
  • 《Vim实用技巧》 - Drew Neil

练习网站 ​

✅ 学习检查清单 ​

  • [ ] 已理解VIM的四种模式
  • [ ] 已掌握光标移动操作
  • [ ] 已掌握编辑操作(删除、复制、粘贴)
  • [ ] 已掌握查找和替换
  • [ ] 已掌握可视化模式
  • [ ] 已掌握多文件操作
  • [ ] 已掌握宏和寄存器
  • [ ] 已理解文本对象
  • [ ] 已配置VIM环境

上一主题:Shell使用指南
返回目录:工具使用