Linux驱动 2026年4月22日 86 分钟

Vim 编辑器详细使用手册

# Vim 编辑器详细使用手册 ## 目录 1. [Vim 简介](#1-vim-简介) 2. [三种模式](#2-三种…

# Vim 编辑器详细使用手册

## 目录

1. [Vim 简介](#1-vim-简介)

2. [三种模式](#2-三种模式)

3. [基本操作](#3-基本操作)

4. [移动与跳转](#4-移动与跳转)

5. [编辑操作](#5-编辑操作)

6. [搜索与替换](#6-搜索与替换)

7. [多文件操作](#7-多文件操作)

8. [多窗口操作](#8-多窗口操作)

9. [寄存器与宏](#9-寄存器与宏)

10. [折叠与标记](#10-折叠与标记)

11. [配置与个性化](#11-配置与个性化)

12. [实用技巧](#12-实用技巧)

## 1. Vim 简介

Vim(Vi IMproved)是从 Vi 发展而来的文本编辑器,以其高效的键盘操作和强大的定制能力著称。Linux 系统默认预装。

### 启动方式

“`bash

vim filename          # 打开或新建文件

vim +10 filename      # 打开文件并跳转到第10行

vim + filename        # 打开文件跳转到最后一行

vim -R filename       # 只读模式打开

vim -d file1 file2    # 比较模式打开两个文件

vim -b filename       # 以二进制模式打开

“`

### 退出方式

| 命令 | 说明 |

|——|——|

| `:q` | 退出(无修改时) |

| `:q!` | 强制退出(放弃修改) |

| `:wq` | 保存并退出 |

| `:x` | 保存并退出(仅在有修改时写入) |

| `ZZ` | 保存并退出(Normal 模式下) |

| `:wqa` | 保存并退出所有窗口 |

| `:qa!` | 强制退出所有窗口 |

## 2. 三种模式

Vim 有三种主要模式,理解模式切换是掌握 Vim 的核心。

“`

                    ┌───────────────┐

                    │  Insert Mode  │

                    │   (插入模式)   │

                    │  i/a/o 等进入  │

                    └───────┬───────┘

                            │ <ESC>

                            ▼

┌───────────────┐    ┌────────────────┐    ┌───────────────┐

│   Normal Mode │◄──►│  Command Mode  │───►│  Visual Mode  │

│   (普通模式)    │ :/? │  (命令模式)    │    │   (可视模式)   │

│  一切命令的起点 │    │  以 : / ? 进入  │    │   v/V/Ctrl+v  │

└───────────────┘    └───────┬────────┘    └───────────────┘

                              │ <ESC>

                              ▼

“`

### 模式说明

**Normal 模式**:默认模式,所有快捷键生效,用于导航和操作

**Insert 模式**:输入文字,类似普通编辑器

**Command 模式**:执行命令,以 `:` 开头

**Visual 模式**:选择文本区域

### 进入插入模式的方式

| 命令 | 光标行为 |

|——|———|

| `i` | 在当前字符前插入 |

| `a` | 在当前字符后插入 |

| `I` | 在行首插入 |

| `A` | 在行尾插入 |

| `o` | 在下方新建一行 |

| `O` | 在上方新建一行 |

| `s` | 删除当前字符并进入插入模式 |

| `S` | 删除整行并进入插入模式 |

| `c<motion>` | 配合动作命令使用 |

| `gi` | 在上次退出插入模式的位置继续 |

## 3. 基本操作

### 光标移动(Normal 模式)

| 命令 | 移动方向 |

|——|———|

| `h` | 左 |

| `j` | 下 |

| `k` | 上 |

| `l` | 右 |

| `w` | 下一个单词词首 |

| `b` | 上一个单词词首 |

| `e` | 下一个单词词尾 |

| `ge` | 上一个单词词尾 |

| `0` | 行首 |

| `^` | 行首(非空白字符) |

| `$` | 行尾 |

| `{` | 上一段 |

| `}` | 下一段 |

| `gg` | 文件首行 |

| `G` | 文件末行 |

| `nG` 或 `:n` | 跳转到第 n 行 |

| `%` | 匹配括号跳转 |

### 文本操作

| 命令 | 操作 |

|——|——|

| `x` | 删除当前字符 |

| `dd` | 删除当前行 |

| `dw` | 删除到词尾 |

| `d$` | 删除到行尾 |

| `d0` | 删除到行首 |

| `dgg` | 删除到文件开头 |

| `dG` | 删除到文件末尾 |

| `yy` 或 `Y` | 复制当前行 |

| `yw` | 复制到词尾 |

| `p` | 在光标后粘贴 |

| `P` | 在光标前粘贴 |

| `u` | 撤销 |

| `Ctrl+r` | 重做 |

| `.` | 重复上一次操作 |

| `~` | 大小写切换 |

| `r` | 替换单个字符 |

| `R` | 进入替换模式 |

### 数字参数

Vim 大部分命令都可以加数字前缀表示重复次数:

“`vim

” 删除接下来的5行

5dd

” 向下移动10行

10j

” 复制接下来的3行

3yy

” 在当前位置插入5个减号

5i-<ESC>

“`

## 4. 移动与跳转

### 屏幕内移动

| 命令 | 说明 |

|——|——|

| `H` | 屏幕顶部(High) |

| `M` | 屏幕中部(Middle) |

| `L` | 屏幕底部(Low) |

| `zt` | 当前行移到屏幕顶部 |

| `zz` | 当前行移到屏幕中部 |

| `zb` | 当前行移到屏幕底部 |

| `Ctrl+d` | 下翻半屏(Down) |

| `Ctrl+u` | 上翻半屏(Up) |

| `Ctrl+f` | 下翻整屏(Forward) |

| `Ctrl+b` | 上翻整屏(Backward) |

| `Ctrl+e` | 屏幕向下滚动一行 |

| `Ctrl+y` | 屏幕向上滚动一行 |

### 单词与字符跳转

| 命令 | 说明 |

|——|——|

| `W` | 大写 W,忽略标点跳转词首 |

| `B` | 大写 B,忽略标点跳转词首 |

| `E` | 大写 E,忽略标点跳转词尾 |

| `f<char>` | 本行查找下一个字符 |

| `F<char>` | 本行查找上一个字符 |

| `t<char>` | 跳转到目标字符前 |

| `T<char>` | 跳转到目标字符后 |

| `;` | 重复上一次 f/F/t/T |

| `,` | 反向重复上一次 f/F/t/T |

| `|` | 跳转到行首 |

### 书签跳转

“`vim

m{a-zA-Z}   ” 创建书签(小写局部,大写全局)

`{a-zA-Z}   ” 跳转到书签

‘{a-z}      ” 跳转到书签所在行首

:marks      ” 查看所有书签

:delmarks a ” 删除书签 a

:delmarks!  ” 删除所有小写书签

“`

## 5. 编辑操作

### 缩进

| 命令 | 说明 |

|——|——|

| `>>` | 当前行向右缩进 |

| `<<` | 当前行向左缩进 |

| `=` | 自动格式化(配合动作) |

| `==` | 格式化当前行 |

| `n>>` | n 行向右缩进 |

| `>%` | 缩进到匹配括号 |

| `=ap` | 缩进当前段落 |

| `:set expandtab` | 缩进用空格 |

| `:set tabstop=4` | 制表符宽度设为4 |

| `:set shiftwidth=4` | 自动缩进宽度设为4 |

### 复制、剪切与粘贴

| 命令 | 说明 |

|——|——|

| `yy` | 复制当前行 |

| `nyy` | 复制 n 行 |

| `yaw` | 复制当前单词(含周围空格) |

| `yas` | 复制当前句子 |

| `yap` | 复制当前段落 |

| `dd` | 剪切当前行 |

| `ndd` | 剪切 n 行 |

| `dw` | 剪切到词尾 |

| `D` | 剪切到行尾(不包含换行) |

| `daw` | 剪切当前单词(含空格) |

| `p` | 在光标后粘贴 |

| `P` | 在光标前粘贴 |

| `gp` | 粘贴后光标移动到粘贴文本后 |

| `”]p` | 在缩进正确的位置粘贴 |

### 组合操作(操作符 + 动作)

Vim 的编辑命令遵循 **操作符 + 动作** 模式:

“`

操作符:

  d  – 删除 (delete)

  y  – 复制 (yank)

  c  – 修改 (change)

  g~ – 大小写切换

  gu – 转为小写

  gU – 转为大写

  >  – 右缩进

  <  – 左缩进

  =  – 自动缩进

动作:

  w  – 下一个单词

  $  – 到行尾

  0  – 到行首

  }  – 下一段

  i} – 括号内

  a” – 引号内(含引号)

  …

“`

示例:

“`vim

ci”    ” 修改引号内的内容

ci(    ” 修改括号内的内容

diw    ” 删除当前单词

yaw    ” 复制当前单词

gU$    ” 当前行光标后转为大写

gUU    ” 整行转为大写

guu    ” 整行转为小写

“`

## 6. 搜索与替换

### 搜索

| 命令 | 说明 |

|——|——|

| `/pattern` | 向下搜索 pattern |

| `?pattern` | 向上搜索 pattern |

| `n` | 跳转到下一个匹配 |

| `N` | 跳转到上一个匹配 |

| `*` | 搜索光标下单词(向下) |

| `#` | 搜索光标下单词(向上) |

| `g*` | 同 * 但允许部分匹配 |

| `g#` | 同 # 但允许部分匹配 |

| `:noh` | 取消高亮搜索 |

| `/\cpattern` | 忽略大小写搜索 |

| `/\Cpattern` | 强制大小写敏感 |

| `/\<word\>` | 精确匹配单词 |

### 正则搜索

“`vim

/\d\+           ” 匹配一个或多个数字

/\w\+           ” 匹配一个或多个字母数字下划线

/\s\+           ” 匹配一个或多个空白字符

/\t\+           ” 匹配一个或多个制表符

/\.\+           ” 匹配点号本身(需转义)

/^begin         ” 以 begin 开头的行

/end$           ” 以 end 结尾的行

/^$             ” 空行

/\n             ” 换行符

/[a-zA-Z]       ” 任意字母

/[^a-z]         ” 非小写字母

“`

### 替换

**基本语法:**

“`vim

:[range]s/{pattern}/{string}/[flags]

“`

**范围说明:**

| 范围 | 说明 |

|——|——|

| 无 | 仅当前行 |

| `%` | 整个文件 |

| `n,m` | 第 n 到 m 行 |

| `.,$` | 当前行到文件末尾 |

| `'<,’>` | 可视模式选中的区域 |

| `.+1` | 当前行下一行 |

| `?^if?+1,$` | 从上一次 “if” 的下一行到文件末尾 |

**替换标志:**

| 标志 | 说明 |

|——|——|

| `g` | 全局替换(global) |

| `c` | 逐个确认(confirm) |

| `i` | 忽略大小写 |

| `I` | 大小写敏感 |

| `n` | 只报告匹配数量 |

**常用示例:**

“`vim

:s/foo/bar/           ” 当前行第一个 foo 替换为 bar

:s/foo/bar/g          ” 当前行所有 foo 替换为 bar

:%s/foo/bar/g         ” 全文件替换

:%s/foo/bar/gc        ” 全文件替换,逐个确认

:%s/\s\+$//           ” 删除行尾空白

:%s/^\s\+//           ” 删除行首空白

:%s/foo/bar/gI        ” 大小写敏感替换

:%s/\\/\\\\/g          ” 反斜杠转义(替换 \ 为 \\)

:'<,’>s/old/new/g     ” 可视模式下替换选中区域

:%s/”/’/g             ” 双引号替换为单引号

:%s/\/\/.*//g         ” 删除所有 // 注释

“`

**确认替换时的选项:**

“`

y – 替换当前

n – 跳过当前

a – 全部替换

q – 退出替换

l – 替换当前后退出

Ctrl+e – 向上滚动

Ctrl+y – 向下滚动

“`

## 7. 多文件操作

### 缓冲区

| 命令 | 说明 |

|——|——|

| `:e filename` | 打开文件 |

| `:e .` | 在文件浏览器打开当前目录 |

| `:bn` | 下一个缓冲区 |

| `:bp` | 上一个缓冲区 |

| `:b n` | 切换到第 n 个缓冲区 |

| `:bfirst` | 切换到第一个缓冲区 |

| `:blast` | 切换到最后一个缓冲区 |

| `:bd` | 删除当前缓冲区 |

| `:bd n` | 删除第 n 个缓冲区 |

| `:ls` 或 `:buffers` | 列出所有缓冲区 |

| `:bn!` | 强制切换(放弃修改) |

| `:e #` | 切换到上一个文件 |

| `Ctrl+^` | 切换到上一个文件 |

### 参数列表

| 命令 | 说明 |

|——|——|

| `:args` | 显示参数列表 |

| `:args *.c` | 将所有 .c 文件加入参数列表 |

| `:next` 或 `:n` | 下一个文件 |

| `:prev` 或 `:N` | 上一个文件 |

| `:argdo {cmd}` | 对参数列表所有文件执行命令 |

## 8. 多窗口操作

### 窗口分割

| 命令 | 说明 |

|——|——|

| `:sp` 或 `:split` | 水平分割窗口 |

| `:vsp` 或 `:vsplit` | 垂直分割窗口 |

| `:sp filename` | 分割并打开文件 |

| `:vsp filename` | 垂直分割并打开文件 |

| `Ctrl+w s` | 水平分割(当前文件) |

| `Ctrl+w v` | 垂直分割(当前文件) |

| `:new` | 新建空白水平窗口 |

| `:vnew` | 新建空白垂直窗口 |

| `Ctrl+w n` | 新建空白窗口 |

| `Ctrl+w T` | 将当前窗口移到新标签页 |

### 窗口导航

| 命令 | 说明 |

|——|——|

| `Ctrl+w h` | 移动到左侧窗口 |

| `Ctrl+w l` | 移动到右侧窗口 |

| `Ctrl+w j` | 移动到下方窗口 |

| `Ctrl+w k` | 移动到上方窗口 |

| `Ctrl+w t` | 移动到顶部窗口 |

| `Ctrl+w b` | 移动到底部窗口 |

| `Ctrl+w p` | 移动到上一个活跃窗口 |

| `Ctrl+w w` | 循环切换窗口 |

### 窗口调整

| 命令 | 说明 |

|——|——|

| `Ctrl+w =` | 所有窗口等宽等高 |

| `Ctrl+w _` | 当前窗口最大化高度 |

| `Ctrl+w |` | 当前窗口最大化宽度 |

| `n Ctrl+w _` | 设置当前窗口高度为 n 行 |

| `n Ctrl+w |` | 设置当前窗口宽度为 n 列 |

| `Ctrl+w >` | 窗口宽度 +5 |

| `Ctrl+w <` | 窗口宽度 -5 |

| `Ctrl+w +` | 窗口高度 +5 |

| `Ctrl+w -` | 窗口高度 -5 |

| `:res +n` | 高度增加 n 行 |

| `:vertical res +n` | 宽度增加 n 列 |

### 窗口关闭

| 命令 | 说明 |

|——|——|

| `:q` 或 `Ctrl+w q` | 关闭窗口 |

| `:only` 或 `Ctrl+w o` | 仅保留当前窗口 |

| `:hide` | 隐藏当前窗口 |

| `:qa` | 关闭所有窗口退出 |

| `:wa` | 保存所有窗口 |

### 标签页

| 命令 | 说明 |

|——|——|

| `:tabnew` 或 `:tabe` | 新建标签页 |

| `:tabnew filename` | 新建标签页并打开文件 |

| `:tabf filename` | 在新标签页打开文件 |

| `gt` 或 `:tabnext` | 切换到下一个标签页 |

| `gT` 或 `:tabprevious` | 切换到上一个标签页 |

| `n gt` | 切换到第 n 个标签页 |

| `:tabfirst` | 切换到第一个标签页 |

| `:tablast` | 切换到最后一个标签页 |

| `:tabdo {cmd}` | 对所有标签页执行命令 |

| `:tab split` | 在新标签页打开当前文件 |

| `:tabclose` | 关闭当前标签页 |

| `:tabonly` | 仅保留当前标签页 |

| `:tabmove n` | 移动标签页到第 n 位 |

| `:tabs` | 列出所有标签页 |

## 9. 寄存器与宏

### 寄存器

Vim 使用多个寄存器存储不同类型的数据:

| 寄存器 | 说明 |

|——–|——|

| `”` | 默认寄存器(复制/删除) |

| `0` | 复制专用寄存器(y) |

| `1-9` | 删除历史寄存器(数字越小越近) |

| `a-z` | 命名寄存器(手动指定) |

| `A-Z` | 追加到 a-z 对应小写寄存器 |

| `-` | 小删除寄存器(小于一行的删除) |

| `+` | 系统剪贴板(Linux) |

| `*` | 系统剪贴板(Linux 下同 +) |

| `_` | 黑洞寄存器(删除但不进入寄存器) |

| `=` | 表达式寄存器 |

| `/` | 搜索模式寄存器 |

| `:` | 上一次命令寄存器 |

| `.` | 上一次插入的文本 |

| `%` | 当前文件名 |

| `#` | 备用文件名 |

**寄存器使用:**

“`vim

“ayy     ” 复制当前行到寄存器 a

“ap      ” 从寄存器 a 粘贴

“bdd     ” 删除当前行到寄存器 b

“bP      ” 在上方粘贴寄存器 b

:reg a   ” 查看寄存器 a 的内容

:reg     ” 查看所有寄存器内容

“+y      ” 复制到系统剪贴板

“+p      ” 从系统剪贴板粘贴

“`

###

**录制宏:**

“`vim

q{a-z}   ” 开始录制到寄存器 a-z

{q}      ” 停止录制

” 录制示例:给行首添加行号

0         ” 跳到行首

i         ” 进入插入模式

1. <ESC>  ” 输入 “1. ” 然后退出

q         ” 停止录制

@a        ” 执行寄存器 a 中的宏

5@a       ” 执行 5 次

@@        ” 重复上一次宏

“`

**宏的高级用法:**

“`vim

qaI// <ESC>q    ” 录制:行首插入 //

qa0i/* <ESC>A */<ESC>q  ” 录制:行注释格式化

qa0f;i <ESC>q  ” 录制:查找分号并在其后加空格

“`

## 10. 折叠与标记

### 折叠方式

“`vim

:set foldmethod=manual   ” 手动折叠

:set foldmethod=marker   ” 以标记折叠({{{ }}})

:set foldmethod=syntax   ” 基于语法折叠

:set foldmethod=indent   ” 基于缩进折叠

:set foldmethod=expr     ” 基于表达式折叠

:set foldmethod=diff     ” diff 模式折叠

“`

### 折叠操作

| 命令 | 说明 |

|——|——|

| `zf` | 创建折叠(配合动作) |

| `zF` | 创建折叠(整行) |

| `zd` | 删除当前折叠 |

| `zD` | 递归删除折叠 |

| `zE` | 删除所有折叠 |

| `zo` | 打开当前折叠 |

| `zO` | 递归打开折叠 |

| `zc` | 关闭当前折叠 |

| `zC` | 递归关闭折叠 |

| `za` | 切换折叠(开/关) |

| `zA` | 递归切换折叠 |

| `zv` | 打开足够看到光标所在行 |

| `zm` | 折叠更多(减少折叠层数) |

| `zM` | 关闭所有折叠 |

| `zr` | 打开更多(增加折叠层数) |

| `zR` | 打开所有折叠 |

| `zx` | 更新折叠并打开当前行折叠 |

| `zX` | 重新应用折叠状态 |

**折叠快捷键示例:**

“`vim

zfj}      ” 折叠到下一个空行

zf%       ” 折叠匹配括号区域

zf’a      ” 从当前位置折叠到书签 a

zfa”      ” 折叠引号内的内容

“`

### 可视模式下的标记

| 命令 | 说明 |

|——|——|

| `:` | 选中区域自动变为 `:'<,’>` |

| `gv` | 重新选中上一次选中的区域 |

| `o` | 选中区域对角跳转 |

| `O` | 选中区域另一端跳转 |

## 11. 配置与个性化

### .vimrc 配置文件

Vim 的配置文件位于用户主目录下:

– Linux/Mac: `~/.vimrc`

– Windows: `$HOME/_vimrc`

**常用配置项:**

“`vim

” === 基础设置 ===

set number              ” 显示行号

set relativenumber      ” 显示相对行号

set cursorline          ” 高亮当前行

set cursorcolumn        ” 高亮当前列

set wrap                ” 自动换行

set linebreak           ” 英文单词断行

set showcmd             ” 显示命令

set showmode            ” 显示模式

set showmatch           ” 高亮匹配括号

set wildmenu            ” 命令补全菜单

set wildmode=longest:full  ” 补全模式

set scrolloff=5         ” 上下保留行数

set sidescrolloff=8     ” 左右滚动偏移

” === 缩进设置 ===

set tabstop=4           ” 制表符宽度

set softtabstop=4       ” 软制表符宽度

set shiftwidth=4        ” 自动缩进宽度

set expandtab           ” 用空格代替制表符

set autoindent          ” 自动缩进

set smartindent         ” 智能缩进

” === 搜索设置 ===

set incsearch           ” 增量搜索

set hlsearch            ” 高亮搜索结果

set ignorecase          ” 忽略大小写

set smartcase           ” 含大写时大小写敏感

set nowrapscan          ” 搜索到文件末尾停止

” === 配色与外观 ===

syntax on               ” 语法高亮

set background=dark     ” 深色背景配色

set termguicolors        ” True Color 支持

set laststatus=2        ” 总是显示状态栏

set ruler               ” 显示光标位置

set fillchars=vert:\    ” 垂直分割线样式

” === 文件设置 ===

set encoding=utf-8      ” 编码

set fileencoding=utf-8  ” 文件编码

set autoread            ” 文件外部修改时自动读取

set hidden              ” 允许切换未保存文件

set backup              ” 生成备份文件

set writebackup         ” 保存前先备份

set undofile            ” 持久化撤销历史

set undodir=~/.vim/undo ” 撤销文件目录

” === 快捷键 ===

let mapleader = “,”      ” 定义 leader 键

nnoremap <leader>w :w<CR>         ” 快速保存

nnoremap <leader>s :source ~/.vimrc<CR>  ” 重载配置

“`

### 常用插件管理

**手动安装插件结构:**

“`

~/.vim/

├── plugin/     # 插件文件

├── autoload/   # 自动加载

├── colors/    # 配色方案

└── ftplugin/  # 文件类型插件

“`

**使用插件管理器(如 vim-plug):**

“`bash

curl -fLo ~/.vim/autoload/plug.vim –create-dirs \

https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

“`

“`vim

” 在 .vimrc 中添加

call plug#begin(‘~/.vim/plugged’)

Plug ‘tpope/vim-sensible’      ” 基础配置

Plug ‘scrooloose/nerdtree’     ” 文件树

Plug ‘ctrlpvim/ctrlp.vim’      ” 文件搜索

Plug ‘vim-airline/vim-airline’  ” 状态栏

Plug ‘vim-airline/vim-airline-themes’  ” 状态栏主题

Plug ‘itchyny/lightline.vim’    ” 轻量状态栏

call plug#end()

“`

“`vim

:PlugInstall      ” 安装插件

:PlugUpdate       ” 更新插件

:PlugClean        ” 清理未使用的插件

:PlugUpgrade      ” 升级 vim-plug 本身

“`

### 常用插件推荐

| 插件 | 功能 |

|——|——|

| `nerdtree` | 文件浏览器树 |

| `ctrlp.vim` | 全局文件搜索 |

| `vim-fugitive` | Git 集成 |

| `vim-surround` | 环绕操作(快速添加/删除引号括号) |

| `vim-commentary` | 快速注释/取消注释 |

| `ack.vim` | 代码搜索 |

| `vim-go` | Go 语言支持 |

| `YouCompleteMe` | 代码补全 |

| `ALE` | 语法检查 |

| `lightline.vim` | 轻量状态栏 |

| `vim-startify` | 启动画面 |

| `vim-slash` | 搜索增强 |

| `vim-visual-multi` | 多光标编辑 |

| `fzf.vim` | 模糊搜索 |

### 常用键映射

“`vim

” 快速保存和退出

nnoremap <leader>w :w<CR>

nnoremap <leader>q :q<CR>

nnoremap <leader>x :wq<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

” 快速打开 .vimrc

nnoremap <leader>ev :vsplit $MYVIMRC<CR>

nnoremap <leader>sv :source $MYVIMRC<CR>

” 快速清除搜索高亮

nnoremap <leader>/ :noh<CR>

” 在当前文件目录打开终端

nnoremap <leader>te :terminal .<CR>

” 快速在当前位置打开文件

nnoremap <leader>e :edit <C-R>=expand(‘%:h’).’/'<CR>

“`

## 12. 实用技巧

### 高效编辑技巧

“`vim

” === 行操作 ===

J              ” 将下一行合并到当前行(留一个空格)

gJ             ” 将下一行合并(不留空格)

:join          ” 同 J 但可加范围

ddp            ” 交换当前行与下一行

ddkp           ” 交换当前行与上一行

” === 行列互换 ===

xp             ” 交换两个相邻字符

ddp            ” 交换两行

Vue            ” 全大写当前单词后返回 Normal

” === 大小写操作 ===

vu             ” 当前单词转小写

VU             ” 当前单词转大写

gUU            ” 当前行转大写

guu            ” 当前行转小写

g~g~w          ” 切换当前单词大小写

” === 重复与计数 ===

5.             ” 重复上一次操作5次

qa…q         ” 录制宏并执行

{n}Ctrl+a      ” 将数字加 n

{n}Ctrl+x      ” 将数字减 n

” === 二进制编辑 ===

:%!xxd         ” 以十六进制查看

:%!xxd -r      ” 恢复文本模式

:set binary    ” 二进制模式打开

” === 加密文件 ===

:X             ” 设置加密密码

:set key=      ” 移除加密

“`

### 命令行模式技巧

“`vim

” === 命令历史 ===

:               ” 打开命令行

q:              ” 从 Normal 模式打开命令历史窗口

q/              ” 从 Normal 模式打开搜索历史窗口

Ctrl+f          ” 在 Normal 模式切换到命令行历史

<Up>/<Down>    ” 浏览命令历史

” === 命令补全 ===

Tab             ” 下一个补全

Shift+Tab       ” 上一个补全

Ctrl+d          ” 显示所有补全选项

Ctrl+p         ” 上一个匹配

Ctrl+n         ” 下一个匹配

” === 范围表达式 ===

:.=            ” 当前行号

:$=            ” 最后一行行号

:.+5           ” 当前行下5行

:,+3s/foo/bar/ ” 当前行到下3行

” === 执行外部命令 ===

:!ls           ” 执行 ls

:!{cmd}        ” 执行任意命令

:r !{cmd}      ” 读取命令输出到光标后

:r! date       ” 插入当前日期

:w !sudo tee % ” 以 sudo 权限保存当前文件

“`

### 插入模式快捷键

| 快捷键 | 说明 |

|——–|——|

| `Ctrl+h` | 删除前一个字符(相当于 Backspace) |

| `Ctrl+w` | 删除前一个单词 |

| `Ctrl+u` | 删除到行首 |

| `Ctrl+t` | 缩进 |

| `Ctrl+d` | 取消缩进 |

| `Ctrl+y` | 复制上一行相同位置的字符 |

| `Ctrl+e` | 复制下一行相同位置的字符 |

| `Ctrl+r {reg}` | 插入寄存器内容 |

| `Ctrl+r =5*3<CR>` | 计算 5*3=15 并插入 |

| `Ctrl+v {code}` | 插入非常见字符 |

| `Ctrl+v u0041` | 插入十六进制 0041(A) |

| `Ctrl+o` | 临时进入 Normal 模式执行一个命令 |

| `Ctrl+[` | 同 ESC |

### 特殊字符输入

“`vim

Ctrl+v 000    ” 插入 ASCII 0 (空字符)

Ctrl+v 033    ” 插入八进制 033 对应的字符

Ctrl+v x41    ” 插入十六进制 41 (字母 A)

Ctrl+v 65     ” 插入 ASCII 65 (字母 A)

Ctrl+v <CR>   ” 插入换行符(显示为 ^M)

Ctrl+v <ESC>  ” 插入 ESC 键(显示为 ^[)

Ctrl+v <Tab>  ” 插入 Tab 字符

“`

### 视图与布局

“`vim

” === diff 模式 ===

:diffthis          ” 当前窗口进入 diff

:diffsplit {file}  ” 分屏并进入 diff

:diffupdate        ” 重新比较

]c                  ” 跳到下一个差异

[c                  ” 跳到上一个差异

do                  ” 从另一侧获取差异(obtain)

dp                  ” 将差异推送到另一侧(put)

:diffget RE        ” 获取特定缓冲区差异

:diffput RE        ” 推送差异到特定缓冲区

” === 比较模式 ===

vim -d file1 file2  ” 启动时直接进入比较

vimdiff file1 file2  ” vimdiff 等同于 vim -d

” === quickfix ===

:make               ” 执行编译

:copen              ” 打开 quickfix 窗口

:cclose             ” 关闭 quickfix 窗口

:cn                 ” 下一个错误

:cp                 ” 上一个错误

:cl                 ” 列出所有错误

:cc n               ” 显示第 n 个错误详情

“`

### 文件类型检测

“`vim

” 在 .vimrc 中设置文件类型

:filetype on

:filetype plugin on

:filetype indent on

” 手动设置文件类型

:set ft=c

:set ft=python

:set filetype=html

” 文件类型特定配置

autocmd FileType python setlocal expandtab shiftwidth=4

autocmd FileType c setlocal noexpandtab shiftwidth=4 tabstop=8

“`

### 自定义折叠表达式

“`vim

” 基于缩进的自动折叠

set foldmethod=indent

set foldlevel=99

nnoremap <space> za   ” 空格键切换折叠

” 基于标记的折叠

set foldmethod=marker

set foldmarker={{{,}}}

“`

### 持久化配置建议

“`vim

” === 持久化撤销 ===

if has(‘persistent_undo’)

    set undofile

    set undodir=~/.vim/undo

    silent !mkdir -p ~/.vim/undo > /dev/null 2>&1

endif

” === 持久化视图 ===

autocmd BufWinLeave * mkview

autocmd BufWinEnter * silent! loadview

” === 自动命令 ===

augroup vimrc_autocmds

    autocmd!

    ” 保存时删除行尾空白

    autocmd BufWritePre * :%s/\s\+$//

    ” 文件进入时去除尾随空白

    autocmd BufRead * :%s/\s\+$//

    ” C 文件使用 UNIX 换行符

    autocmd FileType c set fileformat=unix

    ” 保存时自动格式化

    autocmd BufWritePost * vimrc source ~/.vimrc

augroup END

“`

## 附录:Cheat Sheet(速查表)

### 移动

“`

h j k l     上下左右

w b e       单词跳转

0 $ ^       行首行尾

{ }         段落跳转

gg G        文件首尾

nG :n       跳转到行号

f F t T     行内字符跳转

* #         搜索当前词

/ ?         搜索

n N         搜索下一/上一

“`

### 编辑

“`

i a         进入插入

o O         新建行

x dd yy p   删除复制粘贴

u Ctrl+r    撤销重做

.           重复

r R         替换

c           修改

~ gU gu     大小写

>> << =     缩进

“`

### 导航

“`

Ctrl+w      窗口操作

:sp :vsp    分割窗口

:tab        标签页

%           括号匹配

m ‘        书签

“          跳转返回

Ctrl+o/i    跳转历史

“`

### 搜索替换

“`

/pattern    搜索

n N         下一上一

:s/old/new/ 替换

:&g         全局重复

:%s/..      全文替换

:g/pattern  全局命令

“`

### 高级

“`

q:          命令历史

:!          执行命令

:make       编译

:args       参数列表

:bn :bp     缓冲区切换

.           重复操作

“寄存器    寄存器操作

qa          宏录制

“`

*本文档使用 Vim 编写。Happy Vimming!*

上一篇 将驱动模块编译进内核的完整方法

# 将驱动模块编译进内核的完整方法 ## 目录 – [方法一:外部模块编译](#方法一外部模块编译最灵活) ...

下一篇 struct inode 和 struct file 详解

这两个是 Linux 内核中 VFS(虚拟文件系统)层的核心结构体,驱动开发者不需要自己定义它们,而是由内核在调用驱动函...