vim 学习笔记
记录 vim 的使用方法及技巧
vim 常用命令图解
图文并茂地记录 vim 各模式下的操作方法及相应快捷键,附带 vim 地配制方法及插件安装。


命令(快捷键)详解
1. 编辑模式
| 命令 | 说明 |
|---|---|
| i,I | i: 从光标所在处开始插入; I: 在光标所在行的第一个非空格字符处开始插入。 |
| a,A | a: 从光标所在处的下一个字符开始插入; A: 在光标所在行的最后一个字符处开始插入。 |
| o,O | o: 在光标所在行的下一行插入新行; O: 在光标所在行的上一行插入新行。 |
| r,R | r: 只取代光标所在处的字符一次; R: 一直取代光标所在处的文字,直到按下 ESC为止。 |
2. 指令模式
| 命令 | 说明 |
|---|---|
| Esc | 进入指令模式 |
| :w | 将编辑的数据写入到硬盘档案中 |
| :w! | 若文档属性为 只读 时,强制写入文档。能否写入成功与对该文档的权限有关。 |
| :q | 离开vi |
| :q! | 强制离开,不存储文档。 |
| :e | 重新加载已打开的文件。 |
| :e! | 放弃所有修改,并打开原来的文件 |
| :wq | 存储后离开,若为 :wq! 则强制存储后离开。 |
| ZZ | 大写的 Z 若文档没有改动,则不存储离开; 若文档被改动过,则存储后离开。 |
| :w [filename] | 将文档存储成另一个文档【另存为】。 |
| :r [filename] | 在编辑的数据中读入另一个文档,将【filename】内容添加到所在行后面。 |
| :n1,n2 w [filename] | 将n1到n2的内容存储到filename文档。 |
| :! command | 暂时离开vi到指令列模式,执行 command 并显示结果。 |
| :set nu/nonu | vim 环境的变更 显示行号/取消行号。 |
3. 移动光标
| 命令 | 说明 |
|---|---|
| h 或 ← | 光标向左移动一个字符 |
| j 或 ↓ | 光标向下移动一个字符 |
| k 或 ↑ | 光标向上移动一个字符 |
| l 或 → | 光标向右移动一个字符 |
| [Ctrl]+[f] | 视图【向下】移动一页 == PageDown |
| [Ctrl]+[b] | 视图【向上】移动一页 == PageUp |
| [Ctrl]+[d] | 视图【向下】移动半页 |
| [Ctrl]+[u] | 视图【向上】移动半页 |
| nzh | 视图【向左】移动 n 个字符 |
| nzl | 视图【向右】移动 n 个字符 |
| zH | 视图【向左】移动半页 |
| zL | 视图【向右】移动半页 |
| zs | 视图【向左】移动到最左侧 |
| ze | 视图【向右】移动到最右侧 |
| + | 光标移动到下一行首个非空格符处 |
| - | 光标移动到上一行首个非空格符处 |
nspace |
光标向右移动n个字符(包括空格),当前行剩余字符不足n时,跳至下一行 |
| 0 或 home | 光标移动到当前行的首字符 |
| $ 或 end | 光标移动到当前行的末字符 |
| H | 光标移动到屏幕首行首字符 |
| M | 光标移动到屏幕中间行首字符 |
| L | 光标移动到屏幕末行首字符 |
| G | 光标移动到文档末行首字符 |
| nG | 光标移动到文档第n行首字符 |
| gg | 光标移动到文档首行首字符 |
nEnter |
光标向下移动n行 |
| b | 将光标移动到单词开头 |
| e | 将光标移动到单词末尾 |
| n| | 将光标移动到当前行的第 n 列 |
| [[ 或 ]] | 跳转到函数 开头 或 结尾 |
| {[ 或 ]} | 跳转到区块 开头 或 结尾 |
4. 复制与粘贴
| 命令 | 说明 |
|---|---|
| x,X | x向后(X向前)删除一个字符,Delete(Backspace) |
| nx | 向后删除n个字符 |
| dd | 剪切光标所在的那一整行 |
| ndd | 剪切光标所在处向下n行 |
| d1G | 剪切光标所在处到第一行的所有数据 |
| dG | 剪切光标所在处到最后一行的所有数据 |
| d$ | 剪切光标所在处到该行最后一个字符的所有数据 |
| d0 | 剪切光标所在处到该行第一个字符的所有数据 |
| D | 剪切光标处到行末的所有数据 |
| y | 复制选中的内容到剪贴板 |
| yy | 复制光标所在的那一行 |
| nyy | 复制光标所在处向下n行 |
| y1G | 复制光标所在行到第一行的所有数据 |
| yG | 复制光标所在行到最后一行的所有数据 |
| y0 | 复制光标所在处到该行行首的所有数据 |
| y$ | 复制光标所在处到该行行尾的所有数据 |
| p,P | p将已复制的数据粘贴到光标下一行; P将已复制的数据粘贴到光标上一行. |
| J | 将光标所在行与下一行的数据结合成一行 |
| c | 重复删除多个数据。eg:[10cj],向下删除10行 |
| u | 复原前一个动作 |
| [Ctrl]+r | 重做上一个动作 |
| . | 重复前一个动作 |
| 5. | 重复5次前一个动作 |
| :1,10 d | 将1-10行剪切,可用 p 命令粘贴 |
| :1,10 m 20 | 将 1-10 行移动到 20 行之后 |
| :1,10 co 20 | 将 1-10 拷贝到 20 行之后 |
| :1,$ co $ | 将整篇文档拷贝一份添加到文件末尾 |
5. 搜索与替代
| 命令 | 说明 |
|---|---|
| /word | 从光标处向下查找 word 字符串 【:nohlsearch 关闭搜索高亮】 |
| ?word | 从光标处向上查找 word 字符串 |
| * | 全文查找光标处的单词 |
| n | 重复前一个搜索动作 |
| N | 反向重复上一个搜索动作 |
| :s/old/new | 用 new 替换 old,当前行第一个匹配 |
| :s/old/new/g | 用 new 替换 old,当前行所有匹配 |
| :%s/old/new | 用 new 替换 old,所有行第一个匹配 |
| :%s/old/new/g | 用 new 替换 old,整篇文档的所有匹配 |
| :n1,n2s/word1/word2/g :n1,n2s/word1/word2/gc |
在n1行与n2行之间寻找word1字符串,并将该字符串替换为word2。 在替换前提示用户确认是否需要替换 |
| :3,5s/^/#/g :3,5s/^////g |
将3到5行注释掉 |
| :3,5s/^#//g :3,5s/^////g |
取消3到5行的注释 |
| :3,5s/^#/ /g | 在3到5行行首添加4个空格,用于缩进 |
| :%s/^/#/g | 注释整个文档,更快 |
| % | 括号匹配 |
| [Ctrl]+a | 增加光标处的数字 |
| [Ctrl]+x | 减小光标处的数字 |
6. 窗口命令
| 命令 | 说明 |
|---|---|
| :open file | 在当前窗口打开一个新文件 |
| :split file | 在新窗口中打开文件(水平分割) |
| :new file | 在新窗口中打开文件(水平方向) |
| :vsplit file | 在新窗口中打开文件(垂直分割) |
| :bn/:bp | 在当前窗口中切换至下/上一个已打开的文件 |
| [Ctrl]+ww | 移动到下一个窗口 |
| [Ctrl]+wh | 移动到左方的窗口 |
| [Ctrl]+wj | 移动到下方的窗口 |
| [Ctrl]+wk | 移动到上方的窗口 |
| [Ctrl]+wl | 移动到右方的窗口 |
| :only | 关闭所有窗口,只保留当前窗口 |
7. 对齐命令
| 命令 | 说明 |
|---|---|
| :%!fmt | 对齐所有行 |
| !}fmt | 对齐光标处的所有行 |
| 5!!fmt | 对齐光标所在处向下 5 行 |
| gg=G | 从第一行到最后一行,将源码内容对齐,简单格式化 |
Vim 命令合集
超过130个你需要了解的 vim 命令
vim 命令
vim 配置
必知必会
- .vimrc example
1 | set autoindent |
vim nerdtree
1 | NERDTree 说明 |
vim 更多插件
vim 疑难
换行符处理
问题描述vim 保存后整个文档都被标记为更改,差异对比显示每行末尾出现^M字样。
Unix 只需一个换行符(\n) 0A,
DOS/Windows 需要一个回车符加一个换行符(\r\n) 0D0A。
1 | :e ++ff=unix /*设置 fileformats 为 unix,0D \r 被显示 ^M*/ |