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*/ |