引言
Vim是Linux下最强大的文本编辑器之一,被誉为"编辑器之神"。它完全基于键盘操作,无需鼠标,熟练后编辑效率极高。本文将从零开始介绍Vim的基本概念、三种核心模式、常用命令以及简单的个性化配置,帮助你快速上手。
一、Vim与Vi的区别
Vi是Unix系统最早的全屏幕编辑器,而Vim(Vi Improved)是其增强版,增加了语法高亮、可视化操作、多窗口编辑、插件支持等特性。Vim可以在终端、X Window、macOS、Windows等环境下运行。我们统一使用Vim进行学习。
二、Vim的三种基本模式
Vim之所以强大,是因为它拥有多种模式,其中最重要的是以下三种:
| 模式 | 功能描述 |
|---|---|
| 命令模式(Normal mode) | 控制光标移动、删除字符/行、复制粘贴、进入其他模式。刚打开Vim时默认在此模式。 |
| 插入模式(Insert mode) | 可以输入文字,像普通编辑器一样。按i、a、o等从命令模式进入,按ESC返回命令模式。 |
| 末行模式(Last line mode) | 用于保存文件、退出Vim、查找替换、设置行号等。在命令模式下按:进入。 |
除了这三种,Vim还有可视模式、选择模式、Ex模式等,总共12种模式,但初级阶段掌握上述三种足够。
三、基本操作流程
-
打开文件:
vim test.c -
开始编辑:按
i进入插入模式,输入代码。 -
返回命令模式:按
ESC -
保存并退出:在命令模式下按
:进入末行模式,输入wq回车。 -
强制退出不保存:末行模式输入
q!
四、命令模式常用命令集
1. 光标移动(建议使用标准键位)
| 按键 | 作用 |
|---|---|
h / j / k / l |
左 / 下 / 上 / 右 |
w |
跳到下一个单词开头 |
b |
跳到上一个单词开头 |
e |
跳到单词末尾 |
0 或 ^ |
跳到行首 |
$ |
跳到行尾 |
gg |
跳到文件首行 |
G |
跳到文件末行 |
nG 或 :n |
跳到第n行 |
Ctrl+f / Ctrl+b |
向前/向后翻一页 |
Ctrl+d / Ctrl+u |
向前/向后翻半页 |
2. 删除操作
| 按键 | 作用 |
|---|---|
x |
删除光标所在字符 |
nx |
删除光标后n个字符(包含当前) |
X |
删除光标前一个字符 |
dd |
删除整行 |
ndd |
删除从当前行开始的n行 |
3. 复制与粘贴
| 按键 | 作用 |
|---|---|
yy |
复制当前行 |
nyy |
复制n行 |
yw |
复制光标到单词末尾 |
p |
粘贴到光标后 |
P |
粘贴到光标前 |
4. 撤销与恢复
| 按键 | 作用 |
|---|---|
u |
撤销上一次操作 |
Ctrl+r |
恢复撤销的操作 |
5. 替换
| 按键 | 作用 |
|---|---|
r |
替换光标处的一个字符 |
R |
连续替换多个字符(覆盖模式) |
五、末行模式常用命令集
| 命令 | 作用 |
|---|---|
:w |
保存文件 |
:q |
退出(未保存会提示) |
:q! |
强制退出不保存 |
:wq 或 :x |
保存并退出 |
:set nu |
显示行号 |
:set nonu |
取消行号 |
:n |
跳转到第n行(如:15跳转到15行) |
:/关键字 |
向下搜索关键字,按n继续下一个 |
:?关键字 |
向上搜索关键字 |
:%s/old/new/g |
全局替换所有old为new |
:s/old/new/ |
替换当前行第一个old |
:n,ms/old/new/g |
替换n到m行所有old |
六、简单Vim配置(~/.vimrc)
Vim的配置通过主目录下的.vimrc文件实现。以下是一个基础配置示例:
syntax on " 语法高亮
set nu " 显示行号
set tabstop=4 " Tab键宽度为4空格
set shiftwidth=4 " 自动缩进宽度
set expandtab " 将Tab转换为空格
set autoindent " 自动缩进
set cursorline " 高亮当前行
你还可以安装插件,如TagList(代码标签列表)、WinManager(文件浏览器)等,让Vim更像IDE。
七、练习建议
-
新建一个
test.txt,用Vim打开,练习光标移动、删除、复制、粘贴。 -
编写一个简单的C程序,保存、编译、运行。
-
尝试搜索与替换功能。
-
配置
.vimrc,体验语法高亮和行号。
八、总结
Vim的学习曲线较陡,但只要坚持使用一周,你就会爱上这种手不离键盘的编辑方式。记住三种模式:命令模式、插入模式、末行模式 ,并熟练核心命令:i、ESC、dd、yy、p、u、:wq。下一篇文章我们将学习如何使用gcc/g++编译器将代码变成可执行程序。