内容纲要

Vim(官方网站)是一个高度可配置的文本编辑器,用于高效地创建和更改任何类型的文本。它以「vi」内置于大多数的 UNIX 系统和 Apple 的 macOS 系统。

Vim 具有一个多种模式的概念,不同模式的用途也不同,常用的模式有:

  • 正常模式(Normal-mode)
  • 插入模式(Insert-mode)
  • 命令模式(Command-mode)
  • 可视模式(Visual-mode)

命令输入 vim 后就进入了 Vim 编辑器(在一些 Linux 发行版或默认环境可能不带有 Vim 则需要自行安装),此时 Vim 属于「正常模式」,这个模式下的键盘按键都是命令按键,而不能直接输入文字内容。

在进入「插入模式」后就可以正常输入内容了。

而在文本内容输入完成后需要保存等操作就需要进入「命令模式」。

在用于一些搞错文本操作就需要「可视模式」


插入模式

此时,按下字母 i 后就进入到了「插入模式」,终端左下角会出现 – INSERT –,这个模式下就可以正常输入文本内容。

如果想回到「正常模式」按 Esc 键即可。

除了使用小写的 i 外还有以下几种方法进入「插入模式」,且其作用也有所不同:

  • i(小写)进入在当前光标所在的位置
  • I(大写,Shift + I)进入在当前光标所在行的开头
  • a(小写)进入当前光标位置的下一位
  • A(大写,Shift + A)进入当前光标所在行的结尾
  • o(小写)进入当前光标所在行的下一行并新建一行(类似于回车)
  • O(大写,Shift + O)进入当前光标所在行的上一行并新建一行

正常模式

在「插入模式」完成文本输入后可能需要对文本有一些操作如复制、粘贴等等,这时候就按 Esc 回到正常模式。

光标移动

  • H 向左移动
  • L 向右移动
  • K 向上移动
  • J 向下移动

剪切、复制和粘贴

剪切使用 D

  • dd 剪切一整行
  • d$ 剪切光标位置到行到结尾

复制使用 Y

  • yy 复制整行
  • 3yy 复制多行如 3 行,在被复制的 3 行的第 1 行
  • y$ 从光标位置到行的结尾

粘贴使用 P

  • p 粘贴

撤销

如果剪切、粘贴时有误操作可以使用撤销,撤销使用 U

如果不幸在撤销操作也失误,想撤销「撤销」操作可以按Ctrl + R

删除

在使用 H L J K 移动光标到指定删除字符后按 X 即可将其删除。

替换

在使用 H L J K 移动光标到指定替换对字符后,先按 R 键再输入替换对字符。

跳到行开头和结尾

^Shift + 6)光标移动到当前行的开头
$Shift + 4)光标移动到当前行的结尾

跳到指定行

如果想到第一行使用小写的 g

如果想到最后一行使用使用大写的 GShift + G

如果想跳到指定行则使用 行数 + 大写的 G,如跳到第 7 行:7G

但是如果行数太多你也分不清第几行怎么办?这时候可以用到「命令模式」,按 Esc 确保回到「正常模式后」直接输入:set nu 即可在每行前显示行号。


命令模式

「命令模式」主要用于文件的保存、退出、查找、替换。

在「插入模式」输入完文本后想要保存时,先按 Esc 回到「正常模式」,然后输入冒号,此时终端左下角会出现冒号。

保存

保存使用 :w

# 如果是编辑现有的文件需要直接保存
:w
# 如果是新建的文件需要保存到指定路径
:w /home/conners/test.txt

退出

退出使用 :q

# 在保存后退出文件使用
:q
# 其实也可以将保存和退出一起使用
:wq
# 有时候修改到一半觉得还不如不改,想要不作任何修改退出,还原修改操作
:q!

查找

使用 / 加上要查找的字符就可以了,光标会自动移动到查找到的第一个结果。

如果存在多个结果,可以按 N 移动到下一个或者按 Shift + N 移动到上一个结果。

# 比如要查找字母 a,注意此时前面没有冒号!
/a

替换

# :/s/被替换/替换成
# 比如将当前光标所在行的 a 替换成 A
:/s/a/A
# 如果想对整个文件每行的第一个 a 进行替换
:%s/a/A
# 如果想对整个文件所有的 a 进行替换
:%s/a/A/g

替换操作时出现错误记得可以使用之前提过的 UCtrl + R

其他

有时候在编辑到一半时你可能需要再通过命令查看一些操作,比如你在写一篇日志但是不记得今天是几号了。

在 Vim 里运行命令

# :! 接其他命令,比如临时查看下日历
# 在新界面查阅后按回车键返回
:!cal

:set

# 显示行号
:set nu
# 关闭显示行号
:set nonu

但是这个操作是针对当前打开的 Vim 的,关闭后再开就没有了,如果想打开任何文件都显示行号需要修改 Vim 配置文件。

# Debian/Ubuntu 和 CentOS 的 Vim 配置路径不同
# Debian/Ubuntu
vim /etc/vim/vimrc
# CentOS
vim /etc/vimrc

在进入「vimrc」配置文件后:

  • Shift + G 移动到配置文件底部
  • O 新建一行
  • 输入文本 set nu(⚠️注意不带冒号)
  • Esc 回到正常模式并输入 :wq 保存并推出
  • 如此,新打开的 Vim 就会默认显示行号了

可视模式

可视模式主要用于对文件大量操作进行一次完成。

进入可是模式的三种方法

  • v(小写)字符可视模式
  • V(大写 Shift + V)行可视模式
  • Ctrl + v 块可视模式

比较常用的是块可视模式,先看一个文本

批量添加

aaaaaa
bbbbbb
cccccc
ddddd

比如想在每行第一个字母后面添加数字 1

  1. 将光标移动到第一行的第二个 a
  2. 首先按 Ctrl + V 左下角出现 – VISUAL BLOCK – 表明进入块可视区域,这时候移动光标选择区域比如自上而下选到最后一行的第二个d
  3. 按下 Shift + I(也就是大写 I)输入内容比如数字 1
  4. 按两下 Esc

就可以看到文本内容变成

a1aaaaa
b1bbbbb
c1ccccc
d1dddd

选择删除

以上面那段文本为例,进入「可视模式」后使用方向键移动光标可以选择多列多行,选择完成后按 D 键删除光标所选区域内容。

同样,对于撤销操作同样可以使用 UCtrl + R