Vim 完整指南:从入门到高效编辑

Vim 完整指南:从入门到高效编辑

    • [1. 为什么是 Vim](#1. 为什么是 Vim)
    • [2. 安装与启动](#2. 安装与启动)
    • [3. Vim 的模式](#3. Vim 的模式)
    • [4. 基础操作:移动、编辑、保存](#4. 基础操作:移动、编辑、保存)
      • [4.1 光标移动(普通模式)](#4.1 光标移动(普通模式))
      • [4.2 保存与退出](#4.2 保存与退出)
      • [4.3 删除、修改、替换](#4.3 删除、修改、替换)
      • [4.4 复制粘贴](#4.4 复制粘贴)
    • [5. 复制、粘贴、删除与撤销](#5. 复制、粘贴、删除与撤销)
    • [6. 搜索与替换](#6. 搜索与替换)
    • [7. 可视模式](#7. 可视模式)
    • [8. 多文件、多窗口与标签页](#8. 多文件、多窗口与标签页)
    • [9. 寄存器](#9. 寄存器)
    • [10. 宏:录制与回放](#10. 宏:录制与回放)
    • [11. 配置文件 .vimrc](#11. 配置文件 .vimrc)
    • [12. 插件管理](#12. 插件管理)
    • [13. 高频插件推荐](#13. 高频插件推荐)
    • [14. 高级技巧](#14. 高级技巧)
      • [14.1 命令行窗口](#14.1 命令行窗口)
      • [14.2 全局命令 `:g`](#14.2 全局命令 :g)
      • [14.3 标记(mark)](#14.3 标记(mark))
      • [14.4 折叠](#14.4 折叠)
      • [14.5 会话与视图](#14.5 会话与视图)
      • [14.6 高效组合速查](#14.6 高效组合速查)
      • [14.7 文本对象速查](#14.7 文本对象速查)
    • [15. 常见问题](#15. 常见问题)
    • [16. 总结](#16. 总结)
  • 一篇覆盖 Vim 核心功能、配置与实战技巧的系统性指南,适合从零开始到进阶提效的开发者。
  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入我的个人主页查看

1. 为什么是 Vim

Vim 是一个模式化的文本编辑器,核心优势在于:

  • 纯键盘操作,手不离主键区,编辑效率高
  • 组合式命令 ,用少量命令拼出强大操作(d + w = 删除一个单词)
  • 跨平台,Linux/macOS 自带,Windows 可装 gVim
  • 可配置、可扩展,插件生态丰富
  • 远程编辑友好,SSH 登录服务器后直接可用

缺点也明显:学习曲线陡峭。但只要掌握 20% 的命令,就能覆盖 80% 的日常编辑。

建议:先用 vimtutor(终端输入 vimtutor)花 30 分钟过一遍基础,再回来看本文。


2. 安装与启动

安装

bash 复制代码
# Ubuntu / Debian
sudo apt install vim

# CentOS / RHEL
sudo yum install vim

# macOS(自带 vim,但建议装新版)
brew install vim

# 检查版本与特性
vim --version

重点看 --version 输出里是否有 +clipboard、+python3、+lua 等特性。

启动方式

bash 复制代码
vim                 # 打开空白缓冲区
vim file.txt        # 打开文件
vim +10 file.txt    # 打开并跳到第 10 行
vim +/pattern file  # 打开并定位到第一个匹配
vim file1 file2     # 一次打开多个文件
vim -R file.txt     # 只读模式打开

3. Vim 的模式

Vim 的核心是模式切换。最常见的四种模式:

模式 进入方式 用途
普通模式(Normal) Esc 移动、删除、复制等命令
插入模式(Insert) i a o 等 输入文字
可视模式(Visual) v V Ctrl+v 选中文本
命令行模式(Command) : / ? 执行命令、搜索

另外还有 替换模式 (R)和 Ex 模式 (Q,较少用)。

切换示意:

复制代码
普通模式 ──i/a/o──> 插入模式
   ↑                    │
   └──────Esc───────────┘
   │
   ├──v/V/Ctrl+v──> 可视模式
   └──:/?────────> 命令行模式

新手最容易犯的错:在插入模式里狂按方向键和退格。记住------按 Esc 回到普通模式,再用命令操作。

常用进入插入模式的命令

命令 作用
i 光标前插入
a 光标后插入
I 行首插入
A 行尾插入
o 下方新开一行
O 上方新开一行
cc / S 删除当前行并插入
cw 修改一个单词

4. 基础操作:移动、编辑、保存

4.1 光标移动(普通模式)

命令 作用
h j k l 左、下、上、右
w / W 下一个单词开头(W 忽略标点)
b / B 上一个单词开头
e / E 当前/下一个单词结尾
0 行首
^ 行首第一个非空字符
$ 行尾
gg 文件第一行
G 文件最后一行
nG / :n 跳到第 n 行
Ctrl+f / Ctrl+b 下/上一页
Ctrl+d / Ctrl+u 下/上翻半页
% 跳到匹配的括号
{ / } 上/下一段落
H M L 屏幕顶、中、底
fx / Fx 行内向后/向前找字符 x
tx / Tx 找字符 x 的前一个位置

组合技巧: 命令前可加数字,如 5j 下移 5 行,3w 前进 3 个单词。

4.2 保存与退出

命令 作用
:w 保存
:w file 另存为 file
:q 退出
:q! 强制退出不保存
:wq / :x / ZZ 保存并退出
:wa 保存所有文件
:qa 退出所有
:qa! 强制退出所有

:x 与 :wq 的区别::x 只在有修改时才写入,:wq 总是写入。

4.3 删除、修改、替换

命令 作用
x 删除光标处字符
X 删除光标前一个字符
dd 删除当前行(剪切)
ndd 删除 n 行
dw 删除一个单词
d$ / D 删除到行尾
d0 删除到行首
dG 删除到文件末尾
r 替换一个字符
R 进入替换模式
~ 切换大小写
guu / gUU 当前行转小写/大写
>> / << 增加/减少缩进
== 自动缩进当前行
J 合并下一行

记住:d 是操作符 ,后面跟动作 。dw、d$、dG、dd 都是这个逻辑。

4.4 复制粘贴

命令 作用
yy / Y 复制当前行
nyy 复制 n 行
yw 复制一个单词
y$ 复制到行尾
ggyG 复制全文
p 粘贴到光标后/下方
P 粘贴到光标前/上方
"+yy / "+p 与系统剪贴板交互(需 +clipboard)

5. 复制、粘贴、删除与撤销

撤销与重做

命令 作用
u 撤销
Ctrl+r 重做
U 撤销整行修改
. 重复上一次修改(超好用)

. 命令是 Vim 的效率核心:做一次操作,然后按 . 重复,配合 n、j 等移动可以批量处理。

系统剪贴板

vim 复制代码
"+yy      " 复制当前行到系统剪贴板
"+p       " 从系统剪贴板粘贴

检查支持:

bash 复制代码
vim --version | grep clipboard

若显示 -clipboard,Ubuntu/Debian 安装:

bash 复制代码
sudo apt install vim-gtk3

粘贴保持格式

从外部粘贴多行代码时缩进常乱,先:

vim 复制代码
:set paste

粘贴完:

vim 复制代码
:set nopaste

6. 搜索与替换

搜索

命令 作用
/pattern 向下搜索
?pattern 向上搜索
n / N 下一个/上一个匹配
* / # 搜索光标下的单词(下/上)
:noh 取消高亮

设置搜索忽略大小写:

vim 复制代码
:set ignorecase
:set smartcase   " 含大写字母时区分大小写

替换

语法::s/old/new/[flags]

命令 作用
:s/old/new/ 替换当前行第一个
:s/old/new/g 替换当前行全部
:%s/old/new/g 替换全文
:%s/old/new/gc 全文替换并逐个确认
:10,20s/old/new/g 替换 10-20 行
:'<,'>s/old/new/g 替换可视选区
:%s/\<word\>/new/g 按整词匹配替换
:%s/^/ / 每行行首加两个空格
:%s/\s\+$//e 删除行尾空白

可视模式下选中后按 : 会自动填入 '<,'>,直接写替换即可。


7. 可视模式

命令 作用
v 字符可视
V 行可视
Ctrl+v 块可视(列编辑)
gv 重选上次选区
o 跳到选区另一端

常用操作:

vim 复制代码
v3j          " 选中当前行及下面 3 行
V            " 整行选择
Ctrl+v       " 块选择

选中后可用:

操作 说明
y 复制
d 删除
c 修改
> / < 缩进
~ 切换大小写
I 块选择下在每行行首插入(先 Ctrl+v 选中,再 I,输入后 Esc)
A 块选择下在每行行尾追加

块编辑经典场景: 给多行同时加注释前缀

vim 复制代码
Ctrl+v       " 选中多行行首
I            " 进入插入
// 或 #      " 输入注释符
Esc          " 应用到所有选中行

8. 多文件、多窗口与标签页

多文件(buffer)

命令 作用
:e file 打开文件到新缓冲区
:ls / :buffers 列出缓冲区
:b n 切换到第 n 个缓冲区
:bn / :bp 下一个/上一个缓冲区
:bd 关闭当前缓冲区
:bdelete! 强制关闭

分屏

命令 作用
:sp file 水平分屏
:vsp file 垂直分屏
Ctrl+w s 水平分屏
Ctrl+w v 垂直分屏
Ctrl+w h/j/k/l 切换到左/下/上/右窗口
Ctrl+w w 循环切换窗口
Ctrl+w = 等分窗口
Ctrl+w + / - 增高/降低
Ctrl+w q 关闭当前窗口
Ctrl+w o 只保留当前窗口

标签页

命令 作用
:tabnew file 新标签页打开
gt / gT 下/上一个标签页
ngt 第 n 个标签页
:tabclose 关闭当前标签页

9. 寄存器

Vim 有多个寄存器," 是默认寄存器。

寄存器 用途
"" 默认(最近一次删除/复制)
"0 最近一次复制(yank)
"1 ~ "9 删除历史(按次数)
"a ~ "z 命名寄存器
"+ 系统剪贴板
"* 系统选择区(X11)
"_ 黑洞寄存器(不存储)
"% 当前文件名
": 最近执行的命令

用法:

vim 复制代码
"ayy        " 复制当前行到 a 寄存器
"ap         " 粘贴 a 寄存器
"+y         " 复制到系统剪贴板
"_dd        " 删除但不污染默认寄存器
:reg        " 查看所有寄存器

技巧:想删除内容但不覆盖上次复制的内容,用 "_d。


10. 宏:录制与回放

宏用来录制一系列操作并重复执行。

命令 作用
q{reg} 开始录制到寄存器 reg(如 qa)
q 停止录制
@{reg} 回放宏
@@ 重复上次回放
n@{reg} 回放 n 次

示例: 给 100 行末尾都加分号

vim 复制代码
qa          " 开始录制到 a
A;          " 行尾插入分号
Esc         " 回到普通模式
j           " 下移一行
q           " 停止
100@a       " 回放 100 次

批量修改示例: 在每行开头加 //

vim 复制代码
qa
I//
Esc
j
q
99@a

宏里避免使用会失败的移动命令,否则回放可能中断。可在录制前用 :set nowrapscan 等调整行为。


11. 配置文件 .vimrc

Vim 的配置文件:

  • Linux/macOS:~/.vimrc
  • Windows:$HOME/_vimrc

推荐基础配置

vim 复制代码
" ===== 基础设置 =====
set nocompatible            " 不兼容 vi
set encoding=utf-8
set fileencoding=utf-8
set number                  " 显示行号
set relativenumber          " 相对行号(配合 j/k 很方便)
set cursorline              " 高亮当前行
set showcmd                 " 显示命令
set wildmenu                " 命令行补全
set laststatus=2            " 总是显示状态栏
set ruler                   " 显示光标位置
set scrolloff=5             " 光标上下保留 5 行
set sidescrolloff=5

" ===== 缩进 =====
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab               " Tab 转空格
set autoindent
set smartindent

" ===== 搜索 =====
set ignorecase
set smartcase
set incsearch               " 增量搜索
set hlsearch                " 高亮结果

" ===== 编辑体验 =====
set backspace=indent,eol,start
set mouse=a                 " 启用鼠标
set clipboard=unnamedplus   " 与系统剪贴板共享(Linux)
" set clipboard=unnamed     " macOS 用这个
set splitright
set splitbelow
set noswapfile
set undofile                " 持久化撤销
set undodir=~/.vim/undodir
set updatetime=300

" ===== 快捷键 =====
let mapleader = " "         " 空格作为 leader

" 保存
nnoremap <leader>w :w<CR>
" 退出
nnoremap <leader>q :q<CR>
" 取消搜索高亮
nnoremap <leader>h :nohlsearch<CR>
" 分屏切换
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" 快速保存
inoremap jk <Esc>

inoremap jk <Esc> 让插入模式下输入 jk 快速退出,比按 Esc 顺手。注意它会占用 jk 组合,某些语言里可能不便,可换 jj。

创建撤销目录:

bash 复制代码
mkdir -p ~/.vim/undodir

12. 插件管理

Vim 原生插件管理能力有限,常用插件管理器:

vim-plug(推荐,简单稳定)

安装:

bash 复制代码
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

在 .vimrc 中配置:

vim 复制代码
call plug#begin('~/.vim/plugged')

Plug 'tpope/vim-sensible'
Plug 'preservim/nerdtree'
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-commentary'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'airblade/vim-gitgutter'

call plug#end()

安装插件:

vim 复制代码
:PlugInstall
:PlugUpdate
:PlugClean

其他选择

  • Vundle:老牌,仍在维护
  • dein.vim:速度快,配置稍复杂
  • vim-packager:轻量
  • lazy.nvim:Neovim 生态,不适用于 Vim

13. 高频插件推荐

插件 作用
vim-surround 快速增删改括号、引号、标签
vim-commentary gcc 注释行,gc 注释选区
nerdtree 文件树
vim-airline 美化状态栏
fzf.vim 模糊搜索文件、缓冲区、内容
vim-gitgutter 显示 git 改动标记
vim-fugitive Git 集成
nerdcommenter 注释增强
ale / coc.nvim 语法检查、补全
vim-easymotion 快速跳转
emmet-vim HTML/CSS 快速编写

surround 示例:

vim 复制代码
cs"'        " 双引号改为单引号
cs'"        " 单引号改为双引号
ysiw)       " 给当前单词加圆括号
ds"         " 删除两侧双引号

commentary 示例:

vim 复制代码
gcc         " 注释/取消注释当前行
gc3j        " 注释下面 3 行
gc          " 可视模式注释选区

14. 高级技巧

14.1 命令行窗口

vim 复制代码
q:          " 打开命令历史窗口,可编辑后回车执行
q/          " 搜索历史
Ctrl+f      " 命令行模式下打开历史

14.2 全局命令 :g

vim 复制代码
:g/pattern/d            " 删除所有含 pattern 的行
:g/^$/d                 " 删除所有空行
:v/pattern/d            " 删除所有不含 pattern 的行
:g/pattern/normal dd    " 对匹配行执行普通命令
:g/^/m0                 " 反转文件行序

14.3 标记(mark)

命令 作用
ma 在当前位置设标记 a
```a`` 跳到标记 a
'a 跳到标记 a 所在行首
:marks 查看所有标记
'' 跳回上次位置

14.4 折叠

命令 作用
zf 创建折叠(可视模式)
zo / zc 打开/关闭折叠
za 切换折叠
zR / zM 打开/关闭所有折叠
:set foldmethod=indent 按缩进折叠
:set foldmethod=syntax 按语法折叠

14.5 会话与视图

vim 复制代码
:mksession ~/session.vim     " 保存会话
vim -S ~/session.vim         " 恢复会话

.vimrc 中自动保存:

vim 复制代码
autocmd VimLeave * mksession! ~/.vim/last_session.vim

14.6 高效组合速查

组合 效果
ciw 修改当前单词(change inner word)
ci" 修改引号内内容
ca{ 修改花括号内及其括号
di( 删除括号内内容
yaW 复制整个单词含空格
dt, 删除到逗号前
cfx 修改到字符 x(含)
3dd 删除 3 行
5yy 复制 5 行
. 重复上次修改
u Ctrl+r 撤销 / 重做

理解操作符 + 文本对象 :d y c 是操作符,iw a" i( ip 是文本对象,自由组合即可。

14.7 文本对象速查

对象 含义
iw / aw 单词 / 单词含空格
i" / a" 引号内 / 含引号
i( / a( 括号内 / 含括号
i{ / a{ 花括号内 / 含花括号
it / at HTML 标签内 / 含标签
ip / ap 段落内 / 含段落

15. 常见问题

Q1:打开文件后不知道怎么退出?

按 Esc,输入 :q 回车。有修改时 :q! 强制退出,或 :wq 保存退出。

Q2:方向键和退格键不工作?

老式 vi 兼容模式导致。在 .vimrc 加 set nocompatible 和 set backspace=indent,eol,start。

Q3:粘贴代码缩进错乱?

先 :set paste,粘贴完 :set nopaste。或使用 "+p 从剪贴板粘贴。

Q4:无法与系统剪贴板互通?

检查 vim --version | grep clipboard。若是 -clipboard,安装 vim-gtk3 或改用 Neovim。

Q5:中文显示乱码?

vim 复制代码
set encoding=utf-8
set fileencoding=utf-8
set termencoding=utf-8

Q6:如何查看当前文件编码?

vim 复制代码
:set fileencoding?

Q7:误操作后如何恢复?

u 撤销,Ctrl+r 重做。配置了 undofile 后,即使关闭文件再打开也能撤销。

Q8:如何让 Vim 记住上次打开位置?

在 .vimrc 加:

vim 复制代码
autocmd BufReadPost *
  \ if line("'\"") > 1 && line("'\"") <= line("$") |
  \   exe "normal! g`\"" |
  \ endif

16. 总结

Vim 的学习可以分三层:

第一层:活下来

  • i 进入插入,Esc 回普通
  • :w 保存,:q 退出,:q! 强退
  • h j k l 移动

第二层:高效编辑

  • yy p dd u Ctrl+r
  • / 搜索,:%s///g 替换
  • v V Ctrl+v 可视模式
  • w b 0 $ gg G 快速移动
  • 操作符 + 文本对象:ciw、di"、ya(

第三层:自动化与定制

  • 寄存器 "a、"+
  • 宏 qa ... q 和 @a
  • :g 全局命令
  • .vimrc 配置与快捷键
  • 插件扩展(surround、commentary、fzf、NERDTree)

学习建议:

  1. 每天强迫自己用 Vim 完成真实任务,不要退回鼠标和方向键
  2. 每周学 1-2 个新命令,加入肌肉记忆
  3. 遇到重复操作就问:能不能用 .、宏或 :g 解决
  4. 配置从简开始,按需增加,别一上来抄几百行 .vimrc

Vim 不是一天学会的,但每学会一个命令,都会在未来几年里持续回报你。


参考资源:

  • vimtutor:终端内置教程
  • :help:Vim 自带完整文档(:help usr_toc)
  • Vim 官方文档:https://www.vim.org/docs.php
  • Vim Adventures:游戏化学习
  • awesome-vim:插件与配置汇总

本文基于 Vim 9.x 编写,大部分命令在 vi、Neovim 中同样适用。

相关推荐
小淮AI1 小时前
AI 能生成网页吗?从三类工具看当前的实际能力
1024程序员节
思麟呀1 小时前
嵌入式入门(四)USART 串口深度解析:单片机第一次与电脑对话
c语言·单片机·嵌入式硬件·1024程序员节
有Li1 小时前
主动脉瘤的最佳风险重新分类:断层增强CT与二维经胸超声心动图对比研究文献速递/医学影像的几何测量
大数据·人工智能·深度学习·机器学习·医学生
猛码象限1 小时前
【模型观察】K3.1 Pro 后训练加码,自评完成度 65.7%
人工智能·业界资讯·1024程序员节
天蒙蒙亮1 小时前
React Native 打包流程(Android 为主)
1024程序员节
小大宇1 小时前
Vue知识点-setup语法糖
1024程序员节
嘶哈哈哈1 小时前
PX4 + Livox MID360 + FAST-LIO + MAVROS
1024程序员节
Zevalin爱灰灰1 小时前
Linux入门第一部分(Ubuntu入门篇) 第二章 浅尝Ubuntu(一)
linux·嵌入式·1024程序员节
qq_408606861 小时前
C_Primer_Plus_Chapter17_exercise4
1024程序员节