# Vi Editor Cheat Sheet ## 光标移动命令 ### 字符 | 按键 | 解释 | |---|---| | **h,j,k,l** | 左,右,上,下 | ### 文本 | 按键 | 解释 | |---|---| | **w,W,b,B** | 向前,向后一个词 | | **e,E** | 词尾 | | **(,)** | 下一个,前一个句子的开头 | | **{,}** | 下一个,前一个段落的开头 | | **[[, ]]** | 下一个,前一个小节的开头 | ### 行 | 按键 | 解释 | |---|---| | **0,$** | 所在行的最前,最后位置 | | **^** | 所在行的第一个非空字符位置 | | **+,-** | 下一,前一行的第一个字符位置 | | **H** | 屏幕显示区内最顶端一行 | | **M** | 屏幕显示区内中间一行 | | **L** | 屏幕显示区内最底端一行 | ### 滚动 | 按键 | 解释 | |---|---| | **[Ctrl]F, [Ctrl]B** | 向前,向后滚动一个屏幕显示范围 | | **[Ctrl]D, [Ctrl]U** | 向下,向上滚动半个屏幕显示范围 | | **[Ctrl]E, [Ctrl]Y** | 在窗口下方,上方再多显示一行 | | **z[Enter]** | 滚动屏幕,直到光标在屏幕最上方 | | **z.** | 滚动屏幕,直到光标在屏幕中间 | | **z-** | 滚动屏幕,直到光标在屏幕最下方 | ### 搜索 | 按键 | 解释 | |---|---| | **/** *pattern* | 向前搜索字符*pattern* | | **?** *pattern* | 向后搜索字符*pattern* | | **n,N** | 在相同,不同的搜索方向上搜索上一次搜索的字符 | | **f** *x* | 在所在行向前搜索字符*x* | | **F** *x* | 在所在行向后搜索字符*x* | | **;** | 重复执行上一个当前行搜索 | | **,** | 重复执行上一个当前行搜索,但以相反的方向 | ### 行号 | 按键 | 解释 | |---|---| | **[Ctrl]G** | 显示当前行号 | | **:set nu** | 显示所有行号 | | **:set nonu** | 取消显示所有行号 | | *n* **G** | 移动到行号是*n*的一行 | | **G** | 移动到当前文件的最后一行 | ### 标记位置 | 按键 | 解释 | |---|---| | **m** *x* | 标记当前位置为 *x* | | **`** *x* | 移动光标至标记 *x* | | **``** | 返回上一个标记 | | **'** *x* | 移动到包含标记*x*的一行的开头 | | **''** | 返回包含上一个标记的一行的开头 | ## 编辑命令 ### 输入 | 按键 | 解释 | |---|---| | **i,a** | 在光标前,后输入内容 | | **I,A** | 在光标行首,尾输入内容 | | **o,O** | 在光标的下,上开启新行,输入内容 | ### 替换 | 按键 | 解释 | |---|---| | **r** | 替换光标所在字符一次 | | **~** | 更改大小写 | | **c** *m* | 在移动范围为*m*的区域内更改文本,移动范围请查阅光标移动命令。(如:cw 为更改下一个词) | | **cc** | 更改当前行 | | **C** | 更改至行尾的内容 | | **R** | 一直替换光标所在字符,直到按下[ESC]结束 | | **s** | 删除当前字符,并继续输入 | | **S** | 删除当前行,并继续输入 | ### 删除,移动 | 按键 | 解释 | |---|---| | **x** | 删除当前字符 | | **X** | 删除光标左边的字符 | | **d** *m* | 在移动范围为*m*的区域内删除文本,移动范围请查阅光标移动命令。(如:dw 为删除下一个词) | | **dd** | 删除当前行 | | **D** | 删除至行尾的内容 | | **p,P** | 将删除的内容插入在光标前,后位置 | ### Yank(拷贝) | 按键 | 解释 | |---|---| | **y** *m* | 在移动范围为*m*的区域内拷贝文本,移动范围请查阅光标移动命令。(如:yw 为拷贝下一个词) | | **yy,Y** | 拷贝当前行 | | **p,P** | 将拷贝的内容插入在光标前,后位置 | ### 其他命令 | 按键 | 解释 | |---|---| | **.** | 重复上一个编辑操作 | | **u** | 撤销上一个编辑操作 | | **U** | 撤销当前行的编辑操作 | | **J** | 将光标所在行与下一行结合成同一行 | ## 保存和退出 | 按键 | 解释 | |---|---| | **ZZ** | 保存并退出 | | **:x** | 保存并退出 | | **:wq** | 保存("write" 写入)并退出 | | **:w** | 保存文件 | | **:w!** | 保存文件(强制) | | **:30,60w** *newfile* | 将从第30行到第60行的内容保存为新文件,叫做*newfile* | | **:30,60w>>** *file* | 将从第30行到第60行的内容保存添加至文件*file* | | **:q** | 退出 | | **:q!** | 退出,放弃所有更改 | | **:e!** | 放弃自上次保存后的所有修改 |