入门:Vim
This commit is contained in:
parent
03d4ebba13
commit
40079c9e1a
810
wiki/getting-started/Vim/Vim 入门.md
Normal file
810
wiki/getting-started/Vim/Vim 入门.md
Normal file
@ -0,0 +1,810 @@
|
|||||||
|
---
|
||||||
|
title: Vim 快速入门
|
||||||
|
description: Vim 快速入门
|
||||||
|
keywords:
|
||||||
|
- Vim
|
||||||
|
- 入门
|
||||||
|
tags:
|
||||||
|
- Vim
|
||||||
|
sidebar_position: 1
|
||||||
|
author: 7Wate
|
||||||
|
date: 2022-11-16
|
||||||
|
---
|
||||||
|
|
||||||
|
[Vim](http://www.vim.org/) 8.2 快速参考备忘单的有用集合,可帮助您更快地学习 vim 编辑器。
|
||||||
|
|
||||||
|
## 入门
|
||||||
|
|
||||||
|
### 运动图
|
||||||
|
|
||||||
|
```vim
|
||||||
|
▼/▶ 光标 ▽/▷ 目标
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 左右动作
|
||||||
|
|
||||||
|
```vim
|
||||||
|
╭┈┈┈┈┈┈┈┈┈┈┈┈┈ |
|
||||||
|
├┈┈┈┈┈┈┈┈┈┈┈┈┈ 0 $ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
|
||||||
|
┆ ╭┈┈┈┈┈┈┈┈┈┈ ^ fe ┈┈┈┈┈┈┈┈╮ ┆
|
||||||
|
┆ ┆ ╭┈┈┈┈┈┈┈ Fo te ┈┈┈┈┈┈┈╮┆ ┆
|
||||||
|
┆ ┆ ┆╭┈┈┈┈┈┈ To 30| ┈┈┈╮ ┆┆ ┆
|
||||||
|
┆ ┆ ┆┆ ╭┈┈┈┈ ge w ┈┈┈╮ ┆ ┆┆ ┆
|
||||||
|
┆ ┆ ┆┆ ┆ ╭┈┈ b e ┈╮ ┆ ┆ ┆┆ ┆
|
||||||
|
┆ ┆ ┆┆ ┆ ┆ ╭h l╮ ┆ ┆ ┆ ┆┆ ┆
|
||||||
|
▽ ▽ ▽▽ ▽ ▽ ▽▼ ▼▽ ▽ ▽ ▽ ▽▽ ▽
|
||||||
|
echo "A cheatsheet from quickReference"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 上下动作
|
||||||
|
|
||||||
|
```vim
|
||||||
|
- SCREEN 1 START
|
||||||
|
╭┈┬┈┈┈┈┈┈┈┈┈▷ #!/usr/bin/python
|
||||||
|
┆ ┆ ╭┈┈┈▷
|
||||||
|
┆ ┆ ┆ print("Hello")
|
||||||
|
┆ ┆ { } ▶ print("Vim")
|
||||||
|
┆ ┆ ┆ print("!")
|
||||||
|
┆ ┆ └┈▷
|
||||||
|
┆ ┆ ╭┈┈┈┬┈┈┈▷ print("Welcome")
|
||||||
|
G gg H M L k j ▶ print("to")
|
||||||
|
┆ ┆ └┈▷ print("Quick Reference")
|
||||||
|
┆ ┆ print("/vim")
|
||||||
|
┆ ┆
|
||||||
|
┆ ╰┈┈┈┈┈▷
|
||||||
|
┆ - SCREEN 1 END
|
||||||
|
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈▷ print("SCREEN 2")
|
||||||
|
```
|
||||||
|
|
||||||
|
### 动作
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| --------------------- | ------------- |
|
||||||
|
| `h` | `j` | `k` | `l` | 方向键 |
|
||||||
|
| `<C-u>` */* `<C-d>` | 上/下半页 |
|
||||||
|
| `<C-b>` */* `<C-f>` | 向上/向下翻页 |
|
||||||
|
|
||||||
|
#### 字(词)
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------ | ----------------- |
|
||||||
|
| `b` */* `w` | 上一个/下一个单词 |
|
||||||
|
| `ge` */* `e` | 上一个/下一个词尾 |
|
||||||
|
|
||||||
|
#### 行
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------------------- | ----------------- |
|
||||||
|
| `0` *(zero)* */* `$` | 行的开始/结束 |
|
||||||
|
| `^` | 行开头 *(非空白)* |
|
||||||
|
|
||||||
|
#### 字符串
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------- | ------------------------------- |
|
||||||
|
| `Fe` */* `fe` | 移动到上一个/下一个`e` |
|
||||||
|
| `To` */* `to` | 在上一个/下一个`o`之前/之后移动 |
|
||||||
|
| `|` */* `n|` | 转到第一个/`n`列 |
|
||||||
|
|
||||||
|
#### 文档
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------ | ----------------- |
|
||||||
|
| `gg` */* `G` | 第一行/最后一行 |
|
||||||
|
| `:n` | `nG` | 转到第 `n` 行 |
|
||||||
|
| `}` */* `{` | 下一个/上一个空行 |
|
||||||
|
|
||||||
|
#### 窗口
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ---------------------- | -------------- |
|
||||||
|
| `H` */* `M` */* `L` | 上/中/下屏幕 |
|
||||||
|
| `zt` */* `zz` */* `zb` | 上/中/下这条线 |
|
||||||
|
|
||||||
|
### 插入模式
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ---------------------- | -------------------- |
|
||||||
|
| `i` */* `a` | 在光标之前/之后插入 |
|
||||||
|
| `I` */* `A` | 插入行的开始/结束 |
|
||||||
|
| `o` */* `O` *(letter)* | 在下方/上方插入新行 |
|
||||||
|
| `s` */* `S` | 删除字符/行并插入 |
|
||||||
|
| `C` */* `cc` | 更改到/当前行的结尾 |
|
||||||
|
| `gi` | 在最后一个插入点插入 |
|
||||||
|
| `Esc` | `<C-[>` | 退出插入模式 |
|
||||||
|
|
||||||
|
### 保存和退出
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------------- | ------------------- |
|
||||||
|
| `:w` | 保存 |
|
||||||
|
| `:q` | 关闭文件 |
|
||||||
|
| `:wq` | `:x` | `ZZ` | 保存并退出 |
|
||||||
|
| `:wqa` | 保存并退出所有文件 |
|
||||||
|
| `:q!` | `ZQ` | 强制退出 |
|
||||||
|
| `:qa` | 关闭所有文件 |
|
||||||
|
| `:qa!` | 强制退出所有文件 |
|
||||||
|
| `:w` new.txt | 写入`new.txt` |
|
||||||
|
| `:sav` new.txt | 保存并编辑`new.txt` |
|
||||||
|
| `:w` !sudo tee % | 写入只读文件 |
|
||||||
|
|
||||||
|
### 正常模式
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| --------------------- | ----------------- |
|
||||||
|
| `r` | 替换一个字符 |
|
||||||
|
| `R` | 进入替换模式 |
|
||||||
|
| `u` */* `3u` | 撤消更改`1`/`3`次 |
|
||||||
|
| `U` | 在一行上撤消更改 |
|
||||||
|
| `J` | 加入下一行 |
|
||||||
|
| `<C-r>` */* 5 `<C-r>` | 重做更改`1`/`5`次 |
|
||||||
|
|
||||||
|
### 剪切和粘贴
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------- | ------------------- |
|
||||||
|
| `x` | 删除字符 *(剪切)* |
|
||||||
|
| `p` */* `P` | 在之后/之前粘贴 |
|
||||||
|
| `xp` | 交换两个字符 |
|
||||||
|
| `D` | 删除到行尾 *(剪切)* |
|
||||||
|
| `dw` | 删除单词 *(剪切)* |
|
||||||
|
| `dd` | 删除线 *(剪切)* |
|
||||||
|
| `ddp` | 交换两条线 |
|
||||||
|
| `yy` | 拉线 *(复制)* |
|
||||||
|
| `"*p` | `"+p` | 从系统剪贴板粘贴 |
|
||||||
|
| `"*y` | `"+y` | 粘贴到系统剪贴板 |
|
||||||
|
|
||||||
|
#### 在可视化模式下
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ----------- | ------------------ |
|
||||||
|
| `d` *|* `x` | 删除选择 *(剪切)* |
|
||||||
|
| `s` | 替换选择 |
|
||||||
|
| `y` | Yank 选择 *(复制)* |
|
||||||
|
|
||||||
|
### 重复
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | -------------------------------- |
|
||||||
|
| `.` | 重复上一个命令 |
|
||||||
|
| `;` | 重复最新的 `f`、`t`、`F` 或 `T` |
|
||||||
|
| `,` | 重复最新的`f`、`t`、`F`或`T`颠倒 |
|
||||||
|
| `&` | 重复最后一个`:s` |
|
||||||
|
| `@:` | 重复命令行命令 |
|
||||||
|
|
||||||
|
### 可视化模式
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ----------- | ------------------ |
|
||||||
|
| `v` | 进入可视化模式 |
|
||||||
|
| `V` | 进入视线模式 |
|
||||||
|
| `<C-v>` | 进入可视化阻挡模式 |
|
||||||
|
| `ggVG` | 选择所有文本 |
|
||||||
|
| `>` */* `<` | 向右/向左移动文本 |
|
||||||
|
|
||||||
|
### 宏
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ----- | --------------- |
|
||||||
|
| `qi` | 录制宏 `i` |
|
||||||
|
| `q` | 停止录制宏 |
|
||||||
|
| `@i` | 运行宏`i` |
|
||||||
|
| `7@i` | 运行宏 `i` 7 次 |
|
||||||
|
| `@@` | 重复上一个宏 |
|
||||||
|
|
||||||
|
您可以为任何字母保存宏,而不仅仅是 `i`
|
||||||
|
|
||||||
|
## Vim 运算符
|
||||||
|
|
||||||
|
### 用法
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ---- |
|
||||||
|
| `d` | w |
|
||||||
|
| 运算符 | 动作 |
|
||||||
|
|
||||||
|
将 [可用运算符](https://github.com/jaywcjlove/reference/blob/main/docs/vim.md#可用运算符) 与 [动作](https://github.com/jaywcjlove/reference/blob/main/docs/vim.md#动作) 结合使用以使用它们
|
||||||
|
|
||||||
|
### 可用运算符
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | --------------------- |
|
||||||
|
| `d` | 删除 |
|
||||||
|
| `y` | Yank *(复制)* |
|
||||||
|
| `c` | 更改 *(删除然后插入)* |
|
||||||
|
| `p` | 粘贴 |
|
||||||
|
| `=` | 格式代码 |
|
||||||
|
| `g~` | 切换案例 |
|
||||||
|
| `gU` | 大写 |
|
||||||
|
| `gu` | 小写 |
|
||||||
|
| `>` | 右缩进 |
|
||||||
|
| `<` | 左缩进 |
|
||||||
|
| `!` | 通过外部程序过滤 |
|
||||||
|
|
||||||
|
### 例子
|
||||||
|
|
||||||
|
| 组合 | 说明 |
|
||||||
|
| --------- | ----------------------- |
|
||||||
|
| `d`d | 删除当前行 |
|
||||||
|
| `d`j | 删除两行 |
|
||||||
|
| `d`w | 删除到下一个单词 |
|
||||||
|
| `d`b | 删除到单词的开头 |
|
||||||
|
| `d`fa | 删除直到 `a` 字符 |
|
||||||
|
| `d`/hello | 删除直到 `hello` |
|
||||||
|
| `c`c | 更改当前行,与 `S` 同义 |
|
||||||
|
| `y`y | 复制当前行 |
|
||||||
|
| `>`j | 缩进 2 行 |
|
||||||
|
| gg`d`G | 删除完整的文档 |
|
||||||
|
| gg`=`G | 缩进一个完整的文档 |
|
||||||
|
| gg`y`G | 复制整个文档 |
|
||||||
|
|
||||||
|
### 计数
|
||||||
|
|
||||||
|
```vim
|
||||||
|
[数字] <运算符> <动作>
|
||||||
|
<运算符> [数字] <动作>
|
||||||
|
```
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
| 组合 | 说明 |
|
||||||
|
| ----- | --------------- |
|
||||||
|
| 2`d`d | 删除 `2` 行 |
|
||||||
|
| 6`y`y | 复制 `6` 行 |
|
||||||
|
| `d`3w | 删除 `3` 字 |
|
||||||
|
| `d`5j | 向下删除 `5` 行 |
|
||||||
|
| `>`4k | 向上缩进 `4` 行 |
|
||||||
|
|
||||||
|
## Vim 文本对象
|
||||||
|
|
||||||
|
### 用法
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ---------------------------- |
|
||||||
|
| `v` | i */* a |
|
||||||
|
| Operator | inner(内部) */* around(周围) |
|
||||||
|
|
||||||
|
文本块内部或周围使用 [operator](https://github.com/jaywcjlove/reference/blob/main/docs/vim.md#可用运算符) 进行操作
|
||||||
|
|
||||||
|
### 文本对象
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ------------------- |
|
||||||
|
| p | 段落 |
|
||||||
|
| w | 单词 |
|
||||||
|
| W | WORD *(被空格包围)* |
|
||||||
|
| s | 句子 |
|
||||||
|
| [ ( { < | []、() 或 {} 块 |
|
||||||
|
| ] ) } > | []、() 或 {} 块 |
|
||||||
|
| ' " ` | 带引号的字符串 |
|
||||||
|
| b | 一个块 [( |
|
||||||
|
| B | [{中的一个块 |
|
||||||
|
| t | 一个 HTML 标签块 |
|
||||||
|
|
||||||
|
查看 `:help text-objects`
|
||||||
|
|
||||||
|
### 删除
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | --------------------- |
|
||||||
|
| `d`iw | 删除内词 |
|
||||||
|
| `d`is | 删除内句 |
|
||||||
|
| `d`i" | 引号中删除 |
|
||||||
|
| `d`a" | 删除引号 *(包括引号)* |
|
||||||
|
| `d`ip | 删除段落 |
|
||||||
|
|
||||||
|
### 选择
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ------------------------------ |
|
||||||
|
| `v`i" | 选择内引号“`...`{.underline}” |
|
||||||
|
| `v`a" | 选择引号`"..."`{.underline} |
|
||||||
|
| `v`i[ | 选择内括号 [`...`{.underline}] |
|
||||||
|
| `v`a[ | 选择括号`[...]`{.underline} |
|
||||||
|
| `v`iw | 选择内词 |
|
||||||
|
| `v`ip | 选择内部段落 |
|
||||||
|
| `v`ipip | 选择更多段落 |
|
||||||
|
|
||||||
|
### 杂项
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ------------------------ |
|
||||||
|
| `c`iw | 换内字 |
|
||||||
|
| `c`i" | 更改内部引号 |
|
||||||
|
| `c`it | 更改内部标签 (HTML) |
|
||||||
|
| `c`ip | 更改内部段落 |
|
||||||
|
| `y`ip | Yank 段落 |
|
||||||
|
| `y`ap | Yank 段落 *(包括换行符)* |
|
||||||
|
|
||||||
|
## Vim 多个文件
|
||||||
|
|
||||||
|
### Buffers (缓冲器)
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ---------- | ------------------------ |
|
||||||
|
| `:e file` | 在新缓冲区中编辑文件 |
|
||||||
|
| `:bn` | 转到下一个缓冲区 |
|
||||||
|
| `:bp` | 转到上一个缓冲区 |
|
||||||
|
| `:bd` | 从缓冲区列表中删除文件 |
|
||||||
|
| `:b 5` | 打开缓冲区 #5 |
|
||||||
|
| `:b file` | 按文件转到缓冲区 |
|
||||||
|
| `:ls` | 列出所有打开的缓冲区 |
|
||||||
|
| `:sp file` | 打开和拆分窗口 |
|
||||||
|
| `:vs file` | 打开和垂直拆分窗口 |
|
||||||
|
| `:hid` | 隐藏此缓冲区 |
|
||||||
|
| `:wn` | 写入文件并移至下一个 |
|
||||||
|
| `:tab ba` | 将所有缓冲区编辑为选项卡 |
|
||||||
|
|
||||||
|
### 窗口
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ------------------- | ---------------- |
|
||||||
|
| `<C-w>` `s` | 拆分窗口 |
|
||||||
|
| `<C-w>` `v` | 垂直拆分窗口 |
|
||||||
|
| `<C-w>` `w` | 切换窗口 |
|
||||||
|
| `<C-w>` `q` | 退出一个窗口 |
|
||||||
|
| `<C-w>` `T` | 拆分成一个新标签 |
|
||||||
|
| `<C-w>` `x` | 用下一个交换当前 |
|
||||||
|
| `<C-w>` `-` */* `+` | 减少/增加高度 |
|
||||||
|
| `<C-w>` `<` */* `>` | 减少/增加宽度 |
|
||||||
|
| `<C-w>` `|` | 最大宽度 |
|
||||||
|
| `<C-w>` `=` | 同样高和宽 |
|
||||||
|
| `<C-w>` `h` */* `l` | 转到左/右窗口 |
|
||||||
|
| `<C-w>` `j` */* `k` | 转到上/下窗口 |
|
||||||
|
|
||||||
|
### 选项卡
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------------- | -------------------------- |
|
||||||
|
| `:tabe [file]` | E在新选项卡中编辑文件 |
|
||||||
|
| `:tabf [file]` | 如果在新选项卡中存在则打开 |
|
||||||
|
| `:tabc` | C失去当前选项卡 |
|
||||||
|
| `:tabo` | 关闭o其他选项卡 |
|
||||||
|
| `:tabs` | 列出所有标签 |
|
||||||
|
| `:tabr` | 转到第一个r标签 |
|
||||||
|
| `:tabl` | 转到 last 选项卡 |
|
||||||
|
| `:tabm 0` | 我转到位置 `0` |
|
||||||
|
| `:tabn` | 转到 next 选项卡 |
|
||||||
|
| `:tabp` | 转到p上一个标签 |
|
||||||
|
|
||||||
|
#### 正常模式
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ---------------- |
|
||||||
|
| `gt` | 转到 next 选项卡 |
|
||||||
|
| `gT` | 转到p上一个标签 |
|
||||||
|
| `2gt` | 转到标签编号 `2` |
|
||||||
|
|
||||||
|
## Vim 搜索和替换
|
||||||
|
|
||||||
|
### 搜索
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| -------- | ------------------------------------------------------------ |
|
||||||
|
| `/foo` | 向前搜索 |
|
||||||
|
| `/foo\c` | 向前搜索 *(不区分大小写)* |
|
||||||
|
| `?foo` | 向后搜索 |
|
||||||
|
| `/\v\d+` | 使用 [regex](https://github.com/jaywcjlove/reference/blob/main/docs/regex.md) 搜索 |
|
||||||
|
| `n` | 下一个匹配的搜索模式 |
|
||||||
|
| `N` | 上一个匹配的搜索 |
|
||||||
|
| `*` | 向前搜索当前单词 |
|
||||||
|
| `#` | 向后搜索当前单词 |
|
||||||
|
|
||||||
|
### 更换行
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:[range]s/{pattern}/{str}/[flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ----------------- | ------------------------------------------------------------ |
|
||||||
|
| `:s/old/new` | 先更换 |
|
||||||
|
| `:s/old/new/g` | 全部替换 |
|
||||||
|
| `:s/\vold/new/g` | 全部替换为 [regex](https://github.com/jaywcjlove/reference/blob/main/docs/regex.md) |
|
||||||
|
| `:s/old/new/gc` | 全部替换_(确认)_ |
|
||||||
|
| `:s/old/new/i` | 先忽略大小写替换 |
|
||||||
|
| `:2,6s/old/new/g` | 在 `2`-`6` 行之间替换 |
|
||||||
|
|
||||||
|
### 替换文件
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:%s/{pattern}/{str}/[flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ----------------- | ------------------------------------------------------------ |
|
||||||
|
| `:%s/old/new` | 先更换 |
|
||||||
|
| `:%s/old/new/g` | 全部替换 |
|
||||||
|
| `:%s/old/new/gc` | 全部替换 *(确认)* |
|
||||||
|
| `:%s/old/new/gi` | 全部替换 *(忽略大小写)* |
|
||||||
|
| `:%s/\vold/new/g` | 全部替换为 [regex](https://github.com/jaywcjlove/reference/blob/main/docs/regex.md) |
|
||||||
|
|
||||||
|
### 范围
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ------- | --------------------- |
|
||||||
|
| `%` | 整个文件 |
|
||||||
|
| `’<,’>` | 当前选择 |
|
||||||
|
| `5` | 第 `5` 行 |
|
||||||
|
| `5,10` | 第 `5` 行到第 `10` 行 |
|
||||||
|
| `$` | 最后一行 |
|
||||||
|
| `2,$` | 第 `2` 行到最后 |
|
||||||
|
| `.` | 当前行 |
|
||||||
|
| `,3` | 接下来的 `3` 行 |
|
||||||
|
| `-3,` | 转发 `3` 行 |
|
||||||
|
|
||||||
|
### 全局命令
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:[range]g/{pattern}/[command]
|
||||||
|
```
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ------------ | --------------------------- |
|
||||||
|
| `:g/foo/d` | 删除包含 `foo` 的行 |
|
||||||
|
| `:g!/foo/d` | 删除不包含 `foo` 的行 |
|
||||||
|
| `:g/^\s*$/d` | 删除所有空行 |
|
||||||
|
| `:g/foo/t$` | 将包含 `foo` 的行复制到 EOF |
|
||||||
|
| `:g/foo/m$` | 将包含 `foo` 的行移动到 EOF |
|
||||||
|
| `:g/^/m0` | 反转文件 |
|
||||||
|
| `:g/^/t.` | 复制每一行 |
|
||||||
|
|
||||||
|
### Inverse(逆) :g
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:[range]v/{pattern}/[command]
|
||||||
|
```
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ---------- | --------------------------------------- |
|
||||||
|
| `:v/foo/d` | 删除不包含`foo`的行 *(还有`:g!/foo/d`)* |
|
||||||
|
|
||||||
|
### Flags(标志)
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ---- | -------------- |
|
||||||
|
| `g` | 替换所有出现 |
|
||||||
|
| `i` | 忽略大小写 |
|
||||||
|
| `I` | 不要忽略大小写 |
|
||||||
|
| `c` | 确认每个替换 |
|
||||||
|
|
||||||
|
### 替换表达式(魔术)
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ------------ | ------------------------------- |
|
||||||
|
| `&` *|* `\0` | 替换为整个匹配的 |
|
||||||
|
| `\1`...`\9` | 替换为 0-9 组 |
|
||||||
|
| `\u` | 大写下一个字母 |
|
||||||
|
| `\U` | 后面的大写字符 |
|
||||||
|
| `\l` | 小写下一个字母 |
|
||||||
|
| `\L` | 后面的字符小写 |
|
||||||
|
| `\e` | `\u`、`\U`、`\l` 和 `\L` 的结尾 |
|
||||||
|
| `\E` | `\u`、`\U`、`\l` 和 `\L` 的结尾 |
|
||||||
|
|
||||||
|
### 例子
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:s/a\|b/xxx\0xxx/g # 将 "a b" 修改为 "xxxaxxx xxxbxxx"
|
||||||
|
:s/test/\U& file/ # 将 "test" 修改为 "TEST FILE"
|
||||||
|
:s/\(test\)/\U\1\e file/ # 将 "test" 修改为 "TEST file"
|
||||||
|
:s/\v([abc])([efg])/\2\1/g # 将 "af fa bg" 修改为 "fa fa gb"
|
||||||
|
:s/\v\w+/\u\0/g # 将 "bla bla" 修改为 "Bla Bla"
|
||||||
|
:s/\v([ab])|([cd])/\1x/g # 将 "a b c d" 修改为 "ax bx x x"
|
||||||
|
:%s/.*/\L&/ # 将 "HTML" 修改为 "html"
|
||||||
|
:s/\v<(.)(\w*)/\u\1\L\2/g # 将单词的每个首字母大写
|
||||||
|
:%s/^\(.*\)\n\1/\1/ # 删除重复行
|
||||||
|
:%s/<\/\=\(\w\+\)\>/\U&/g # 将 HTML 标记转换为大写
|
||||||
|
:g/^pattern/s/$/mytext # 查找文本并将其附加到末尾
|
||||||
|
:g/pattern/norm! @i # 在匹配行上运行宏
|
||||||
|
/^\(.*\)\(\r\?\n\1\)\+$ # 查看重复行
|
||||||
|
/\v^(.*)(\r?\n\1)+$ # 查看重复行(非常神奇)
|
||||||
|
:v/./,/./-j # 将空行压缩成空行
|
||||||
|
:g/<p1>/,/<p2>/d # 从 <p1> 到 <p2> 包含删除
|
||||||
|
```
|
||||||
|
|
||||||
|
## Vimdiff
|
||||||
|
|
||||||
|
### 用法
|
||||||
|
|
||||||
|
```vim
|
||||||
|
vimdiff file1 file2 [file3]
|
||||||
|
vim -d file1 file2 [file3]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 编辑
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:[range]diffget [bufspec]
|
||||||
|
:[range]diffput [bufspec]
|
||||||
|
```
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------------- | --------------- |
|
||||||
|
| `do` */* `:diffget` | 获取(get)差异 |
|
||||||
|
| `dp` */* `:diffput` | 放差价 |
|
||||||
|
| `:dif` | 重新扫描差异 |
|
||||||
|
| `:diffo` | 关闭差异模式 |
|
||||||
|
| `:1,$+1diffget` | 获取所有差异 |
|
||||||
|
| `ZQ` | 不做改动就退出 |
|
||||||
|
|
||||||
|
请参阅:[范围](https://github.com/jaywcjlove/reference/blob/main/docs/vim.md#范围)
|
||||||
|
|
||||||
|
### 折叠
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------- | -------------------------- |
|
||||||
|
| `zo` */* `zO` | 打开 |
|
||||||
|
| `zc` */* `zC` | 关 |
|
||||||
|
| `za` */* `zA` | 切换 |
|
||||||
|
| `zv` | 这条线的打开折叠 |
|
||||||
|
| `zM` | 关闭所有 |
|
||||||
|
| `zR` | 打开所有 |
|
||||||
|
| `zm` | 折叠更多 *(折叠级别 += 1)* |
|
||||||
|
| `zr` | 少折叠 *(折叠级别 -= 1)* |
|
||||||
|
| `zx` | 更新折叠 |
|
||||||
|
|
||||||
|
### 跳跃
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | ---------- |
|
||||||
|
| `]c` | 下一个区别 |
|
||||||
|
| `[c` | 以前的区别 |
|
||||||
|
|
||||||
|
## 各种各样的
|
||||||
|
|
||||||
|
### Case
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------------- | --------------------- |
|
||||||
|
| `vU` | *大写* 字母 |
|
||||||
|
| `vu` | *小写* 字符 |
|
||||||
|
| `~` | *切换案例* 字符 |
|
||||||
|
| `viw` `U` | *大写* 字 |
|
||||||
|
| `viw` `u` | *小写* 字 |
|
||||||
|
| `viw` `~` | *切换案例* 字 |
|
||||||
|
| `VU` */* `gUU` | *大写* 行 |
|
||||||
|
| `Vu` */* `guu` | *小写* 行 |
|
||||||
|
| `V~` */* `g~~` | *切换案例* 线 |
|
||||||
|
| `gggUG` | *大写* 所有文本 |
|
||||||
|
| `ggguG` | *小写* 所有文本 |
|
||||||
|
| `ggg~G` | *切换大小写* 所有文本 |
|
||||||
|
|
||||||
|
### 跳跃
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | --------------------- |
|
||||||
|
| `<C-o>` | 返回上一个 |
|
||||||
|
| `<C-i>` | 向前 |
|
||||||
|
| `gf` | 转到光标中的文件 |
|
||||||
|
| `ga` | 显示十六进制、ASCII值 |
|
||||||
|
|
||||||
|
### 其他命令行
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| -------------- | ------------------------------- |
|
||||||
|
| `:h` | 帮助打开帮助视图 |
|
||||||
|
| `:edit!` | 重新加载当前文件 |
|
||||||
|
| `:2,8m0` | 将行 `2`-`8` 移动到 `0` |
|
||||||
|
| `:noh` | 清除搜索亮点 |
|
||||||
|
| `:sort` | 排序行 |
|
||||||
|
| `:ter` | 打开终端窗口 |
|
||||||
|
| `:set paste` | 启用插入粘贴子模式 |
|
||||||
|
| `:set nopaste` | 禁用插入粘贴子模式 |
|
||||||
|
| `:cq` | 退出并出现错误 *(正在中止 Git)* |
|
||||||
|
|
||||||
|
### 导航
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------- | ------------------- |
|
||||||
|
| `%` | 最近/匹配的`{[()]}` |
|
||||||
|
| `[(` *|* `[{` | 上一个 `(` 或 `{` |
|
||||||
|
| `])` *|* `]{` | 下一个`)`或`}` |
|
||||||
|
| `[m` | 上一个方法开始 |
|
||||||
|
| `[M` | 上一个方法结束 |
|
||||||
|
|
||||||
|
### 计数器
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------- | -------- |
|
||||||
|
| `<C-a>` | 增加数量 |
|
||||||
|
| `<C-x>` | 减少数量 |
|
||||||
|
|
||||||
|
### 选项卡
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| -------------------- | --------------------------------- |
|
||||||
|
| `:tag Classname` | 跳转到 Classname 的第一个定义 |
|
||||||
|
| `<C-]>` | 跳转到定义 |
|
||||||
|
| `g]` | 查看所有定义 |
|
||||||
|
| `<C-t>` | 回到最后一个标签 |
|
||||||
|
| `<C-o> <C-i>` | 后退前进 |
|
||||||
|
| `:tselect Classname` | 查找类名的定义 |
|
||||||
|
| `:tjump Classname` | 查找类名的定义 *(自动选择第一个)* |
|
||||||
|
|
||||||
|
### 格式化
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| `:ce 8` | `8` 列之间的中心线 |
|
||||||
|
| `:ri 4` | 在 `4` 列右对齐行 |
|
||||||
|
| `:le` | 左对齐线 |
|
||||||
|
|
||||||
|
查看 `:help formatting`
|
||||||
|
|
||||||
|
### 标记
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ----------- | ------------------------------- |
|
||||||
|
| ``^` | 插入模式下光标的最后位置 |
|
||||||
|
| ``.` | 当前缓冲区的最后更改 |
|
||||||
|
| ``"` | 最后退出的当前缓冲区 |
|
||||||
|
| ``0` | 在上次编辑的文件中 |
|
||||||
|
| `''` | 返回当前缓冲区中跳出的行 |
|
||||||
|
| ```` | 返回当前缓冲区中跳转的位置 |
|
||||||
|
| ``[` | 到先前更改或拉出的文本的开头 |
|
||||||
|
| ``]` | 到之前更改或拉出的文本的结尾 |
|
||||||
|
| ``<` | 到最后一个可视化选择的开始 |
|
||||||
|
| ``>` | 到最后一个可视化选择的结尾 |
|
||||||
|
| `ma` | 将此光标位置标记为`a` |
|
||||||
|
| ``a` | 跳转到光标位置`a` |
|
||||||
|
| `'a` | 跳转到位置为 `a` 的行首 |
|
||||||
|
| `d'a` | 从当前行删除到标记 `a` 的行 |
|
||||||
|
| `d`a` | 从当前位置删除到标记 `a` 的位置 |
|
||||||
|
| `c'a` | 将文本从当前行更改为 `a` 行 |
|
||||||
|
| `y`a` | 将文本从当前位置拉到 `a` 的位置 |
|
||||||
|
| `:marks` | 列出所有当前标记 |
|
||||||
|
| `:delm a` | 删除标记`a` |
|
||||||
|
| `:delm a-d` | 删除标记`a`、`b`、`c`、`d` |
|
||||||
|
| `:delm abc` | 删除标记`a`、`b`、`c` |
|
||||||
|
|
||||||
|
### 计算器
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ---------------- | -------- |
|
||||||
|
| `<C-r>` `=` 7*7 | 显示结果 |
|
||||||
|
| `<C-r>` `=` 10/2 | 显示结果 |
|
||||||
|
|
||||||
|
在 INSERT 模式下执行此操作
|
||||||
|
|
||||||
|
### Shell
|
||||||
|
|
||||||
|
| :- | - |
|
||||||
|
| ------------ | ---------------- |
|
||||||
|
| `:!<shell>` | 解释 Shell 命令 |
|
||||||
|
| `:r!<shell>` | 读入shell的输出 |
|
||||||
|
| `:r!date` | 插入日期 |
|
||||||
|
| `:!!date` | 用日期替换当前行 |
|
||||||
|
|
||||||
|
### 命令行
|
||||||
|
|
||||||
|
| 快捷方式 | 说明 |
|
||||||
|
| ------------ | ------------------------ |
|
||||||
|
| `<C-r><C-w>` | 将当前单词插入命令行 |
|
||||||
|
| `<C-r>"` | 从 `注册` 粘贴 |
|
||||||
|
| `<C-x><C-f>` | 在插入模式下自动完成路径 |
|
||||||
|
|
||||||
|
### 技巧
|
||||||
|
|
||||||
|
删除重复行
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:sort | %!uniq -u
|
||||||
|
```
|
||||||
|
|
||||||
|
对文件中的行进行编号
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:%!cat -n
|
||||||
|
```
|
||||||
|
|
||||||
|
将整个文档复制到剪贴板
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:%w !pbcopy # Mac OS X
|
||||||
|
:%w !xclip -i -sel c # GNU/Linux
|
||||||
|
:%w !xsel -i -b # GNU/Linux
|
||||||
|
```
|
||||||
|
|
||||||
|
## 理解 Vim
|
||||||
|
|
||||||
|
### 动词理解
|
||||||
|
|
||||||
|
```vim
|
||||||
|
d # 表示删除delete
|
||||||
|
r # 表示替换replace
|
||||||
|
c # 表示修改change
|
||||||
|
y # 表示复制yank
|
||||||
|
v # 表示选取visual select
|
||||||
|
```
|
||||||
|
|
||||||
|
动词代表了我们打算对文本进行什么样的操作
|
||||||
|
|
||||||
|
### 名词理解
|
||||||
|
|
||||||
|
```vim
|
||||||
|
w # 表示一个单词word
|
||||||
|
s # 表示一个句子sentence
|
||||||
|
p # 表示一个段落paragraph
|
||||||
|
t # 表示一个 HTML 标签tag
|
||||||
|
```
|
||||||
|
|
||||||
|
名词代表了我们即将处理的文本。引号或者各种括号所包含的文本称作一个文本块。
|
||||||
|
|
||||||
|
### 介词理解
|
||||||
|
|
||||||
|
```vim
|
||||||
|
i # 表示在...之内 inside
|
||||||
|
a # 表示环绕... around
|
||||||
|
t # 表示到...位置前 to
|
||||||
|
f # 表示到...位置上 forward
|
||||||
|
```
|
||||||
|
|
||||||
|
介词界定了待编辑文本的范围或者位置。
|
||||||
|
|
||||||
|
### 数词理解
|
||||||
|
|
||||||
|
数词指定了待编辑文本对象的数量,从这个角度而言,数词也可以看作是一种介词。引入数词之后,文本编辑命令的语法就升级成了下面这样:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
动词 介词/数词 名词
|
||||||
|
```
|
||||||
|
|
||||||
|
下面是几个例子:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
c3w # 修改三个单词:change three words
|
||||||
|
d2w # 删除两个单词:delete two words
|
||||||
|
```
|
||||||
|
|
||||||
|
另外,数词也可以修饰动词,表示将操作执行 `n` 次。于是,我们又有了下面的语法:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
数词 动词 名词
|
||||||
|
```
|
||||||
|
|
||||||
|
示例
|
||||||
|
|
||||||
|
```vim
|
||||||
|
2dw # 两次删除单词(等价于删除两个单词): twice delete word
|
||||||
|
3x # 三次删除字符(等价于删除三个字符): three times delete character
|
||||||
|
```
|
||||||
|
|
||||||
|
### 组词为句理解
|
||||||
|
|
||||||
|
有了这些基本的语言元素,我们就可以着手构造一些简单的命令了。文本编辑命令的基本语法如下:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
动词 介词 名词
|
||||||
|
```
|
||||||
|
|
||||||
|
下面是一些例子
|
||||||
|
|
||||||
|
```vim
|
||||||
|
dip # 删除一个段落: delete inside paragraph
|
||||||
|
vis # 选取一个句子: visual select inside sentence
|
||||||
|
ciw # 修改一个单词: change inside word
|
||||||
|
caw # 修改一个单词: change around word
|
||||||
|
dtx # 删除文本直到字符“x”(不包括字符“x”): delete to x
|
||||||
|
dfx # 删除文本直到字符“x”(包括字符“x”): delete forward x
|
||||||
|
```
|
||||||
|
|
||||||
|
## 另见
|
||||||
|
|
||||||
|
- [搞得像IDE一样的 Vim](https://jaywcjlove.github.io/vim-web) *(github.io)*
|
||||||
|
- [Vim 官方网站](http://www.vim.org/) *(vim.org)*
|
||||||
|
- [Devhints](https://devhints.io/vim) *(devhints.io)*
|
||||||
|
- [Vim cheatsheet](https://vim.rtorr.com/lang/zh_cn/) *(vim.rotrr.com)*
|
||||||
|
- [Vim documentation](http://vimdoc.sourceforge.net/htmldoc/) *(vimdoc.sourceforge.net)*
|
||||||
|
- [Interactive Vim tutorial](http://openvim.com/) *(openvim.com)*
|
||||||
|
|
||||||
|
> 来源:[Vim 备忘清单 & vim cheatsheet & Quick Reference](https://wangchujiang.com/reference/docs/vim.html);仅学术引用,著作权归作者所有。
|
352
wiki/getting-started/Vim/Vim 参考手册.md
Normal file
352
wiki/getting-started/Vim/Vim 参考手册.md
Normal file
@ -0,0 +1,352 @@
|
|||||||
|
---
|
||||||
|
title: Vim 参考手册
|
||||||
|
description: Vim 参考手册
|
||||||
|
keywords:
|
||||||
|
- Vim
|
||||||
|
- 参考手册
|
||||||
|
tags:
|
||||||
|
- Vim
|
||||||
|
sidebar_position: 3
|
||||||
|
author: 7Wate
|
||||||
|
date: 2022-11-16
|
||||||
|
---
|
||||||
|
|
||||||
|
## [Vim Cheat Sheet](https://vim.rtorr.com/)
|
||||||
|
|
||||||
|
## 全局
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:h[elp] 关键字 - 打开关键字帮助
|
||||||
|
:sav[eas] 文件名 - 另存为
|
||||||
|
:clo[se] - 关闭当前窗口
|
||||||
|
:ter[minal] - 打开一个shell窗口
|
||||||
|
K - 打开光标所在单词的man页面
|
||||||
|
```
|
||||||
|
|
||||||
|
***Tip** 在终端中运行 vimtutor 以学习最基础的 Vim 命令。*
|
||||||
|
|
||||||
|
## 移动光标
|
||||||
|
|
||||||
|
```vim
|
||||||
|
h - 左移光标
|
||||||
|
j - 下移光标
|
||||||
|
k - 上移光标
|
||||||
|
l - 右移光标
|
||||||
|
gj - 下移光标(折行文本)
|
||||||
|
gk - 下移光标(折行文本)
|
||||||
|
H - 移动到当前页面顶部
|
||||||
|
M - 移动到当前页面中间
|
||||||
|
L - 移动到当前页面底部
|
||||||
|
w - 移动到下个单词开头
|
||||||
|
W - 移动到下个单词开头(单词含标点)
|
||||||
|
e - 移动到下个单词结尾
|
||||||
|
E - 移动到下个单词结尾(单词含标点)
|
||||||
|
b - 移动到上个单词开头
|
||||||
|
B - 移动到上个单词开头(单词含标点)
|
||||||
|
ge - 移动到上个单词结尾
|
||||||
|
gE - 移动到上个单词结尾(单词含标点)
|
||||||
|
% - 跳转到配对的符号(默认支持的配对符号组:: '()', '{}', '[]' -
|
||||||
|
在vim中使用 :h matchpairs 获得更多信息)
|
||||||
|
0 - 移动到行首
|
||||||
|
^ - 移动到行首的非空白符
|
||||||
|
$ - 移动到行尾
|
||||||
|
g_ - 移动到行内最后一个非空白符
|
||||||
|
gg - 移动到文件第一行
|
||||||
|
G - 移动到文件最后一行
|
||||||
|
5gg or 5G - 移动到第五行
|
||||||
|
gd - 跳转到局部定义
|
||||||
|
gD - 跳转到全局定义
|
||||||
|
fx - 移动到字符 x 下次出现的位置
|
||||||
|
tx - 移动到字符 x 下次出现的位置的前一个字符
|
||||||
|
Fx - 移动到字符 x 上次出现的位置
|
||||||
|
Tx - 移动到字符 x 上次出现的位置的后一个字符
|
||||||
|
; - 重复之前的f、t、F、T操作
|
||||||
|
, - 反向重复之前的f、t、F、T操作
|
||||||
|
} - 移动到下一个段落 (当编辑代码时则为函数/代码块)
|
||||||
|
{ - 移动到上一个段落 (当编辑代码时则为函数/代码块)
|
||||||
|
zz - 移动屏幕使光标居中
|
||||||
|
Ctrl + e - 向下移动屏幕一行(保持光标不动)
|
||||||
|
Ctrl + y - 向上移动屏幕一行(保持光标不动)
|
||||||
|
Ctrl + b - 向上滚动一屏
|
||||||
|
Ctrl + f - 向下滚动一屏
|
||||||
|
Ctrl + d - 向下滚动半屏
|
||||||
|
Ctrl + u - 向上滚动半屏
|
||||||
|
```
|
||||||
|
|
||||||
|
## 插入模式 - 插入/追加文本
|
||||||
|
|
||||||
|
```vim
|
||||||
|
i - 从光标前开始插入字符
|
||||||
|
I - 从行首开始插入字符
|
||||||
|
a - 从光标后开始插入字符
|
||||||
|
A - 从行尾开始插入字符
|
||||||
|
o - 在当前行之下另起一行, 开始插入字符
|
||||||
|
O - 在当前行之上另起一行, 开始插入字符
|
||||||
|
ea - 从当前单词末尾开始插入
|
||||||
|
Ctrl + h - 在插入模式下,删除光标前的字符
|
||||||
|
Ctrl + w - 在插入模式下,删除光标前的单词
|
||||||
|
Ctrl + j - 在插入模式下,另起一行
|
||||||
|
Ctrl + t - 在插入模式下,向右缩进,宽度由 shiftwidth 控制
|
||||||
|
Ctrl + d - 在插入模式下,向左缩进,宽度由 shiftwidth 控制
|
||||||
|
Ctrl + n - 在插入模式下,在光标之前插入自动补全的下一个匹配项
|
||||||
|
Ctrl + p - 在插入模式下,在光标之前插入自动补全的上一个匹配项
|
||||||
|
Ctrl + rx - 插入寄存器 x 的内容
|
||||||
|
Ctrl + ox - 暂时进入正常模式以发出一个正常模式命令 x。
|
||||||
|
Esc - 退出插入模式
|
||||||
|
```
|
||||||
|
|
||||||
|
## 编辑文本
|
||||||
|
|
||||||
|
```vim
|
||||||
|
r - 替换当前字符
|
||||||
|
R - 在 ESC 按下之前,替换多个字符
|
||||||
|
J - 将下一行合并到当前行, 并在两部分文本之间插入一个空格
|
||||||
|
gJ - 将下一行合并到当前行, 两部分文本之间不含空格
|
||||||
|
gwip - 重新调整段落
|
||||||
|
g~ - 大小写转换操作修饰符
|
||||||
|
gu - 小写操作修饰符
|
||||||
|
gU - 大写操作修饰符
|
||||||
|
cc - 将光标所在的行删除, 然后进入插入模式
|
||||||
|
c$ or C - 将光标处到行尾删除, 然后进入插入模式
|
||||||
|
ciw - 将光标所在的单词删除, 然后进入插入模式
|
||||||
|
cw or ce - 从光标位置开始, 修改单词
|
||||||
|
s - 删除当前字符, 然后进入插入模式
|
||||||
|
S - 清空当前行, 然后进入插入模式 (同cc)
|
||||||
|
xp - 当前字符后移
|
||||||
|
u - 撤销
|
||||||
|
U - 撤销上一次的改动行的操作
|
||||||
|
Ctrl + r - 重做(取消撤销)
|
||||||
|
. - 再次执行上个命令
|
||||||
|
```
|
||||||
|
|
||||||
|
## 选择文本(可视化模式)
|
||||||
|
|
||||||
|
```vim
|
||||||
|
v - 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(比 y - 复制)
|
||||||
|
V - 进入可视化模式(行粒度选择)
|
||||||
|
o - 切换光标到选择区开头/结尾
|
||||||
|
Ctrl + v - 进入可视化模式(矩阵选择)
|
||||||
|
O - 切换光标到选择区的角
|
||||||
|
aw - 选择当前单词
|
||||||
|
ab - 选择被 () 包裹的区域(含括号)
|
||||||
|
aB - 选择被 {} 包裹的区域(含花括号)
|
||||||
|
at - 选择被 <> 标签包裹的区域(含<>标签)
|
||||||
|
ib - 选择被 () 包裹的区域(不含括号)
|
||||||
|
iB - 选择被 {} 包裹的区域(不含花括号)
|
||||||
|
it - 选择被 <> 标签包裹的区域(不含<>标签)
|
||||||
|
Esc - 退出可视化模式
|
||||||
|
```
|
||||||
|
|
||||||
|
***Tip** 也可以使用 ( 和 { 分别代替 b 和 B*
|
||||||
|
|
||||||
|
## 可视化模式命令
|
||||||
|
|
||||||
|
```vim
|
||||||
|
> - 向右缩进
|
||||||
|
< - 向左缩进
|
||||||
|
y - 复制
|
||||||
|
d - 剪切
|
||||||
|
~ - 大小写切换
|
||||||
|
u - 将选中文本转换为小写
|
||||||
|
U - 将选中文本转换为大写
|
||||||
|
```
|
||||||
|
|
||||||
|
## 寄存器
|
||||||
|
|
||||||
|
寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:reg[isters] - 显示寄存器内容
|
||||||
|
"xy - 复制内容到寄存器 x
|
||||||
|
"xp - 粘贴寄存器 x 中的内容
|
||||||
|
"+y - 复制内容到系统剪贴板寄存器
|
||||||
|
"+p - 粘贴系统剪贴板寄存器的内容
|
||||||
|
```
|
||||||
|
|
||||||
|
特殊寄存器:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
0 - 上次复制
|
||||||
|
" - 未命名寄存器,上次复制或删除
|
||||||
|
% - 当前文件名
|
||||||
|
# - 轮换文件名
|
||||||
|
* - 剪贴板内容 (X11 primary)
|
||||||
|
+ - 剪贴板内容 (X11 clipboard)
|
||||||
|
/ - 上次搜索的pattern
|
||||||
|
: - 上次执行的命令
|
||||||
|
. - 上次插入的文本
|
||||||
|
- - 上次剪切的短于一行的文本
|
||||||
|
= - 表达式寄存器
|
||||||
|
_ - 黑洞寄存器
|
||||||
|
```
|
||||||
|
|
||||||
|
## 标记
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:marks - 标记列表
|
||||||
|
ma - 设置当前位置为标记 a
|
||||||
|
`a - 跳转到标记 a 的位置
|
||||||
|
y`a - 复制当前位置到标记 a 的内容
|
||||||
|
`0 - 跳转到上次 Vim 退出时的位置
|
||||||
|
`" - 跳转到上次编辑该文件时的位置
|
||||||
|
`. - 跳转到上次修改的位置
|
||||||
|
`` - 跳转回上次跳转前的位置
|
||||||
|
:ju[mps] - 列出跳转历史记录
|
||||||
|
Ctrl + i - 跳转至跳转历史中较晚的位置
|
||||||
|
Ctrl + o - 跳转回跳转历史中较早的位置
|
||||||
|
:changes - 列出修改历史记录
|
||||||
|
g, - 跳转至修改历史中较晚修改的位置
|
||||||
|
g; - 跳转至修改历史中较早修改的位置
|
||||||
|
Ctrl + ] - 跳转到当前光标位置对应的 tag
|
||||||
|
```
|
||||||
|
|
||||||
|
**Tip** 可以使用反引号(`)或单引号(')跳转至标记位置。使用单引号会跳转至该标记所在行行首(首个非空白字符)。
|
||||||
|
|
||||||
|
## 宏
|
||||||
|
|
||||||
|
```vim
|
||||||
|
qa - 录制宏 a
|
||||||
|
q - 停止录制宏
|
||||||
|
@a - 执行宏 a
|
||||||
|
@@ - 重新执行上次执行的宏
|
||||||
|
```
|
||||||
|
|
||||||
|
## 剪切, 复制, 粘贴
|
||||||
|
|
||||||
|
```vim
|
||||||
|
yy - 复制当前行
|
||||||
|
2yy - 复制 2 行
|
||||||
|
yw - 复制当前单词
|
||||||
|
yiw - 复制光标处的单词
|
||||||
|
yaw - 复制光标处的单词及其前后的空格
|
||||||
|
y$ or Y - 复制, 从光标位置到行末
|
||||||
|
p - 在光标后粘贴
|
||||||
|
P - 在光标前粘贴
|
||||||
|
gp - 在光标后粘贴并把光标定位于粘贴的文本之后
|
||||||
|
gP - 在光标前粘贴并把光标定位于粘贴的文本之后
|
||||||
|
dd - 剪切当前行
|
||||||
|
2dd - 剪切 2 行
|
||||||
|
dw - 剪切当前单词
|
||||||
|
diw - 删除光标处的单词
|
||||||
|
daw - 删除光标处的单词及其前后的空格
|
||||||
|
d$ or D - 剪切, 从光标位置到行末 (同 D )
|
||||||
|
x - 剪切当前字符
|
||||||
|
```
|
||||||
|
|
||||||
|
## 文字缩进
|
||||||
|
|
||||||
|
```vim
|
||||||
|
>> - 将当前行向右缩进,宽度由 shiftwidth 控制
|
||||||
|
<< - 将当前行向左缩进,宽度由 shiftwidth 控制
|
||||||
|
>% - 向右缩进 () 或 {} 内的区域 (光标需置于括号上)
|
||||||
|
>ib - 向右缩进 () 内的区域
|
||||||
|
>at - 向右缩进 <> 标签内的区域
|
||||||
|
3== - 自动缩进 3 行
|
||||||
|
=% - 自动缩进 () 或 {} 内的区域 (光标需置于括号上)
|
||||||
|
=iB - 自动缩进 {} 内的区域 (光标需置于括号上)
|
||||||
|
gg=G - 自动缩进整个缓冲区
|
||||||
|
]p - 粘贴并调整缩进至当前行
|
||||||
|
```
|
||||||
|
|
||||||
|
## 退出
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:w - 保存
|
||||||
|
:w !sudo tee % - 使用 sudo 保存当前文件
|
||||||
|
:wq or :x or ZZ - 保存并退出
|
||||||
|
:q - 退出(修改未保存时警告)
|
||||||
|
:q! or ZQ - 不保存强制退出
|
||||||
|
:wqa - 保存所有标签页并全部退出
|
||||||
|
```
|
||||||
|
|
||||||
|
## 查找/替换
|
||||||
|
|
||||||
|
```vim
|
||||||
|
/pattern - 查找 pattern
|
||||||
|
?pattern - 向上查找 pattern
|
||||||
|
\vpattern - pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)
|
||||||
|
n - 查找下一个
|
||||||
|
N - 查找上一个
|
||||||
|
:%s/old/new/g - 替换全部
|
||||||
|
:%s/old/new/gc - (逐个)替换
|
||||||
|
:noh[lsearch] - 移除搜索结果的高亮显示
|
||||||
|
```
|
||||||
|
|
||||||
|
## 多文件搜索
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:vim[grep] /pattern/ {`{file}`} - 在多个文件中搜索 pattern
|
||||||
|
e.g. :vim[grep] /foo/ **/*
|
||||||
|
:cn[ext] - 移动至下一个
|
||||||
|
:cp[revious] - 移动至上一个
|
||||||
|
:cope[n] - 打开搜索结果列表
|
||||||
|
:ccl[ose] - 关闭 quickfix 窗口
|
||||||
|
```
|
||||||
|
|
||||||
|
## 标签
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:tabnew or :tabnew {page.words.file} - 在新标签中打开文件
|
||||||
|
Ctrl + wT - 将窗口变成标签
|
||||||
|
gt or :tabn[ext] - 切换到下一个标签
|
||||||
|
gT or :tabp[revious] - 切换到上一个标签
|
||||||
|
#gt - 切换到第 # 个标签
|
||||||
|
:tabm[ove] # - 移动标签到第 # 位(下标从 0 开始)
|
||||||
|
:tabc[lose] - 关闭当前标签
|
||||||
|
:tabo[nly] - 关闭其他标签
|
||||||
|
:tabdo command - 在所有标签中执行命令 (例如 :tabdo q 关闭所有标签)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 多文件编辑
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:e[dit] 文件名 - 新建缓冲区打开 filename
|
||||||
|
:bn[ext] - 切换到下个缓冲区
|
||||||
|
:bp[revious] - 切换到上个缓冲区
|
||||||
|
:bd[elete] - 关闭缓冲区
|
||||||
|
:b[uffer]# - 切换到第 # 个缓冲区
|
||||||
|
:b[uffer] file - 用文件名切换缓冲区
|
||||||
|
:ls or :buffers - 列出所有打开的缓冲区
|
||||||
|
:sp[lit] 文件名 - 新建缓冲区打开 filename 并水平分割窗口
|
||||||
|
:vs[plit] 文件名 - 新缓冲区打开 filename 并垂直分割窗口
|
||||||
|
:vert[ical] ba[ll] - 垂直分割窗口编辑所有缓冲区
|
||||||
|
:tab ba[ll] - 标签页编辑所有缓冲区
|
||||||
|
Ctrl + ws - 水平分割窗口
|
||||||
|
Ctrl + wv - 垂直分割窗口
|
||||||
|
Ctrl + ww - 在窗口间切换
|
||||||
|
Ctrl + wq - 关闭窗口
|
||||||
|
Ctrl + wx - 当前窗口与下一个窗口交换位置
|
||||||
|
Ctrl + w= - 令所有窗口高 & 宽一致
|
||||||
|
Ctrl + wh - 切换到左侧窗口
|
||||||
|
Ctrl + wl - 切换到右侧窗口
|
||||||
|
Ctrl + wj - 切换到下侧窗口
|
||||||
|
Ctrl + wk - 切换到上侧窗口
|
||||||
|
Ctrl + wH - 使游标所在视窗全高并移至最左 (最左垂直视窗)
|
||||||
|
Ctrl + wL - 使游标所在视窗全高并移至最右 (最右垂直视窗)
|
||||||
|
Ctrl + wJ - 使游标所在视窗全宽并移至最下 (最下水平视窗)
|
||||||
|
Ctrl + wK - 使游标所在视窗全宽并移至最上 (最上水平视窗)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Diff
|
||||||
|
|
||||||
|
```vim
|
||||||
|
zf - 定义折叠修饰符
|
||||||
|
zd - 删除光标位置的折叠
|
||||||
|
za - 展开 & 关闭光标位置的折叠
|
||||||
|
zo - 展开光标位置的折叠
|
||||||
|
zc - 关闭光标位置的折叠
|
||||||
|
zr - 展开同级的所有折叠
|
||||||
|
zm - 关闭同级的所有折叠
|
||||||
|
zi - 开启 & 关闭折叠功能
|
||||||
|
]c - 光标移至下一处差异
|
||||||
|
[c - 光标移至上一处差异
|
||||||
|
do or :diffg[et] - 将另一缓冲区中的差异合并至当前缓冲区
|
||||||
|
dp or :diffpu[t] - 将当前缓冲区中的差异推送至另一缓冲区
|
||||||
|
:diffthis - 令当前窗口成为 diff 模式的窗口之一
|
||||||
|
:dif[fupdate] - 强制刷新 diff 的高亮与折叠
|
||||||
|
:diffo[ff] - 令当前窗口退出 diff 模式
|
||||||
|
```
|
||||||
|
|
||||||
|
折叠命令(e.g. za)只作用于当前级别。使用大写字母(e.g. zA)令命令作用于全部级别。
|
||||||
|
|
||||||
|
可以直接在终端运行 vimdiff 查看文件间的不同。也可以将该程序设为 git difftool 的选项之一。
|
34
wiki/getting-started/Vim/Vim 帮助文档.md
Normal file
34
wiki/getting-started/Vim/Vim 帮助文档.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
title: Vim 帮助文档
|
||||||
|
description: Vim 帮助文档
|
||||||
|
keywords:
|
||||||
|
- Vim
|
||||||
|
- 文档
|
||||||
|
tags:
|
||||||
|
- Vim
|
||||||
|
sidebar_position: 2
|
||||||
|
author: 7Wate
|
||||||
|
date: 2022-11-16
|
||||||
|
---
|
||||||
|
|
||||||
|
[Vim 中文文档计划](https://github.com/yianwillis/vimcdoc)
|
||||||
|
|
||||||
|
## 关于
|
||||||
|
|
||||||
|
[Vim](https://www.vim.org/) 是一个功能非常强大,且具有很强扩展性的编辑器。而且 Vim 本身带有一个完备的帮助系统。本项目的目的就是将 Vim 的这些文档翻译成中文,以 便更多的人认识及更好地使用这个非常强大的编辑器。文档分成用户手册和参考手册两部 分,你既可以象使用教程那样循序渐进,也可以快速地查阅来获取帮助。
|
||||||
|
|
||||||
|
## 在线阅读
|
||||||
|
|
||||||
|
可在线阅读帮助文档的 HTML 版。
|
||||||
|
|
||||||
|
https://yianwillis.github.io/vimcdoc/
|
||||||
|
|
||||||
|
为了最佳阅读效果,请确保你的系统安装了 'Noto Sans Mono CJK SC' 或 NSimsun 字 体,否则可能有字体不能完全对齐的情况。
|
||||||
|
|
||||||
|
## 下 载
|
||||||
|
|
||||||
|
https://github.com/yianwillis/vimcdoc/releases 提供发布版本的下载。
|
||||||
|
|
||||||
|
- PDF 用户手册和参考手册
|
||||||
|
- tar.gz 包
|
||||||
|
- Win32 UTF8 版本的中文自动安装程序 (原有的 ANSI 版本不再提供)
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"label": "开发者工具",
|
"label": "Windows 开发",
|
||||||
"position": 2,
|
"position": 2,
|
||||||
"link": {
|
"link": {
|
||||||
"type": "generated-index",
|
"type": "generated-index",
|
||||||
"title": "开发者工具"
|
"title": "Windows 开发"
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user