[TOC] #### 1. Vim 介绍 --- Vim 是 Linux/Unix 系统中最经典、最强大的文本编辑器之一,它最大的特色在于其 “多模式” 设计 Vim 主要有三种基本模式,掌握它们之间的切换是重中之重: + 普通模式(Normal Mode):启动 Vim 后的默认模式。在此模式下,键盘上的按键被视为 “命令”,而非文本输入 + 插入模式(Insert Mode):用于真正输入和编辑文本的模式。在普通模式下按 `i`、`a`、`o` 等键进入 + 底行/命令行模式(Command-line Mode):用于执行保存、退出、全局搜索、替换等指令。普通模式下按 `:` 进入 核心口诀:无论当前处于什么模式,随时按 `Esc` 键都能安全返回普通模式 #### 2. 普通模式 --- 光标移动(普通模式) + 基本移动:`h`(左)、`j`(下)、`k`(上)、`l`(右) + 行内跳转:`0` 或 `^` 跳转到行首,`$` 跳到行尾 + 单词跳转:`w`(下一个单词开头)、`e`(当前单词末尾)、`b`(上一个单词开头) + 全局跳转:`gg` 或`[[`跳转到文件首行,`G` 或 `]]` 跳转到文件末行,`nG` 跳转到第 n 行 + 翻页:`Ctrl + f`(向下翻页),`Ctrl + b`(向上翻页)。推荐搭配 `:set nu` 显示行号使用 为了更好的理解单词跳转,我们来通过一个小示例来演示,假设现在你的光标停留在 `Hello` 的字母 `H` 上: + 按下 `w`(word):光标会跳到逗号上(下一个单词开头) + 按下 `e`(end):光标会跳到 `Hello` 的字母 `o` 上(当前单词末尾) + 按下 `b`(back):跳到单词开头,也就是往回跳、往当前光标所在单词的左边跳转 ```bash echo 'Hello, this is Vim!' >> test.txt ``` 搜索: + 查找:在普通模式下按 `/关键字`(向下查找)或 `?关键字`(向上查找) + 查找下一个/上一个:`n`(下一个匹配项)、`N`(上一个匹配项) #### 3. 插入模式 --- 在普通模式下,使用以下按键可以进入插入模式 + `i`:在当前光标前面插入 + `a`:在当前光标后面插入 + `o`:在当前光标下一行插入 + `I`:在当前光标最前面插入 + `A`:在当前光标最后面插入 + `O`:在当前光标上一行插入 删除内容: + `x`:删除光标处字符 + `dd`:删除当前行 + `dw`:删除一个单词 + `ndd`:删除 n 行,如 `3dd` 复制与粘贴: + `yy`:复制当前行 + `nyy`:复制 n 行 + `p`:粘贴到光标后 撤销与重做: + `u`:撤销上一步 + `Ctrl+r`:重做 #### 4. 底行模式 --- 实用设置: + 显示/隐藏行号:`:set nu` / `:set nonu` + 开启/关闭搜索高亮:`:set hlsearch` / `:set nohlsearch` + 查看当前文件编码:`:set fileencoding` 保存与退出: + `vim 文件名`:打开文件 + `:w`:保存 + `:q`:退出 + `:q!`:不保存退出 + `:wq`:保存并退出 多行删除 ```plaintext 第一步:在命令模式下输入 :set nu 显示行号,通过行号确定你要删除的行 第二步:命令输入 :起始行,结束行d,按下回车键即可。如果无意中删除错了,在命令模式下可以使用 u 键恢复 ``` #### 5. 应用场景 --- 清空文件内容,重新写入 ```plaintext :%d ``` 在 Vim 中粘贴多行文本内容时出现 “缩进混乱” 问题(如:阶梯式缩进、空行错位),这是什么原因 ?应该怎么解决 ? + 根本原因:Vim 将粘贴到文本视为 “逐行手动输入”,从而触发了其内置的自动缩进和智能缩进逻辑 解决方案:开启 “粘贴模式”,这是解决粘贴缩进问题的标准做法 + 开启后,Vim 会临时禁用所有自动缩进、制表符转换等干扰行为,让粘贴的多行文本内容原样插入 使用步骤: + 在普通模式下,输入 `:set paste` 并回车 + 按 `i` 进入插入模式,正常粘贴你的多行文本内容 + 粘贴完成后,按 `Esc` 退出插入模式 + 然后可以输入 `:wq` 保存退出,也可以输入 `:set nopaste` 恢复正常编辑状态 ```bash # 设置 粘贴模式 :set paste # 取消 粘贴模式 :set nopaste ```