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 - 向上查找 pattern
  • n - 查找下一个匹配项
  • 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 - 开始录制宏到寄存器 a
  • q - 停止录制宏
  • @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>

实用插件推荐

  1. vim-plug - 插件管理器
  2. NERDTree - 文件树浏览器
  3. fzf.vim - 模糊查找
  4. vim-airline - 状态栏美化
  5. auto-pairs - 自动配对括号
  6. vim-commentary - 快速注释
  7. vim-surround - 快速编辑包围字符

总结

Vim 是一个功能强大的编辑器,虽然学习曲线较陡峭,但掌握后能大大提高编辑效率。建议:

  1. 先熟练掌握基本的模式切换和光标移动
  2. 逐步学习文本编辑和查找替换功能
  3. 根据需要学习高级功能如宏、寄存器等
  4. 通过配置文件个性化 Vim 环境
  5. 多练习,形成肌肉记忆

记住:Vim 的哲学是"组合命令",掌握基本命令后可以灵活组合使用,这是它强大之处。