Vim 是一个功能强大的文本编辑器,被广泛应用于 Linux/Unix 系统中。本文将从基础操作开始,逐步介绍 Vim 的各种功能和使用技巧。
基础操作
模式切换
Vim 有几种不同的工作模式:
- 普通模式(Normal Mode):默认模式,用于浏览和操作文本
- 插入模式(Insert Mode):用于输入文本
- 可视模式(Visual Mode):用于选择文本
- 命令模式(Command Mode):用于执行命令
模式切换快捷键
i
- 在光标前进入插入模式I
- 在行首进入插入模式a
- 在光标后进入插入模式A
- 在行尾进入插入模式o
- 在下一行进入插入模式O
- 在上一行进入插入模式Esc
- 返回普通模式v
- 进入可视模式V
- 进入行可视模式Ctrl+v
- 进入块可视模式:
- 进入命令模式
光标移动
基本移动
h
- 左移一个字符j
- 下移一行k
- 上移一行l
- 右移一个字符w
- 移动到下一个单词开头b
- 移动到上一个单词开头e
- 移动到当前单词结尾
快速移动
0
- 移动到行首^
- 移动到行首第一个非空字符$
- 移动到行尾gg
- 移动到文件开头G
- 移动到文件结尾nG
- 移动到第 n 行(如10G
移动到第10行)Ctrl+f
- 向下翻页Ctrl+b
- 向上翻页Ctrl+d
- 向下翻半页Ctrl+u
- 向上翻半页
文本编辑
删除操作
x
- 删除光标下的字符X
- 删除光标前的字符dd
- 删除当前行ndd
- 删除 n 行(如3dd
删除3行)dw
- 删除到下一个单词db
- 删除到上一个单词d$
- 删除到行尾d0
- 删除到行首
复制和粘贴
yy
- 复制当前行nyy
- 复制 n 行yw
- 复制一个单词y$
- 复制到行尾p
- 在光标后粘贴P
- 在光标前粘贴
撤销和重做
u
- 撤销上一次操作Ctrl+r
- 重做被撤销的操作U
- 撤销对当前行的所有修改
查找和替换
查找操作
/pattern
- 向下查找 pattern?pattern
- 向上查找 patternn
- 查找下一个匹配项N
- 查找上一个匹配项*
- 查找光标下的单词(向下)#
- 查找光标下的单词(向上)
替换操作
:s/old/new/
- 替换当前行第一个 old 为 new:s/old/new/g
- 替换当前行所有 old 为 new:s/old/new/gc
- 替换当前行所有 old 为 new,并提示确认:%s/old/new/g
- 替换所有行所有 old 为 new:%s/old/new/gc
- 替换所有行所有 old 为 new,并提示确认:n,ms/old/new/g
- 替换第 n 行到第 m 行的 old 为 new
查找选项设置
:set ic
- 忽略大小写:set noic
- 不忽略大小写:set hlsearch
- 高亮搜索结果:set nohlsearch
- 不高亮搜索结果:set incsearch
- 实时搜索:set noincsearch
- 不实时搜索:noh
- 清除当前高亮
文件操作
打开和保存文件
:e filename
- 打开文件:w
- 保存文件:w filename
- 另存为:wq
- 保存并退出:q
- 退出:q!
- 强制退出(不保存):x
- 保存并退出(等同于:wq
)
文件浏览
:find filename
- 查找并打开文件:ls
- 显示缓冲区列表:b n
- 切换到缓冲区 n:bn
- 切换到下一个缓冲区:bp
- 切换到上一个缓冲区:bd
- 删除当前缓冲区
窗口和标签页操作
窗口操作
:split
或:sp
- 水平分割窗口:vsplit
或:vsp
- 垂直分割窗口Ctrl+w h
- 移动到左边窗口Ctrl+w j
- 移动到下边窗口Ctrl+w k
- 移动到上边窗口Ctrl+w l
- 移动到右边窗口Ctrl+w w
- 在窗口间循环切换Ctrl+w q
- 关闭当前窗口Ctrl+w =
- 平均分配窗口大小
标签页操作
:tabnew
- 新建标签页:tabedit filename
- 在新标签页中打开文件gt
- 切换到下一个标签页gT
- 切换到上一个标签页:tabclose
- 关闭当前标签页:tabonly
- 关闭其他标签页
显示设置
行号和界面
:set nu
- 显示行号:set nonu
- 不显示行号:set rnu
- 显示相对行号:set nornu
- 不显示相对行号:set wrap
- 自动换行:set nowrap
- 不自动换行:set ruler
- 显示光标位置:set noruler
- 不显示光标位置
高亮和匹配
:set showmatch
- 显示括号匹配:set noshowmatch
- 不显示括号匹配:set cursorline
- 高亮当前行:set nocursorline
- 不高亮当前行:set cursorcolumn
- 高亮当前列:set nocursorcolumn
- 不高亮当前列
代码折叠
:set foldenable
- 启用折叠:set nofoldenable
- 禁用折叠:set foldmethod=indent
- 按缩进折叠:set foldmethod=syntax
- 按语法折叠za
- 切换折叠状态zo
- 打开折叠zc
- 关闭折叠zR
- 打开所有折叠zM
- 关闭所有折叠
高级技巧
宏录制
qa
- 开始录制宏到寄存器 aq
- 停止录制宏@a
- 执行寄存器 a 中的宏@@
- 重复执行上一次的宏
寄存器操作
"ayy
- 复制当前行到寄存器 a"ap
- 粘贴寄存器 a 的内容:reg
- 查看所有寄存器内容
标记和跳转
ma
- 在当前位置设置标记 a'a
- 跳转到标记 a''
- 跳转到上一次位置Ctrl+o
- 跳转到上一个位置Ctrl+i
- 跳转到下一个位置
常用配置
基础配置建议
在 ~/.vimrc
文件中添加以下配置:
" 基础设置
set number " 显示行号
set relativenumber " 显示相对行号
set cursorline " 高亮当前行
set hlsearch " 高亮搜索结果
set incsearch " 实时搜索
set ignorecase " 搜索忽略大小写
set smartcase " 智能大小写匹配
set autoindent " 自动缩进
set smartindent " 智能缩进
set tabstop=4 " Tab 宽度
set shiftwidth=4 " 缩进宽度
set expandtab " 用空格替代 Tab
set showmatch " 显示括号匹配
set ruler " 显示光标位置
set laststatus=2 " 总是显示状态栏
" 语法高亮
syntax on
filetype plugin indent on
" 搜索设置
set hlsearch
set incsearch
nnoremap <leader><space> :nohlsearch<CR>
" 快捷键映射
let mapleader = ","
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
实用插件推荐
- vim-plug - 插件管理器
- NERDTree - 文件树浏览器
- fzf.vim - 模糊查找
- vim-airline - 状态栏美化
- auto-pairs - 自动配对括号
- vim-commentary - 快速注释
- vim-surround - 快速编辑包围字符
总结
Vim 是一个功能强大的编辑器,虽然学习曲线较陡峭,但掌握后能大大提高编辑效率。建议:
- 先熟练掌握基本的模式切换和光标移动
- 逐步学习文本编辑和查找替换功能
- 根据需要学习高级功能如宏、寄存器等
- 通过配置文件个性化 Vim 环境
- 多练习,形成肌肉记忆
记住:Vim 的哲学是"组合命令",掌握基本命令后可以灵活组合使用,这是它强大之处。