Vim编辑器从入门到熟练 —— 三种模式与常用命令详解

引言

Vim是Linux下最强大的文本编辑器之一,被誉为"编辑器之神"。它完全基于键盘操作,无需鼠标,熟练后编辑效率极高。本文将从零开始介绍Vim的基本概念、三种核心模式、常用命令以及简单的个性化配置,帮助你快速上手。

一、Vim与Vi的区别

Vi是Unix系统最早的全屏幕编辑器,而Vim(Vi Improved)是其增强版,增加了语法高亮、可视化操作、多窗口编辑、插件支持等特性。Vim可以在终端、X Window、macOS、Windows等环境下运行。我们统一使用Vim进行学习。

二、Vim的三种基本模式

Vim之所以强大,是因为它拥有多种模式,其中最重要的是以下三种:

模式 功能描述
命令模式(Normal mode) 控制光标移动、删除字符/行、复制粘贴、进入其他模式。刚打开Vim时默认在此模式。
插入模式(Insert mode) 可以输入文字,像普通编辑器一样。按iao等从命令模式进入,按ESC返回命令模式。
末行模式(Last line mode) 用于保存文件、退出Vim、查找替换、设置行号等。在命令模式下按:进入。

除了这三种,Vim还有可视模式、选择模式、Ex模式等,总共12种模式,但初级阶段掌握上述三种足够。

三、基本操作流程

  1. 打开文件:vim test.c

  2. 开始编辑:按i进入插入模式,输入代码。

  3. 返回命令模式:按ESC

  4. 保存并退出:在命令模式下按:进入末行模式,输入wq回车。

  5. 强制退出不保存:末行模式输入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。

七、练习建议

  1. 新建一个test.txt,用Vim打开,练习光标移动、删除、复制、粘贴。

  2. 编写一个简单的C程序,保存、编译、运行。

  3. 尝试搜索与替换功能。

  4. 配置.vimrc,体验语法高亮和行号。

八、总结

Vim的学习曲线较陡,但只要坚持使用一周,你就会爱上这种手不离键盘的编辑方式。记住三种模式:命令模式、插入模式、末行模式 ,并熟练核心命令:iESCddyypu:wq。下一篇文章我们将学习如何使用gcc/g++编译器将代码变成可执行程序。

相关推荐
蚰蜒螟2 小时前
从mkdir命令到磁盘:Linux内核目录创建过程深度解析
linux·运维·数据库
coward912 小时前
Linux内核驱动初始化流程认识(关于late_initcall和modul_init驱动初始化宏差异)
linux·嵌入式硬件
modelmd3 小时前
Linux man 命令详解:从入门到精通
linux
SWAGGY..3 小时前
Linux系统编程:(十一)进程状态&&Linux中的僵尸状态
linux·服务器·编辑器·vim
洵有兮3 小时前
Shell 脚本编程学习总结(基础 + 变量 + 条件 + 流程控制 + 函数数组)
linux·学习
我命由我123453 小时前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
楼兰公子3 小时前
RK3588 Linux驱动开发大纲
linux·驱动开发
!沧海@一粟!3 小时前
Linux高并发内核优化
linux·运维·oracle
perfect123126453 小时前
轻量运维工具fastdp v6版本
linux·运维