vim 教程

前言

vim作为 类 Unix 系统下最强大的文本编辑器之一,如果能稍微掌握一下它的话,就能极大的提高文本编辑效率。如果才接触 vim 的话可能听说过 vim 拥有陡峭的学习线,让新手望而却步。但是在实际使用中简单的使用它并没有这么难,只须记两个命令即可快速入门。

关于 vim 的使用平台,我个人比较建议在类 unix 系统下进行使用,比如 mac 和 linux,关于 windows 平台我个人更建议使用其他文本编辑器比如 vscode 等。

vim 的快捷键不用去死记硬背,需要的时候查一下就行,常用的快捷键多用一下就记住了,没记住说明用不到,简单的浏览一遍就行知道有这种操作就行。

这是我在互联网上找到的 快捷键图表,供大家参考

基本概念

在介绍 vim 之前不得不介绍一下 vi ,在 vi 编写完成的年代,并没有鼠标这种东西,所有对文本的操作全部基于命令和快捷键。vim 作为 vi 的改进,在保留 vi 特性的基础上加入了一些更为强大的使用方式。

vim 拥有三种模式,命令模式,底线命令模式,插入模式。

当我们使用 vim 打开一个文本时,并不能直接对文本编辑,因为我们正处于命令模式下,这是 vim 最具效率的设计也是最容易让新手感觉考虑到迷茫的地方。在命令模式下按下 i 键,就进入了编译模式。在编辑模式下就可以开始编写文本了。在编辑模式下按下键盘最左上角的 ESC 键就回到了命令模式。在命令模式下输入符号 :就进入了底线命令模式,在底线命令模式下可以完成一些可能不是很常用或者一个快捷组合完成不了的操作。

vim 的快捷键,不止是一个单独的键。还可以组合使用,在合理的组合下能极高的提高效率。

更多关于 vim 的介绍请参考https://zh.m.wikipedia.org/zh-cn/Vim

安装 vim

在开始之前还是介绍一下如何安装 vim ,如果你已经安装了 vim 可以直接跳过安装部分。这里主要介绍 vim 在 linux 各大发行版的安装。就我目前的使用来看几乎各大主流 linux 发行版都有打包 vim ,不建议自行编译安装 vim,基本安装步骤就是直接用包管理器直接安装 vim。有的 linux 发行版安装镜像是还有 vim 的,但是最小打印版是不带的,为了方便大家的参考,我就把我使用过的 发行版都演示一下。

debian / ubuntu 安装 vim

更新软件源

sudo apt update

安装 vim

sudo apt install vim

centos 安装 vim

更新软件源

sudo yum update

安装 vim

sudo install vim

fedora 安装 vim

更新软件源

sudo dnf uodate

安装 vim

sudo dnf install vim

alpine 安装 vim

更新软件源

sudo apk update

安装 vim

sudo apk install vim

简单使用 vim

如果只是简单使用看这一部分就能快速入门了。

当我们准备编辑一个文件的时候使用 vim + 文件名就进入了命令模式,例如:vim file.txt。 在命令模式下按下 快捷键 i 即可在光标所在位置输入文本,当文本编辑完成后按下键盘左上脚的 ESC 键退出文本编辑。输入 :wq 保存并退出文本编辑。

是不是很简单,掌握这几个键和命令就能开始使用 vim 了

常用快捷键

常用快捷键主要介绍,我在实际使用 vim 用经常用到的快捷键,所有介绍到的快捷键几乎都是在命令模式和底线模式下进行的。部分键可以在插入模式下使用。

快捷键 功能
ESC 从任何模式中返回命令模式
i 在当前位置进行插入
a 在光标后一位进行插入
o 在光标所在位置的下面新建一行进行插入
O 在光标所在位置的上面新建一行进行插入
↑或 k 光标向上移动一行,↑ 键可以在插入模式下使用
↓或 j 光标向上移动一行,↓键可以在插入模式下使用
←或 h 光标向左移动一位,←键可以在插入模式下使用
→或 l 光标向右移动一位,→键可以在插入模式下使用
0 或 HOME 移动光标到当前行的第一位,HOME 键可在插入模式下使用
$ 或 END 移动光标到当前行的最后一位,END 键可在插入模式下使用
gg 移动光标到文本的第一行
G 移动光标到文本的最后一行
:w 保存
:q 退出
:q! 强制退出,一般用于编辑了文件,不想保存
:wq 保存并退出
x 删除光标所在位置的字符
yy 复制光标所在位置的整行文本
dd 剪切光标所在位置的整行文本,可以用来快速删除文本
v 进入可视模式,按方向键进行选择,选择好后,可按 d 键进行剪切或者按 y 键进行复制
p 粘贴使用 vim 快捷键复制或剪切的文本
CTRL + r 撤销最后的修改,每按一次向前撤销一次
u 恢复 CTRL + r 撤销的内容,每按一次向后恢复一次
:set paste 从外部复制进来的内容,如果是代码的话会被 vim 自动缩减。输入这个命令进入粘贴模式,避免代码被自动缩减
/ 搜索 / 后面跟的内容,例如: /foober ,就会跳转到当前文本中包含 foober 的文本位置,按回车键确认搜索内容。使用 n
跳转到下一个,使用 # 跳转到上一个
:%s/目标/结果/g 替换全文的目标,为指定结果,一般用来更新代码的变量名。例如::%s/foo/ber/g ,替换所有 foo 为 ber
:! :! 后面可以跟 shell 命令,以用来在不退出文本的情况下进行一些其他操作,比如调用编译器或解释器,运行我们正在编辑的文本。例如::!python3 foober.py

如果能记住以前的快捷键的话,就能很好的使用 vim 了,记不住也没关系,多用一下就记住了。

快捷键大全

这一部分可能会不定期更新,因为有的命令很少用到。需要的时候查一下就好。

插入

快捷键 功能
i 在当前光标所在位置进入插入模式
a 光标向后移动一位并进入插入模式
o 在光标所在行的上面新建一行并进入插入模式
O 在光标所在行的下面新建一行并进入插入模式

保存 退出

快捷键 功能
:w 保存更改内容
:w !sudo tee % 在编辑不属于当然用户的文件时,如果忘记了使用 sudo 运行 vim 的话,可以这样补救,运行了 :w !sudo tee
% 后按 l 加载更改。本质上是调用了 shell 命令
:q 退出 vim ,如果文件已修改会提示内容未保存,无法退出 vim
:q! 强制退出 vim,一般用来舍弃修改
:wq 保存并推退出 vim
ZZ 保存并退出 vim

复制 剪切 粘贴

快捷键 功能
yy 复制当前行
dd 剪切当前行
v 按 v 进入可视模式,按方向键选择内容,选择好内容后,按 y 复制按 d 剪切
p 在当前光标后粘贴内容,如果是复制的是整行内容会在光标下面新建一行并粘贴
P 在当前光标后前粘贴内容,如果是复制的是整行内容会在光标上面新建一行并粘贴

正则表达式

正则表达式可以用于搜索或替换。

vim 的正则表达式风格与 perl 的正则表达式风格基本相同,关于正则表达式的详细语法我就不详细介绍了,一说一大堆而且高级语法我还真的没在 vim 用到过。这里我只介绍一些简单实用的。

元字符 功能
. 匹配任意字符
/ 匹配 /,\用于防止转义
\s 匹配空格
* * 前面的最后一个字出现0次或多次
^ 在每行的开始位置进行匹配
$ 在每行的开始位置进行匹配

搜索

快捷键 功能
/ 从上面开始搜索,在 / 后面输入内容后按回车进行查找,按 n 跳转到下一个,按 N 跳转到上一个
? 从下面开始搜索,在 ? 后面输入内容后按回车进行查找,按 n 跳转到下一个,按 N 跳转到上一个
* 搜索当前关标所在位置单词的下一次出现位置,可配合 / 或 ? 使用
# 搜索当前关标所在位置单词的下一次出现位置,可配合 / 或 ? 使用

默认搜索是大小写敏感的,如果需要大小写不敏感的话,需要在结尾加上 \c 例如 /foo\c 会查找 foo Foo FOO

替换

替换部分我将会举例子说明。

格式类似于这样

:[range]s/foo/ber/[flags]

  • range 为替换范围
  • foo 为需要替换掉的字符串
  • ber 为结果
  • flags 为控制参数是可选的
表达式 结果
:%s/foo/ber/ 替换所有行中第一个 foo 为 ber
:%s/foo/ber/g 替换所有行中所有 foo 为 ber
:1,5s/foo/ber/ 替换一至五行出现的第一个 foo 为 ber
:1,5s/foo/ber/g 替换一至五行出现的所有 foo 为 ber
0%