说起来,从接触Linux到现在,使用Vim大概有一年的时间,大部分时候主要在编辑一些配置文件,查看文档使用。算不上vim的高级玩家,在此主要针对vim的一些常见使用场景做一个命令汇总。

打开文件

vim -On file1 file2 # 左右打开两个文件
vim -on file1 file2 # 上下打开两个文件
vim -d file1 file2 # diff

编辑常用

数字+hjkl 上下左右
^ $ 跳转到行首行位
gg G 首行 尾行
aAoO 插入在前后上下
数字+yy 数字+pp 复制粘贴

通过c-f向下翻页,c-b向上翻页;c-e逐行下滚,c-y逐行上滚。这在几乎所有Unix软件中都是好使的,比如man和less。 H可以移动到屏幕的首行,L到屏幕尾行,M到屏幕中间。

zt可以置顶当前行,通常用来查看完整的下文,比如函数、类的定义。 zz将当前行移到屏幕中部,zb移到底部。

多行编辑

最常用的编辑即为块注释和块取消注释:

c-v 向下选中要被注释的行 # 选中模式
I # insert,在首行插入注释符
Esc # 推出即将首行更改应用到选中行

取消块注释差不多,选中之后x即可

多窗口编辑

:split file 横屏打开一个文件
:vsplit file 竖屏打开一个文件
c-w hjkl 上下左右切换活动窗口
c-w w 顺序切换
c-w HJKL 上下左右移动窗口

vim有多标签功能Tag,但我觉得用得很少,在此不表
另外用得比较多的,前后台切换(这个其实是Linux的用法):

切换到后台: c-z
切换到前台: fg 回车

退出

ZZ 保存退出
ZQ 不保存退出

其他

显示行号: :set nu
设置编码: :set encoding:utf-8
美化json: :%!python -m json.tool
全局替换: :%s/被替换的/替换后的/g
解决粘贴时跳行问题: :set paste