Linux命令速查 -- Vim 文本编辑器速查表
模式
与大多数编辑器不同,Vim 不会让你直接输入文本。它启动时处于普通模式(Normal mode),此时按键是命令而非文本输入。你需要根据操作目的在不同模式之间切换。| 按键 | 说明 |
|---|
| i | 进入插入模式:自由输入文本 |
| v | 进入可视模式:选择字符 |
| V | 进入可视行模式:选择整行 |
| Ctrl+v | 进入可视块模式:选择矩形区域 |
| : | 进入命令行模式:运行命令 |
| R | 进入替换模式:覆盖已有文本 |
| Esc | 返回普通模式 |
最佳学习方式是运行内置的交互式教程:在终端中执行vimtutor,大约需要 30 分钟。文件管理
所有以:开头的命令都在命令行模式下输入。按Enter执行。| 按键 | 说明 |
|---|
| :e | 从磁盘重新加载当前文件 |
| :e {file} | 打开文件进行编辑 |
| :w | 保存当前文件 |
| :w {file} | 另存为其他文件 |
| :q | 退出(如有未保存更改则失败) |
| :q! | 退出并丢弃未保存的更改 |
| :wq | 保存并退出 |
| :x | 保存并退出(仅在文件被修改时才写入) |
导航
以下操作在普通模式下有效。Vim 使用h j k l代替方向键,但方向键同样可用。| 按键 | 说明 |
|---|
| h | 向左移动 |
| j | 向下移动 |
| k | 向上移动 |
| l | 向右移动 |
| w | 跳到下一个单词开头 |
| W | 跳到下一个 WORD 开头(以空白分隔) |
| e | 跳到当前单词末尾 |
| b | 跳到上一个单词开头 |
| 0 | 跳到行首 |
| ^ | 跳到行首第一个非空白字符 |
| $ | 跳到行尾 |
| { / } | 跳到上/下一段落 |
| % | 跳到匹配的括号 |
| Ctrl+d | 向下滚动半页 |
| Ctrl+u | 向上滚动半页 |
| gg | 跳到文件第一行 |
| G | 跳到文件最后一行 |
| {number}G | 跳到指定行号 |
| gk / gj | 向上/向下移动一个显示行(用于自动换行) |
插入
以下命令从普通模式进入插入模式,但光标位置不同。完成后按Esc返回普通模式。| 按键 | 说明 |
|---|
| i | 在光标前插入 |
| I | 在行首插入 |
| a | 在光标后追加 |
| A | 在行尾追加 |
| o | 在当前行下方新开一行并插入 |
| O | 在当前行上方新开一行并插入 |
| R | 替换模式:覆盖已有字符 |
| :r {file} | 在光标下方插入文件内容 |
编辑
Vim 将操作符(如d删除、y复制、c修改)与动作(如w单词、$行尾)组合使用:dw删除一个单词,c$重写该行剩余部分。| 按键 | 说明 |
|---|
| u | 撤销上一次更改 |
| Ctrl+r | 重做上一次撤销的更改 |
| yy | 复制(yank)当前行 |
| y{motion} | 复制动作覆盖的文本(如 yw 复制一个单词) |
| p | 在光标后粘贴 |
| P | 在光标前粘贴 |
| x | 删除光标下的字符 |
| r{char} | 替换光标下的字符 |
| dd | 删除当前行 |
| d{motion} | 删除动作覆盖的文本(如 dw 删除一个单词) |
| c{motion} | 删除文本并进入插入模式 |
| J | 将下一行合并到当前行 |
| >> / << | 缩进 / 取消缩进当前行 |
| . | 重复上一次更改 |
删除和复制的文本都进入同一个寄存器,因此dd然后p可以移动一行。计数与文本对象
在任何命令前加数字即可重复执行:3dd删除三行,2w跳两个单词。文本对象描述光标周围的结构:i表示内部,a包含定界符。| 按键 | 说明 |
|---|
| ciw | 修改光标下的单词 |
| diw | 删除光标下的单词 |
| di" | 删除引号内的所有内容 |
| ci( | 修改括号内的所有内容 |
| da( | 删除括号及其内容 |
| yip | 复制当前段落 |
搜索与替换
在普通模式下按/或?开始搜索。替换命令使用:命令行。| 按键 | 说明 |
|---|
| /pattern | 向前搜索模式 |
| ?pattern | 向后搜索模式 |
| n | 跳到下一个匹配 |
| N | 跳到上一个匹配 |
| * | 向前搜索光标下的单词 |
| # | 向后搜索光标下的单词 |
| :s/foo/bar/ | 替换当前行第一个 foo 为 bar |
| :s/foo/bar/g | 替换当前行所有 foo 为 bar |
| :%s/foo/bar/g | 替换整个文件中所有 foo 为 bar |
| :%s/foo/bar/gc | 替换整个文件,每次替换前确认 |
| :noh | 清除搜索高亮 |
多窗口
Vim 可以分割屏幕同时显示多个文件。窗口命令以Ctrl+w开头。| 按键 | 说明 |
|---|
| :split {file} | 水平分割并打开文件 |
| :vsplit {file} | 垂直分割并打开文件 |
| :sview {file} | 水平分割并以只读方式打开文件 |
| Ctrl+w w | 切换到下一个窗口 |
| Ctrl+w h j k l | 切换到该方向的窗口 |
| Ctrl+w _ | 最大化当前窗口高度 |
| Ctrl+w = | 使所有窗口等大小 |
| :hide | 关闭当前窗口 |
| :only | 关闭除当前窗口外的所有窗口 |
每个打开的文件都存在于一个缓冲区中,无论是否可见。| 按键 | 说明 |
|---|
| :ls | 列出所有打开的缓冲区 |
| :b {number} | 按编号切换到指定缓冲区 |
| :bn / :bp | 切换到下一个/上一个缓冲区 |
| :bd | 关闭(删除)当前缓冲区 |