Vim 高效使用指南
文章目录
- 一、Vim 有哪几种模式?
- 二、切换模式
- 三、保存、退出
- 四、光标移动(在普通模式中)
- 五、编辑操作(删除 / 复制 / 粘贴)
- 删除(也可以理解为剪切)
- 复制与粘贴
- 撤销与重做
- 六、查找与替换(命令模式)
- 查找
- 替换
- 七、其他常用命令
- 八、翻屏与分屏
- 8.1 翻屏操作(移动视野)
- 8.2 分屏操作(多窗口编辑)
- 九、vim的配置
- 9.1 系统配置文件(全局)
- 9.2 用户配置文件
- 9.3 常用配置分类(写入 `~/.vimrc`)
- 9.4 基础配置模板
一、Vim 有哪几种模式?
Vim 并不像普通编辑器那样一打开就能输入文字,它有三种模式:
-
普通模式(Normal mode)
默认进入就是这个模式。可以用来移动光标、删除、复制、粘贴。 -
插入模式(Insert mode)
就像平常写字那样可以输入内容。 -
命令模式(Command mode)
用来保存、退出、查找、替换等操作。
二、切换模式
在 Vim 中,模式之间切换是靠按键的:
操作 | 说明 |
---|---|
i | 进入插入模式(光标前插入) |
a | 插入模式(光标后插入) |
o | 在下一行插入新行并编辑 |
Esc | 回到普通模式 |
: | 从普通模式进入命令模式 |
示例:打开 Vim 后,按 i
就能开始打字;打完按 Esc
回到普通模式。
三、保存、退出
进入命令模式(先按 Esc
,再按 :
),然后输入以下命令:
命令 | 作用 |
---|---|
:w | 保存文件(write) |
:q | 退出(quit) |
:wq | 保存并退出 |
:q! | 不保存强制退出 |
ZZ | 另一个保存并退出的快捷方式(普通模式直接按 Shift+ZZ) |
四、光标移动(在普通模式中)
基本方向移动:
h
→ 左l
→ 右j
→ 下k
→ 上
进阶跳转:
按键 | 功能 |
---|---|
0 | 移动到行首 |
$ | 移动到行尾 |
gg | 跳到文件开头 |
G | 跳到文件结尾 |
:n | 跳到第 n 行 |
w | 跳到下一个单词开头 |
b | 跳到上一个单词开头 |
示例:想跳到第 50 行,可以输入 :50
回车。
五、编辑操作(删除 / 复制 / 粘贴)
这些都在普通模式下使用:
删除(也可以理解为剪切)
命令 | 功能 |
---|---|
x | 删除一个字符 |
dd | 删除当前整行 |
ndd | 删除接下来的 n 行 |
D | 删除从光标到行尾 |
复制与粘贴
命令 | 功能 |
---|---|
yy | 复制当前行 |
nyy | 复制接下来的 n 行 |
p | 粘贴到光标后 |
P | 粘贴到光标前 |
撤销与重做
命令 | 功能 |
---|---|
u | 撤销上一步 |
Ctrl + r | 重做 |
示例:删除 3 行可用 3dd
,复制 2 行可用 2yy
。
六、查找与替换(命令模式)
查找
操作 | 说明 |
---|---|
/关键字 | 向下查找 |
?关键字 | 向上查找 |
n | 找下一个匹配项 |
N | 找上一个匹配项 |
示例:想找 “hello”,按 /hello
然后回车。
替换
替换命令在命令模式下(按 :
进入):
命令 | 说明 |
---|---|
:s/旧/新/ | 当前行替换第一个匹配 |
:s/旧/新/g | 当前行全部替换 |
:%s/旧/新/g | 全文替换所有匹配 |
:%s/旧/新/gc | 全文替换并每次都确认 |
示例:把文件中所有 “cat” 改成 “dog”,可用 :%s/cat/dog/g
七、其他常用命令
功能 | 命令 |
---|---|
显示行号 | :set number |
取消行号 | :set nonumber |
关闭高亮搜索 | :nohlsearch |
八、翻屏与分屏
8.1 翻屏操作(移动视野)
快捷键 | 说明 |
---|---|
Ctrl + f | 向下翻一整页 |
Ctrl + b | 向上翻一整页 |
Ctrl + d | 向下翻半页 |
Ctrl + u | 向上翻半页 |
8.2 分屏操作(多窗口编辑)
1. 创建分屏
命令 | 说明 |
---|---|
:sp 文件名 | 水平分屏打开文件 |
:vsp 文件名 | 垂直分屏打开文件 |
2. 窗口切换(Ctrl + w 是组合键前缀)
快捷键 | 说明 |
---|---|
Ctrl + w + h | 移动到左边窗口 |
Ctrl + w + l | 移动到右边窗口 |
Ctrl + w + j | 移动到下方窗口 |
Ctrl + w + k | 移动到上方窗口 |
Ctrl + w + w | 在窗口间循环切换 |
3. 关闭窗口
命令 | 说明 |
---|---|
:q | 关闭当前分屏 |
:only | 关闭除当前外的所有分屏 |
九、vim的配置
9.1 系统配置文件(全局)
- 文件位置:
/etc/vim/vimrc
- 作用范围:所有用户启动 Vim 时都会生效
- 适合场景:管理员为全系统设置统一行为
9.2 用户配置文件
- 文件位置:
~/.vimrc
- 作用范围:仅当前用户
- 推荐理由:私有、灵活、便于个性化设置
9.3 常用配置分类(写入 ~/.vimrc
)
(1)基本显示与操作体验
set number " 显示行号
set relativenumber " 显示相对行号(当前行为0,其它行为相对值)
set showcmd " 显示正在输入的命令
set cursorline " 高亮当前行
set ruler " 显示光标所在位置(行列号)
set title " 显示终端标题
set wildmenu " 命令补全菜单
(2)缩进与制表符设置(建议统一为 4 空格)
set tabstop=4 " 设置一个 Tab 等于 4 个空格
set shiftwidth=4 " 自动缩进时使用 4 个空格
set expandtab " 输入 Tab 时,实际插入空格
set smartindent " 启用智能自动缩进
(3)搜索相关设置
set ignorecase " 搜索时忽略大小写
set smartcase " 搜索词包含大写时启用大小写敏感
set hlsearch " 高亮匹配结果
set incsearch " 边输边找(增量搜索)
set wrapscan " 搜索到末尾后从头开始(循环搜索)
(4)编码与语言设置(防乱码)
set encoding=utf-8 " 使用 UTF-8 编码
set fileencodings=utf-8,gbk " 文件尝试用哪些编码打开
set fileformats=unix,dos " 识别换行符格式(LF / CRLF)
(5)文件与备份设置(防止产生烦人的临时文件)
set nobackup " 不生成备份文件 file~
set nowritebackup " 写文件时不生成临时文件
set noswapfile " 不生成交换文件 .swp
(6)鼠标与剪贴板支持
set mouse=a " 启用鼠标支持(a=所有模式都可用)
set clipboard=unnamedplus " 启用系统剪贴板(复制粘贴可与系统共享)
clipboard=unnamedplus
需 Vim 编译时支持该功能,可用vim --version
查看是否带+clipboard
(7)状态栏美化
set laststatus=2 " 始终显示状态栏
set showmode " 显示当前 Vim 模式(插入/普通)
(8)语法高亮与配色方案
syntax on " 启用语法高亮
set background=dark " 适合暗色终端的配色(可改为 light)
colorscheme desert " 配色方案(可选:default, elflord, murphy, peachpuff, etc)
9.4 基础配置模板
- 创建配置文件
vim ~/.vimrc # 编辑用户配置文件
- 可以直接将以下内容作为自己的
~/.vimrc
" (1) 基本显示与操作体验
" --------------------------------------------
set number " 显示行号
" set relativenumber " 显示相对行号(当前行为0,其它行为相对值)
set showcmd " 显示正在输入的命令
" set cursorline " 高亮当前行
set ruler " 显示光标所在位置(行列号)
set title " 显示终端标题
set wildmenu " 命令补全菜单" (2) 缩进与制表符设置
" --------------------------------------------
set tabstop=4 " 设置一个 Tab 等于 4 个空格
set shiftwidth=4 " 自动缩进时使用 4 个空格
set expandtab " 输入 Tab 时,实际插入空格
set smartindent " 启用智能自动缩进
set autoindent " 继承上一行缩进" (3) 搜索相关设置
" --------------------------------------------
set ignorecase " 搜索时忽略大小写
set smartcase " 搜索词包含大写时启用大小写敏感
set hlsearch " 高亮匹配结果
set incsearch " 边输边找(增量搜索)
set wrapscan " 搜索到末尾后从头开始(循环搜索)" (4) 编码与语言设置
" --------------------------------------------
set encoding=utf-8 " 使用 UTF-8 编码
set fileencodings=utf-8,gbk " 文件尝试用哪些编码打开
set fileformats=unix,dos " 识别换行符格式(LF / CRLF)
set spelllang=en,cjk " 拼写检查语言(英文+中日韩)" (5) 文件与备份设置
" --------------------------------------------
set nobackup " 不生成备份文件 file~
set nowritebackup " 写文件时不生成临时文件
set noswapfile " 不生成交换文件 .swp
set undofile " 启用持久撤销
set undodir=~/.vim/undo " 撤销文件存储目录" (6) 鼠标与剪贴板支持
" --------------------------------------------
set mouse=a " 启用鼠标支持(a=所有模式都可用)
set clipboard=unnamedplus " 启用系统剪贴板(复制粘贴可与系统共享)" (7) 状态栏美化
" --------------------------------------------
set laststatus=2 " 始终显示状态栏
set showmode " 显示当前 Vim 模式(插入/普通)
set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P " 自定义状态栏内容" (8) 语法高亮与配色方案
" --------------------------------------------
syntax on " 启用语法高亮
set background=dark " 适合暗色终端的配色
colorscheme desert " 配色方案
set termguicolors " 启用真彩色支持(如果终端支持)" ============================================
" 实用快捷键映射
" ============================================
let mapleader = "," " 设置前缀键为逗号" 快速保存与退出
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>x :x<CR>" 清除搜索高亮
nnoremap <silent> <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" 标签页管理
nnoremap <leader>tn :tabnew<CR>
nnoremap <leader>tc :tabclose<CR>
nnoremap <leader>tl :tabnext<CR>
nnoremap <leader>th :tabprev<CR>" ============================================
" 自动命令
" ============================================
" 创建撤销文件目录
if !isdirectory($HOME."/.vim/undo")silent! execute '!mkdir -p ~/.vim/undo'
endif" 文件类型特定设置
autocmd FileType python setlocal shiftwidth=4 softtabstop=4 expandtab
autocmd FileType javascript,typescript,html,css setlocal shiftwidth=2 softtabstop=2 expandtab
autocmd FileType markdown setlocal spell wrap linebreak
重启 Vim 或保存 .vimrc
后在命令模式下通过以下命令让新配置立即生效:
:source ~/.vimrc