Vim 高效使用指南

发布于:2025-08-05 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、Vim 有哪几种模式?

Vim 并不像普通编辑器那样一打开就能输入文字,它有三种模式

  1. 普通模式(Normal mode)
    默认进入就是这个模式。可以用来移动光标、删除、复制、粘贴。

  2. 插入模式(Insert mode)
    就像平常写字那样可以输入内容。

  3. 命令模式(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 基础配置模板

  1. 创建配置文件
vim ~/.vimrc              # 编辑用户配置文件
  1. 可以直接将以下内容作为自己的 ~/.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

网站公告

今日签到

点亮在社区的每一天
去签到