# 关于 vim
vim 是很多 linux 发行版本自带的编辑软件(如果是 vi
,建议升级到 vim
,强大很多)。熟练使用 vim
可以完全抛弃鼠标来进行任何编辑。一旦习惯了 vim
加 markdown
写笔记,你一定会上瘾的。
当然它的学习成本也不低,如果是初学 vim
,运行 vimtutor
是一个聪明的决定,如果你需要中文的 vimtutor
,那就运行 vimtutor zh
。
因为 vim 的命令大全非常多,非常劝退,我掌握的也百不足一,但我认为已经够用了,这篇记录了我认为比较常用的命令。
本文参考 vim 使用笔记,进行大量删减,想学的更全的可以去看原文。
# vim 的模式
vim 是有几种模式的,在不同模式下,同样的操作可能会带来不同的结果,搞清楚模式非常重要!
- 正常模式:用
vim
打开一个文档之后,默认就是这个模式,在此模式下,可以使用快捷键或者使用:
输入命令行 - 插入模式:在正常模式下,按
i
、a
、o
等都可以进入插入模式。在插入模式下,可以输入文本 - 可视模式:正常模式下按
v
可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V
进入可视行模式, 进行整行整行的选中。ctrl+v
进入可视块模式。 - 替换模式:正常模式下,按
R
进入(ps:我几乎没用过 orz)
# 光标的移动
初学者可以使用
↑
↓
←
→
进行移动,跳过这一节的学习。
但是这样操作会挪动右手离开输入区域,来回会降低效率。所以后期如果熟练了其他操作,可以来此处学习其他移动来提高效率。
注意,所有操作均是正常模式下的命令
# 基本移动
命令 | 说明 |
---|---|
h 、 l 、 k 、 j | ← 、 → 、 ↑ 、 ↓ |
w | 前移一个单词,光标停在下一个单词开头 |
W | 移动下一个单词开头,但忽略一些标点 |
b | 后移一个单词,光标停在上一个单词开头 |
B | 移动到上一个单词开头,忽略一些标点 |
0 | 移动到行首 |
$ | 移动到行尾 |
gg | 到文件头部 |
G | 到文件尾部 |
# 翻屏
命令 | 说明 |
---|---|
ctrl+f | 下翻一屏 |
ctrl+b | 上翻一屏 |
zz | 将当前行移动到屏幕中央 |
# 标记
可以提高效率,初学者可以放到后面再学
命令 | 说明 |
---|---|
m{a-z} | 标记光标所在位置,局部标记,只用于当前文件 |
m{A-Z} | 标记光标所在位置,全局标记。标记之后,退出 Vim, 重新启动,标记仍然有效 |
:marks | 显示所有标记 |
`{a-z} | 移动到标记位置 |
# 插入文本
# 基本插入
初学这里可以只记
i
可以进入插入,其他的可以暂时不记,影响不大
命令 | 说明 |
---|---|
i | 在光标前插入 PS: 按 8,再按 i,进入插入模式,输入 =, 按 esc 进入命令模式,就会出现 8 个 = |
I | 在当前行第一个非空字符前插入 |
a | 在光标后插入 |
A | 在当前行最后插入 |
o | 光标后一行插入 |
O | 光标前一行插入 |
# 改写
这里我常用的只有一个 s
,可以配合 v
选中后进行修改。s
相当于 x
(删除)+ i
(插入)两步的合并。
# 常用文本操作的实现
vim 中的删除就是剪切,务必注意按键的大小写区别。
# 复制
文本操作 | 实现方式 |
---|---|
复制行中部分文本 | v 进行选中,选中后按 y 即完成复制 |
快速复制某行 | 正常模式 ,双击 y 可以快速复制光标所在行 |
多行复制 | 使用 V 选中,按 y 进行复制 |
# 剪切和删除
文本操作 | 实现方式 |
---|---|
删除或者剪切行中部分文本 | v 选中, x 进行删除或剪切 |
删除或剪切某行 | 正常模式 下,双击 d |
多行删除或者剪切 | 使用 V 选中,按 d 进行删除或者剪切 (这里其实也可以用 x 删除) |
# 粘贴
正常模式
下,按 p
会在光标后进行粘贴, P
在光标前粘贴
# 查找
正常模式
下,/thing
, 代表搜索光标后的thing
正常模式
下,?thing
, 代表搜索光标前的thing
- 按
n
向后搜索下一个,按N
向前搜索下一个
# 替换
正常模式下
,:n1,n2s/old/new/g
: 用 new 替换文件 n1 行到 n2 行所有的 old。正常模式下
,:%s/old/new/g
: 用 new 替换文件中所有的 old。
# 撤回以及取消撤回
- 撤回:
正常模式下
,按u
,可以多次按u
撤回更多步 - 手抖撤回多了,想回退到撤回前怎么办:
ctrl+r
# 其他
- 补全:
ctrl+n
或者ctrl+p
, 如果有多个选项,ctrl+n
代表向后选择,ctrl+p
代表向前选择 - 重复操作:部分操作可以通过按
.
进行重复操作
# 排版
命令 | 说明 |
---|---|
>> | 向右缩进一个 shiftwidth , 可以用: set shiftwidth=4 设置长度 |
<< | 向左缩进一个 shiftwidth |
# 文档操作
仅介绍操作文档的我常用的基本操作。
所有命令需在正常模式下进行
,注意区分大小写
,vim 所有按键操作均对大小写
敏感,请务必注意大小写
命令 | 说明 |
---|---|
:w | 保存修改 |
:wq 或 ZZ 或 :x | 保存并退出 |
:q | 退出,若强制退出为 :q! |
:e# 或 ctrl+^ | 回到刚才编辑的文件,很实用 |
:f filename | 改变编辑的文件名,这时再保存相当于另存为 |
:saveas newfilename | 另存为 |
:Sex | 水平分割一个窗口,浏览文件系统,用于多文件操作 |
Explore 或者 Ex | 打开文件浏览器 |
# 多文件操作
多文件时可以通过切换文件实现文件间的查看以及复制粘贴
# 多标签编辑多文件
# 以多标签的形式打开 a.md 和 b.md | |
vim -p a.md b.md |
- 切换标签:
:tabn
: 切换到下一个标签;:tabp
: 切换到上一个标签,也可用ctrl+shift+↑
、ctrl+shift+↓
代替 - 移动标签:
:tabm[n]
, 代表将文件移到第 [n] 个标签之后,[n] 代表数字,比如:tabm0
代表移到第一个标签 - 关闭标签:
:tabc[lose]
-- 关闭当前的标签页;:tabo[nly]
-- 关闭其它的标签页;:qall
-- 关闭全部标签
# 分屏编辑
# 水平分割窗口,同时打开 file1 和 file2 | |
vim -o file1 file2 | |
# 垂直分割窗口,同时打开 file1 和 file2 | |
vim -O file1 file2 |
- 切换窗口:
ctrl+ w w
, 注意是按着ctrl
双击w
,ctrl+ w p
代表切换到前一个窗口 - 关闭窗口:
:qall
-- 关闭全部窗口