Vim编辑器使用指南

Vim基本概念

Vim模式

模式说明进入方式
普通模式默认模式,用于浏览和操作Esc
插入模式用于输入文本i, a, o
可视模式用于选择文本v, V, Ctrl+v
命令模式用于执行命令:

模式切换

普通模式 ←── Esc ──→ 插入模式
    │                    ↑
    │    i, a, o 等      │
    └────────────────────┘

普通模式 ←── Esc ──→ 可视模式
    │                    ↑
    │    v, V, Ctrl+v    │
    └────────────────────┘

普通模式 ── : ──→ 命令模式

普通模式命令

光标移动

命令说明
h j k l左 下 上 右
w下一个单词开头
W下一个空格分隔的单词开头
b上一个单词开头
B上一个空格分隔的单词开头
e当前单词结尾
0行首
^行首第一个非空白字符
$行尾
gg文件开头
G文件结尾
nG跳到第n行
Ctrl+f向下翻页
Ctrl+b向上翻页
Ctrl+d向下翻半页
Ctrl+u向上翻半页
%跳转到匹配的括号

插入命令

命令说明
i在光标前插入
I在行首插入
a在光标后插入
A在行尾插入
o在下方新建行插入
O在上方新建行插入
s删除字符后插入
S删除整行后插入

删除命令

命令说明
x删除光标字符
X删除光标前字符
dd删除整行
dw删除到单词结尾
d$删除到行尾
d0删除到行首
dG删除到文件结尾
dgg删除到文件开头
ndd删除n行
D删除到行尾(同d$)

复制和粘贴

命令说明
yy复制整行
yw复制单词
y$复制到行尾
p在光标后粘贴
P在光标前粘贴
nyy复制n行

替换命令

命令说明
r替换当前字符
R进入替换模式
cw替换单词
c$替换到行尾
C替换到行尾(同c$)

撤销和重做

命令说明
u撤销
Ctrl+r重做
U撤销当前行所有修改

重复命令

命令说明
.重复上一个命令
n.重复n次

可视模式

进入可视模式

命令说明
v字符选择
V行选择
Ctrl+v块选择

可视模式操作

命令说明
d / x删除选中内容
y复制选中内容
p粘贴
c替换选中内容
>增加缩进
<减少缩进
u转小写
U转大写

块编辑示例

# 在多行行首插入
Ctrl+v 选择多行 → I → 输入内容 → Esc

# 在多行行尾插入
Ctrl+v 选择多行 → $ → A → 输入内容 → Esc

# 批量删除行首字符
Ctrl+v 选择多行 → d

命令模式

文件操作

命令说明
:w保存
:w filename另存为
:q退出
:q!强制退出(不保存)
:wq保存并退出
:x保存并退出
ZZ保存并退出(普通模式)
:e filename打开文件
:r filename插入文件内容

查找和替换

命令说明
/pattern向下搜索
?pattern向上搜索
n下一个匹配
N上一个匹配
:s/old/new/替换当前行第一个
:s/old/new/g替换当前行所有
:%s/old/new/g替换全文所有
:%s/old/new/gc替换全文(需确认)
:n,ms/old/new/g替换n到m行

行号和定位

命令说明
:set nu显示行号
:set nonu隐藏行号
:n跳到第n行
:.当前行号
:$最后一行行号

窗口操作

命令说明
:sp filename水平分割窗口
:vsp filename垂直分割窗口
Ctrl+w w切换窗口
Ctrl+w h/j/k/l切换到左/下/上/右窗口
Ctrl+w c关闭当前窗口
:q关闭当前窗口

标签页操作

命令说明
:tabnew新建标签页
:tabn下一个标签页
:tabp上一个标签页
:tabc关闭当前标签页

常用设置

~/.vimrc配置示例

" ========== 基础设置 ==========
set nocompatible          " 不兼容Vi
set encoding=utf-8        " 编码
set fileencoding=utf-8
set fileencodings=utf-8,gbk
 
" ========== 显示设置 ==========
set number                " 显示行号
set relativenumber        " 相对行号
set cursorline            " 高亮当前行
set showmatch             " 显示匹配括号
set ruler                 " 显示光标位置
set showcmd               " 显示命令
set wildmenu              " 命令行补全菜单
 
" ========== 编辑设置 ==========
set tabstop=4             " Tab宽度
set shiftwidth=4          " 缩进宽度
set softtabstop=4         " 软Tab宽度
set expandtab             " Tab转空格
set autoindent            " 自动缩进
set smartindent           " 智能缩进
set wrap                  " 自动换行
 
" ========== 搜索设置 ==========
set incsearch             " 增量搜索
set hlsearch              " 高亮搜索结果
set ignorecase            " 忽略大小写
set smartcase             " 智能大小写
 
" ========== 性能设置 ==========
set lazyredraw            " 延迟重绘
set updatetime=300        " 更新时间
 
" ========== 快捷键映射 ==========
" Leader键
let mapleader = ","
 
" 快捷保存
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
 
" ========== 插件设置 ==========
" 如果使用vim-plug
" call plug#begin('~/.vim/plugged')
" Plug 'tpope/vim-fugitive'
" call plug#end()

实用技巧

快速移动

# 行内快速移动
f + 字符    " 跳转到下一个该字符
F + 字符    " 跳转到上一个该字符
t + 字符    " 跳转到下一个该字符前
T + 字符    " 跳转到上一个该字符后

# 组合移动
3w         " 向前移动3个单词
5j         " 向下移动5行

文本对象

# 操作 + 范围 + 对象
diw        " 删除单词
daw        " 删除单词(含空格)
di"        " 删除引号内内容
da"        " 删除引号及内容
di(        " 删除括号内内容
da(        " 删除括号及内容
dit        " 删除标签内内容
dat        " 删除标签及内容

寄存器

:reg       " 查看寄存器内容
"ayy       " 复制到寄存器a
"ap        " 粘贴寄存器a内容
"0p        " 粘贴最近复制内容
"+p        " 粘贴系统剪贴板

宏录制

qa         " 开始录制宏到寄存器a
...        " 执行操作
q          " 停止录制
@a        " 执行宏a
10@a      " 执行宏a 10次
@@        " 重复上次宏

💡 学习建议:

  • 先掌握基本移动和编辑命令
  • 多使用 . 重复命令
  • 善用文本对象提高效率
  • 配置适合自己的 .vimrc

🔗 相关笔记: 02.02_快捷键 99.01_常用命令速查表