Vim 基础使用
更新日志
2021-06-11
更新所属分类
2022-03-21
更新文章中中英文间隔
接触 Vim 快一个月了,喜欢上了 Vim 多模式操作的特性。
在艰难地适应 Vim 后(其他开发工具使用插件模拟 Vim 键位),效率有明显的提高。
Vim 快捷键文字版
Vim 快捷键图,多个版本
光标移动
字符间跳转
在 Vim 中,使用 h, j, k, l 实现字符间的移动,也就是正常使用中的方向键。具体对应关系为:
看键盘布局,可以发现这4个方向键布局有以下规律, 可以更方便记住键位:
- h 和 l 是左、右,而 h 和 l 处于这4个方向键的第一个和最后一个位置,也就是在首、尾。
- j 和 k 是下、上,在中间
如果方向键仅仅只能有以上操作就谈不上高效了,Vim 部分操作支持配合数字操作,上下左右加上数字后可以实现光标往某个方向移动提移动几个字符,例如:
- 10h : 向坐移动10个字符
- 10j : 向下移动10个字符
- 20k : 向上移动20个字符
- 30l : 向右移动30个字符
因为是通过相对行号移动光标,我们直接开启 set number 后,是需要自己去算跳转几行,这样反而降低了效率。在7.3版本中,Vim 加入了相对行号的支持:set relativenumber 。开启相对行号后,光标所有行的上、下行都是相对当前行显示行号的。
词、句间跳转
- $ : 跳转至行的末尾
- ^ : 跳转至本行第一个非空的字符处
- 0 : (数字0),跳转到本行开头
- B : 向前 跳转到有空格开头的每个单词首字母
- b : 向前 依次跳转到每个单词的首字母
- W : 向后 跳转到有空格开头的每个单词首字母
- w : 向后 依次跳转到每个单词的首字母
- e : 向后 依次跳转到每个单词的最后一个字母
- E : 向后 跳转到有空格结尾的每个单词的最后一个字母
行间跳转
- H : 移动到本屏幕内容的首行
- M : 移动到本屏幕内容的中间
- L : 移动到本屏幕内容的尾行
- G : 移动内容的尾行
- gg : 移动到文档首行
- Ctrl+b : 向下翻页(光标还在本行)
- Ctrl+f : 向上翻页(光标还在本行)
- Ctrl+d : 取屏幕的1/2向下翻页
- Ctrl+u : 取屏幕的1/2向上翻页
- Ctrl+e : 按行向下滚动,效果与j 类似,j 会将光标往下移动,而Ctrl+e会让光标一直在首行
- Ctrl+y : 按行向上滚动,同上
行间移动除了使用快捷键外,还可以使用命令,例如:
展示区域
- zz : 将当前行置于屏幕可视区域中间,居中显示当前行
- zb : 将当前行置于屏幕可视区域末行
- zt : 将当前行置于屏幕可视区域首行
内容操作
常用的内容操作
- yy : 复制本行
- dd : 删除本行
- d10d : 删除从本行开始的往下10行
- y10y : 复制从本行开始的往下10行
- p : 粘贴到本行下面
- P : 粘贴到本行上面
- u : 撤销
- Ctrl+r :恢复撤销
- x :删除当前光标下的字符
- r : 替换当前光标下的字符
- J : 合并下一行
如果需要更强大的内容操作,可以看看下面与跳转指令结合的方式,仅列举部分删除操作,可以自己尝试其他组合
- dw : 删除后面的一个单词
- dW : 从当前位置删除到第一个末尾出现空格单词的位置
- d$ : 从当前位置删除到本行末尾
- dG : 从当前删除到文档的最后一行
- dgg : ?????? You can try !!!
可以自己尝试将复制+跳转实现多行快捷复制!!!
批量替换
在 Vim 中,批量替换可以使用正则实现。
例如要将 “学习要多看看” 替换为 “学习要多试试”
:%s/学习要多看看/学习要多试试/g
替换的多种方式
- :%s/原内容/新内容/g : 全局替换
- :s/原内容/新内容/g : 替换本行
- :10, 100s/原内容/新内容/g : 替换10 到 100 行的内容
查找
在 Vim 中,使用 / 开始查找,如需要查找 Hello , 则在 Normal 下输入 /Hello 即可。使用
查找的多种方式
- /Hello\c : 不区分大小写
- /Hello\C : 区分大小写
部分情况处理
无权限保存
在编辑无权限操作的文件后,提示无权限保存,在最开始我都是复制修改的内容,然后重新 sudo 打开。
其实在 Vim 内部可以实现直接保存:
:w !sudo tee %
具体实现方式请自行了解