一. 初探 vim
vim 的发展史
vim 是从 vi 发展出来的一款多模式文本编辑器. 具有代码补全, 编译及错误跳转等方便编程的功能, 被程序员所广泛使用, 和 Emacs 并列成为类 Unix 系统用户最喜欢的文本编辑器.
对于 vim 这款编辑器来说, 它不同于其他编辑器的地方在于, 你可以仅使用键盘中的主键盘区, 就可以完成绝大多数的操作. 当你进入 vim 后, 默认为命令模式, 主键盘上的所有按键就被赋予了各种功能, 本文也会介绍绝大多数的功能按键.

IDE 和编辑器
VS2022 叫做 IDE [Integrated Development Environment] , 是一个集成开发环境 , 用这一个软件可以完成在开发过程中 编辑代码-->调试代码-->编译, 链接, 运行代码 这些功能.
而 vim 只是一个文本编辑器, 只有编辑代码的功能.
在 Linux 下, 三个工具完成三个不同的功能.
· vim 负责代码的编辑和维护
· gdb 负责代码的调试
· gcc/g++ 负责代码的编译
vim 中的五种常见模式
1. 正常/普通/命令模式 (Normal mode)
控制屏幕光标的移动, 字符, 单词或行的删除, 移动复制某区段及进入 插入模式 下,或者进入 末行模式 下.
2. 插入模式 (Insert mode)
在 正常模式 下, 按 i
即可进入该模式. 只有在 插入模式 下,才可以做文本输入, 按 ESC
键可回到 正常模式 . 该模式是我们后面使用最频繁的编辑模式.
3. 末行模式 (Last line mode)
可以完成文件保存或退出, 文件替换, 查找字符串, 列出行号等操作. 在 正常模式 下, shift + ; (:)
即可进入该模式. 要查看你的所有模式:打开vim,底行模式直接输入 help vim-modes
.
4. 可视模式 (Visual mode)
在 正常模式 按下 v, V, Ctrl + v, 都可以进入可视模式. 可视模式中的操作有点像拿鼠标进行操作, 选择文本的时候有一种鼠标选择的即视感, 有时候会很方便.
5. 替换模式(Replace mode)
在正常模式按下 R
, 即可进入替换模式. 替换模式并没有那么常用,因为在命令模式中就可以直接进行替换,也就是按下 r
键, 然后直接对当前光标所在字符进行替换即可. 但是每次只可替换一次或者批量替换 , 在 替换模式 中可连续替换, 更加方便.
二. vim 基本操作
安装 vim
普通用户: sudo yum install -y vim
root: yum -y install vim
进入 vim
直接输入 vim
, 即可进入 vim 的初始界面.

这只是 vim
的编辑界面, 可以看到左上角的 [No Name], 并没有对任何一个文件操作.
vim + 文件名
, 创建文件并用 vim 打开该文件.

现在就可以在 code.c 文件中编辑代码了.
vim 中的模式切换
当用 vim 打开文件时, 默认为 命令模式.

要想从命令模式切换为其他模式, 就要按下对应的功能键, 以下是 vim中常见的5种模式相互切换的示意图.

插入模式.

末行模式.

可视模式.

替换模式.

三. vim 指令集
1. 命令模式指令集
移动光标
vim 可以直接用键盘上 ↑ ↓ ← → 来进行移动, 但更正规的做法是用小写英文字母 h
, j
, k
, l
, 分别控制光标左, 下, 上, 右移动一格.
-
$
: 移动到光标所在行的 "行尾" (Shift + 4
) . -
^
: 移动到光标所在行的 "行首" (Shift + 6
) . -
w
: 光标跳到 下个单词的开头 . -
b
: 光标回到 上个单词的开头 . -
gg
: 使光标移动到 文本的开头 . -
G
: 使光标移动到 文本的末端 (Shift + g
). -
n + G
: 定位光标到 第 n 行行首 (n + Shift + g
). -
Ctrl + b
: 屏幕往前 (上) 移动一页. -
Ctrl + f
: 屏幕往后 (下) 移动一页. -
Ctrl + u
: 屏幕往前 (上) 移动半页. -
Ctrl + d
: 屏幕往后 (下) 移动半页.
复制粘贴
-
yw
: 将光标所在之处到 当前单词末端 的字符复制到缓冲区中. -
n + yw
: 复制 n 个 单词 到缓冲区. -
yy
: 复制光标 所在行 到缓冲区. -
n + yy
: 复制 n 行 (包括光标所在行) 到缓冲区. -
p
: 将缓冲区内的字符粘贴到 光标所在行的下一行. -
n + p
: 将缓冲区内的字符粘贴到 光标所在行的下一行 这一行为重复 n 次.
删除
-
x
: 每按一次 x , 删除光标所在位置的一个字符. -
n + x
: 删除从光标所在字符开始的 n 个字符 (包括光标所在字符本身). -
dd
: 删除光标所在行. -
n + dd
: 删除光标所在行开始向下 n 行 (包括光标所在行).
撤销
-
u
: 如果误执行一个命令, 可以马上按下 u, 撤销上一个操作. 按多次 u 可以执行多次复原. -
Ctrl + r
: 撤销的恢复.
替换
-
r
: 替换光标所在处的字符. -
n + r
: 对光标字符加之后的共 n 个字符进行批量化替换 (都替换为同一字符). -
R
:替换光标所到之处的字符, 直到按下Esc
键为止 (也就是替换模式) (Shift + r
).
大小写切换
~
(Shift + ~左边的那个字符
)
2. 插入模式指令集
在插入模式下, 可以对代码做增, 删, 修改的操作, 因此不存在指令集. 但是插入模式也被分为好几种, 换言之就是从命令模式 按下 [特定键] 即可进入不同插入模式.
-
i
: 从光标所在位置开始输入字符. -
Shift + i
: 进入插入模式后使光标快速切换到当前行行首. -
a
: 从光标所在位置的下一个位置开始输入字符. -
Shift + a
: 进入插入模式后使光标快速切换到当前行行尾. -
o
: 新起一行 (光标当前所在行的下一行 ), 从行首开始输入字符. -
Shift + o
: 新起一行 (光标当前所在行的上一行 ), 从行首开始输入字符.
3. 末行模式指令集
列出和去除行号
:set nonu
去除行号.

:set nu
列出行号.

跳到某一行
:行号
跳到行号所指定的行.

查找字符
-
/关键字 : 先按
/
键, 再输入想查找的字符, 如果第一次找的字符不是想要的, 可以一直按n
键会 往后寻找 到最后一个要查找的字符为止. -
?关键字 : 先按
?
键, 再输入想查找的字符, 如果第一次找的字符不是想要的, 可以一直按n
键会 往前寻找 到最后一个要查找的字符为止.
替换字符
%s/替换前的字符串/替换后的字符串/g
, 批量替换相同的字符串.
%s 可以看成是 C 语言中字符串的格式声明, g 代表 global 整体的.
保存及退出vim
-
q
: 直接退出. -
q!
: 强制退出. -
w
: 保存. -
wq
: 保存并退出. -
wq!
: 保存并强制退出.
不退出 vim 进行相关指令操作
! + 指令
相当于在外部执行指令.
Press ENTER or type command to continue [按下任意键继续]
多文件分屏编辑文本
-
vs [文件名]
打开多个文件编辑窗口. -
Ctrl + ww
: 切换光标到不同的窗口.
4. 可视模式指令集
在可视模式下,比较常用的功能是多行注释
. 需要配合 [命令模式] 和 [底行模式] 一起使用.
多行注释
Ctrl + v
进入可视模式.

进入可视模式后, 选择要注释的行, 按 j
往下选择多行.

然后按下 Shift + i
进入插入模式, 并在光标所在处输入 //
.

然后按下 Esc
键, 完成多行注释, 并回到命令模式.

取消多行注释
Ctrl + v
进入可视模式.

按两次 l
, 使光标向右移动两次, 将两个 /
都选中.

按 j
键使光标向下移动, 直到选中所有的注释.

按 d
键即可将所有注释删除, 并自动回到命令模式.

5. 替换模式指令集
R
指令( Shift + r
) 让你一步到位进入替换模式: 对于需要替换多个字符, 更好的方案是直接进入替换模式. 按下大写的 R 键, 屏幕左下角出现 REPLACE 字样, 说明你已经处于替换模式. 此时输入字符可以连续替换光标及其后边的内容.
Tip: 退格键 (Backspace) 的作用
- 若光标所在字符的左侧字符被替换过, 则使得左侧被替换的字符恢复到原来的字符.
- 若光标所在字符的左侧字符没有被替换过, 则只是使光标简单的向左移动.
四. vim 配置
自定义配置
各用户有关 vim 的配置是相互独立的, 因为这取决于每个用户家目录 下的配置文件 .vimrc
. 所以在配置某普通用户的 vim 时, 是不会影响其他用户的 vim 的.
由于 .vimrc
是配置文件, 需要 ll -a
才可以查看其属性.

vim .vimrc
查看配置文件 (如下为配置好的 .vimrc
, 第一次打开 .vimrc
为空白).

有关 vim 配置的操作可以参考以下两篇文章.
自动化配置
某大神的自动化配置.
将该链接复制并粘贴到命令行下.

输入 root 密码即可安装.

配置完后产生如下提醒, 输入 source ~/.bashrc
让配置文件生效.

配置完成.