Vim 速查手册

一、移动光标

字符级
命令 功能
h 移动一个字符单位
l 移动一个字符单位
j 移动一个字符单位
k 移动一个字符单位
单词级
命令 功能
w/W 移动到下一单词开头
e/E 移动到单词结尾
b/B 移动到单词开头

PS:所谓“单词”,是按照英文的书写和使用习惯来定义的。用在中文上,一般就会以标点符号和空格作为“单词”的界限。所以常常是一句话一句话地跳转。

块级
命令 功能
0 移动到当前行的第一个字符
^ 移动到当前行第一个非空白字符
$ 移动到当前行行尾
+ 移动到下一行的首字母
- 移动到上一行的首字母
gg 移动到文档第一行
G 移动到文档最后一行
H 移动到当前屏幕的第一行
M 移动到当前屏幕的中间一行
L 移动到当前屏幕的最后一行
:<n> 或 <n>gg 跳转到第 n 行
:+<n> 或 <n>j 从当前位置向下跳 n 行
:-<n> 或 <n>k 从当前位置向上跳 n 行
滚动屏幕
命令 功能
Ctrl-d 向下滚动半页
Ctrl-u 向上滚动半页
Ctrl-f 向下移滚动一页
Ctrl-b 向上滚动一页
z<Enter> 将当前行滚动到屏幕顶部
z. 将当前行滚动到屏幕中间
z- 将当前行滚动到屏幕底部

PS:绝大部分命令前都可以加一个数字 n ,通常表示对其后的命令连续执行 n 次。所以 3j 可以表示向下移动 3 个字符单位(即下移 3 行)。
3l 表示向右移动 3 个字符单位。相当于连续执行了 l 命令 3 次。
9z. 则表示光标移动到第 9 行的同时,滚动屏幕并使得第 9 行位于屏幕中间。(这个 9 的含义不同于 3l 命令中的 3

前面带冒号的命令(如 :+<n>,命令内容会显示在底部)是需要手动输入回车后才执行的。而不带冒号的命令(如 <n>gg)需要在键盘上不间断地按下,之后命令会自动执行。

光标移动示例

二、文档操作

简单编辑命令
插入
命令 功能
i 当前字符前插入
a 当前字符后插入
I 行首插入
A 行尾插入
o 在下一行插入
O 在上一行插入

PS:以上命令会使 vim 进入 insert 模式(即编辑模式),此时输入的任何命令都会作为字符插入到文档中。
esc 键可退出 insert 模式

删除(并将删除的内容保存至 vim 剪贴板
命令 功能
x 删除当前字符(等于 insert 模式下的 Delete)
X 删除前一个字符(等于 insert 模式下的 Backspace)
dd 删除当前行
d<x> 删除指定内容
D 删除当前光标位置到行尾的所有内容。等于 d$
cc 替换整行内容。即将整行内容删除并进入 insert 模式
c<x> 删除指定内容后,进入 insert 模式。相当于 d<x>a
C 替换当前光标位置到行尾的所有内容。等于 c$

<x> 部分用于指定删除的范围。
j 表示将光标向下移动一个字符单位(即下移一行),则 dj 表示删除当前行和下一行的内容。G 表示将光标移动到文档末尾,则在光标定位在文档首行时,使用 dG 命令可以清空整个文档的内容。

PS:使用以上命令删除的内容会自动保存到 vim 的剪贴板中,即所谓“删除”实际上是“剪切”,使用 p 命令即可粘贴删除的内容。而且该剪贴板限于 vim 内部,不是系统剪贴板。

复制与粘贴
命令 功能
yy 复制当前内容到 vim 剪贴板
y<x> 复制指定内容到 vim 剪贴板
p 在当前位置后粘贴
P 在当前位置前粘贴
J 将当前行与下一行内容合并为一行

y<x> 命令中的 <x> 同样用于指定复制的范围。
4j 表示将光标下移 4 行,则 y4j 表示将当前行及其后 4 行内容复制到 vim 剪贴板。8gg 表示将光标定位至第 8 行,则 y8gg 表示复制当前行到第 8 行的所有内容。
当 vim 剪贴板中的内容为整行时,则粘贴命令(p/P)执行时,也会变成在当前行的前(后)一行粘贴。

查找

行内查找

命令 功能
f<x> 当前行向行尾方向查找并定位到字符 x
F<x> 当前行向行首方向查找并定位到字符 x
t<x> 当前行向行尾方向查找并定位到字符 x 之前
T<x> 当前行向行首方向查找并定位到字符 x 之后
; 继续向当前方向查找下一个字符
, 向当前方向的相反方向查找下一个字符

文档内查找

命令 功能
* 向后查找光标当前所在单词
# 向前查找光标当前所在单词
/<pattern> 向后查找指定字符串或模式
?<pattern> 向前查找指定字符串或模式
n 继续查找下一个(依照原方向继续查找)
N 继续查找上一个(依照原方向进行反向查找)

PS:vim 中可使用 % 对括号 ()[]{} 进行匹配查找,当光标位于其中一个符合上时,按下 % 会跳转到与之匹配的另外一个符合上。

替换
命令 功能
r<x> 将当前字符替换为字符 x
s 删除当前字符并进入 insert 模式
R 进入 replace 模式,逐字对当前字符进行替换操作,可以移动光标定位需要替换的字符。直到按下 ESC 键退出该模式
~ 对当前字符进行大小写切换(即大写转小写,小写转大写)
gu<x> 将指定的文本转换为小写
gU<x> 将指定的文本转换为大写
g~<x> 将指定文本进行大小写切换
:<n1>,<n2>s/<pattern>/<replace> 以某个模式(pattern)检索整个文档,并将第 n1 行到第 n2 行中的匹配项替换为指定内容(replace)
:%s/<pattern>/<replace> 以某个模式(pattern)检索整个文档并将匹配项替换为指定内容(replace)。等同于 ``:1,$s/<pattern>/<replace>

PS:%s/<pattern>/<replace> 命令中的 <pattern> 可以是正则表达式,且该命令只替换每行中的第一个匹配项。如需要全局匹配,可以使用 :%s/<pattern>/<replace>/g 命令

before replace

:%s/s.t/SET

:%s/s.t/SET/g

撤销、重做
命令 功能
. 重复执行上一次的命令
u 撤销
U 撤销对当前行的所有操作
Ctrl-r 重做
打开、关闭文档
命令 功能
:e <filename> 打开名为 filename 的文件,如文件不存在则创建
:Ex 在 vim 中打开目录树,光标选定后回车打开对应文件(- 命令进入上级目录)
:w 保存当前文件
:wa 保存全部文件
:wq 或 ZZ 保存文件并退出 vim
:q! 或 ZQ 强制退出 vim ,不保存文件
:r <filename> 读入另一个文档(filename)的数据,并将其内容附加到当前文档光标所在行的后面
:saveas <new_filename> 文件另存为
:w <new_name> 另存为一份名为 new_name 的副本并继续编辑原文件
:<n1>,<n2>w <new_name> 将 n1 行到 n2 行的所有内容保存到名为 new_name 的新文档中
Buffer

Buffer(缓冲区)指 vim 中打开的文件所占的内存空间,当未写入磁盘时,所有的修改都发生在内存中。vim 打开过的每个文件都会放到一个 Buffer 中,可以随意切换已打开的 Buffer。

命令 功能
:ls 或 :buffers 查看 buffer 列表
:bn 打开缓冲区中下一个文件
:bp 打开缓冲区中上一个文件
:b<n> 打开缓冲区中第 n 个文件
:bdelete<n> 删除需要关闭的缓冲区文件
before :bn

after :bn

三、其他技巧

缩进
  • >> 向右缩进当前行
  • << 向左缩进当前行
  • 4>> 向右缩进当前行的同时,缩进当前行下面的 3 行内容
  • >G 向右缩进当前行到文档末尾的所有内容
自动排版
  • == 自动排版当前行
  • gg=G 自动排版整个文档
  • <n>== 对从当前行开始的 n 行进行自动排版
  • =<n>j 对当前行以及下面的 n 行进行自动排版
执行 shell 命令

:!<command> 可以执行相应的 shell 命令,命令执行完成后按 Enter 回到 vim 界面。
如使用 :1,9!sort 命令可以将当前文件中第 1 行到第 9 行的内容重新排序。
:r !<command> 可以将相应 shell 命令执行后的输出读取到当前文件中。
如使用 :r !date 命令可以将当前详细的时间日期插入到 vim 编辑的文件中。

四、分屏与标签页

分屏与标签页
窗口分屏
  1. 分屏方式
  • :split:spCtrl-w s :上下分屏
  • :vsplit:vs 或 `Ctrl-w v`` :左右分屏
  • :diffsplit:diffs :diff 模式打开一个分屏,后面可以加 <filename>
  1. 窗口跳转
  • Ctrl-w w :激活下一个窗口
  • Ctrl-w j :激活下方窗口
  • Ctrl-w k :激活上方窗口
  • Ctrl-w h :激活左侧窗口
  • Ctrl-w l :激活右侧窗口
  1. 屏幕缩放
  • Ctrl-w = :平均窗口尺寸
  • Ctrl-w + :增加当前窗口高度
  • Ctrl-w - :缩减窗口高度
  • Ctrl-w _ :最大窗口高度
  • Ctrl-w > :增加窗口宽度
  • Ctrl-w < :缩减窗口宽度
  • Ctrl-w | :最大窗口宽度
标签页
  1. 创建标签页
    :tabnew:tabedit:tabe :打开新标签页
    该命令包括上面的分屏命令(:sp:vs 等)后面都可以跟 <filename> 选项,用以在新标签页(或窗口)中打开指定文件
  2. 切换标签页
  • gt:tabnext:tabn :切换到下一个标签页(最后一个会循环到第一个)
  • gT:tabprevious:tabp :切换到上一个标签页
  • :tabrewind:tabr:tabfir :切换到第一个标签页
  • :tablast:tabl :切换到最后一个标签页
  1. 关闭标签页
  • :tabclose:tabc :关闭当前标签页
  • :-tabc :关闭上一个标签页
  • :+tabc :关闭下一个标签页
  • :tabonly:tabo :关闭其他标签页

附录:vim 模式介绍

大致上 vim 分为三种模式,分别是命令模式(Command mode),编辑模式(Insert mode)和底线命令模式(Last line mode)。

1. 命令模式

vim 启动即进入命令模式。此时敲击键盘动作会被识别为命令,而不是作为字符插入到文档中。如:

  • i 切换到输入模式(在当前字符前插入)
  • : 切换到底线命令模式,此时输入的命令显示在最底下一行, : 符号后面
    命令模式下只有一些最基本的命令,而底线命令模式下拥有更多的命令。
2. 编辑模式

在命令模式下键入 i (或 ae 等)即进入编辑模式
在编辑模式下,可以像在记事本中那样,使用键盘输入或修改文档内容。注意编辑完成时,可使用 ESC 键退出编辑模式,回到命令模式。

3. 底线命令模式

在命令模式下按下 : 即进入底线命令模式
该模式下可以输入单个或多个字符的命令,以完成比命令模式下更复杂的操作(如 :wq 保存文件并退出)
ESC 键可随时退出底线命令模式。

参考书籍

vimtutor
Learning The Vi And Vim Editors, 7th Edition

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 光标移动 h 光标左移,同 <Left> 键j ...
    guanguans阅读 1,840评论 0 16
  • 曾经在思科的工厂测试系统`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超过2年半,现在...
    戈多在地狱阅读 1,795评论 1 13
  • 目录(?)[-] 关于Vim 1 Vim的几种模式 启动Vim 文档操作 光标的移动 1 基本移动 2 翻屏 3 ...
    SunnyLeong阅读 8,658评论 0 32
  • 不同的企业对员工关系重视的程度不同。 由于重视的程度不同,以及投入的成本不同,导致了不同的结果。 这是一个很大的课...
    杨辉先生阅读 333评论 1 2
  • 拉开卧室的遮光窗帘,苏妍一边拿干毛巾擦着刚洗好的头发,一边看向窗外,外面一片晴朗,阳光洒进屋内,心情也愉悦起来! ...
    发非花阅读 193评论 0 1